本文へ移動
cccskills
無料GitHub で公開

rubocop-todo-fix

.rubocop_todo.yml に残った違反を段階的に潰すスキル。safe autocorrect だけで完結する Cop はまとめてバッチで、unsafe autocorrect や手動修正が必要な Cop もリスクに応じた単位でバッチにまとめて潰す。

インストール方法を見る

含まれるファイル(2)

  • SKILL.md31.0 KB
  • references/cop-fix-guide.md19.7 KB

SKILL.md(原文)

インストールする前に、エージェントに与えられる指示の中身を確認できます。

rubocop-todo-fix

rubocop --auto-gen-config で生成された .rubocop_todo.yml には、既存コードの違反が「いったん許容」 として列挙されている。これを潰していくための運用支援スキル。safe autocorrect(-a)だけで完結する Cop はまとめてバッチ処理し、unsafe autocorrect や手動修正が必要な Cop も、挙動変更のリスクに応じた (safe バッチより狭い)単位でバッチにまとめて潰す。 sgcop-setup が .rubocop_todo.yml を生成するところで終わるのに対し、 本スキルはその続き——生成済みの todo を実際に消化する工程——を担う。

導入先の Rails/Ruby プロジェクトで実行する(sgcop gem 本体の開発スキルではない)。

このスキルがやること / やらないこと

  • やる:
    1. .rubocop_todo.yml から 潰す対象を選ぶ。Tier(safe autocorrect / unsafe autocorrect / 手動修正)ごとに、そのリスクに見合ったしきい値・基準で複数 Cop をバッチにまとめる。
    2. 対象 Cop のエントリを todo から削除して 違反を再び検出される状態に戻す。
    3. 修正する: Tier 順(rubocop -a → rubocop -A〈unsafe・要テスト〉→ 手動修正)でバッチを 処理する。同じ Tier のバッチはまとめて一度に適用・確認する。
    4. アプリ仕様上やむを得ない違反だけ、理由コメント付きで最小範囲の Exclude / 無効化に倒す。
    5. 再 rubocop で 違反ゼロを確認(挙動を変えたら関連テストだけ実行)し、必要なら .rubocop_todo.yml を作り直して 停止する。
  • やらない:
    • .rubocop_todo.yml の生成そのものはしない(sgcop-setup の担当。本スキルは「生成済みを潰す」)。
    • コミット / push / PR 作成はしない。 1 サイクル潰したら停止し、差分確認とコミットはユーザーに委ねる。
    • Tier をまたいでバッチにしない。 safe / unsafe / 手動修正はリスクの質が異なるので、 1 回のバッチは同じ Tier の Cop だけで構成する。

なぜこの形か: 既存違反を一度に全部直すと差分が巨大化してレビュー不能になる。「潰す → ユーザーが差分を確認してコミット → 次へ」というレビュー単位の運用にすると、変更の責任範囲が 把握しやすく、挙動が変わっても切り分けやすい。一方で 1 Cop ずつ処理すると、サイクル数 (起動〜レビュー〜コミットの往復)だけが無駄に増えてしまう。そこで Tier ごとに「レビューが 破綻しない範囲」を見極めてバッチ化する:safe autocorrect は挙動を変えないので件数ベースで 最も広く(目安100件)まとめられる。unsafe autocorrect は挙動が変わりうるので、それより 狭い件数(目安30件)に抑える。手動修正はさらに読み解きコストが件数に比例しないため、 件数ではなく「性質が近い少数の Cop(目安2〜3個)」という基準でまとめる。

引数

  • --auto: 起動時にこの引数が渡されたら、1 サイクルをユーザー確認なしで回しきるモードに入る。 スキップするのは「進めてよいか」の確認ゲートだけで、それ以外の原則は一切変わらない:
    • **1 サイクル = 選んだバッチ(Tier をまたがない)**の原則、コミット・push・PR をしない原則、 サイクル完了で停止する原則は --auto でも不変。複数サイクルの自動連続実行はしない。
    • 人間の判断が要る曖昧な分岐は --auto でも勝手に決めない(手順 5 参照)。触らず残して報告する。
    • 手順 6 の関連テスト検証は --auto でも省かない。 unsafe autocorrect を無確認で当てる分、 関連テストが挙動変更を検知する唯一の安全網になるため、むしろ飛ばしてはいけない。
    • WHY: 確認ゲートは「差分が想定外に大きくならないか」「挙動変更を許容するか」を人に確かめる ためのもの。--auto は呼び出し側がその判断を事前に委譲した状態、と位置づける。委譲できるのは 「自動で潰してよい」判断までで、曖昧な Exclude 判断や壊れたテストの承認までは委譲されない。
  • 引数が無ければ(従来どおり)各確認ゲートでユーザーに確認する。

重要な前提

  • 1 サイクル = 選んだバッチ(1 つの Tier にまとめた Cop 群)を潰しきるまで。 潰し終えたら 自動で次へ進まず、そこで停止してユーザーに制御を返す。次を潰したいときはユーザーが改めて このスキルを起動する。
  • safe autocorrect(-a)と unsafe autocorrect(-A)を区別する。 -A はコードの挙動を 変えうるので、適用後は変更箇所に関連するテストで検証する(手順 6。全テストは流さず CI に任せる)。 safe バッチはこの性質を利用して最も広い単位でまとめて処理する(切り離しルールは手順 4 参照)。
  • テスト/lint の実行コマンド・コーディング規約・コミット記法は そのプロジェクトの流儀に従う (このスキルでは決め打ちしない)。Cop ごとの autocorrect 可否の見分け方・Tier の進め方・ 各 Tier のバッチの組み方・Exclude/無効化の書き方は references/cop-fix-guide.md にまとめてある。

手順

1. 前提を確認する

  • プロジェクトルートに .rubocop_todo.yml があるか確認する。
  • 無ければ ここで止め、先に生成するよう案内する(生成は本スキルの役割ではない):
    • sgcop を使っているプロジェクトなら sgcop-setup スキル、または直接 bundle exec rubocop --auto-gen-config で .rubocop_todo.yml を作ってから戻ってくるよう促す。
    • WHY: 本スキルは「列挙済みの違反を消化する」のが役割。潰す対象(todo)が無ければ仕事が始まらない。
  • .rubocop.yml の先頭に inherit_from: .rubocop_todo.yml があることも確認する (--auto-gen-config が自動追記する。これが無いと todo が読まれない)。

2. 潰す対象を選ぶ

  • .rubocop_todo.yml の各 Cop 見出しコメントにある # Offense count: N と autocorrect 対応状況を読み、 候補を提示する。
  • ユーザーが特定 Cop / 特定モードを指定していればそれを優先する。 指定が無ければ以下の方針で選ぶ (見分け方・打ち切り基準は references/cop-fix-guide.md 参照)。

経路A: safe バッチ(safe autocorrect のみで完結する Cop)— しきい値内(目安100件)で複数 Cop を まとめる。候補一覧と合計件数をユーザーに提示し、対象範囲を確認する。--auto 時、または実行環境が 非対話でユーザーの応答を待てない場合は、提示(ログ出力)だけ行い、確認を待たずにしきい値内の バッチをそのまま対象にする。(安全側の理由: safe autocorrect は挙動を変えないため、確認なしで 進めても手順6の検証で違反ゼロを確認できれば取り消し可能な範囲に留まる。)

経路B: unsafe/手動修正のバッチ(unsafe autocorrect対応、または autocorrect 非対応の Cop)— Tier ごとに、そのリスクに見合った基準で複数 Cop をバッチにまとめる(Tier をまたいでは まとめない。組み方・打ち切り基準は references/cop-fix-guide.md 参照)。

  • Tier 2 バッチ(unsafe autocorrect): 件数ベース。経路Aより狭いしきい値(目安30件)に収まる 範囲で複数 Cop をまとめる。挙動が変わりうる修正なので、経路Aと同じ件数まで許容すると 手順6のテストで問題が起きたときの切り分けが大変になるため、上限を絞る。
  • Tier 3 バッチ(手動修正): 件数ではなく 性質が近い少数の Cop(目安2〜3個。例: Metrics/MethodLength と Metrics/AbcSize のように同じ箇所に重なって出る Cop)でまとめる。 手動修正は1件ごとの読み解きコストが件数に比例しないため、件数上限より「レビュアーが 1つの意図として読める Cop の組み合わせか」を基準にする。

3. 対象 Cop のエントリを .rubocop_todo.yml から削除する

  • 選んだ Cop(バッチ対象すべて)の見出しコメントと設定ブロックを まるごと削除 する。
  • WHY: todo に残したままだと違反は「許容」され続け、修正すべき対象として浮かんでこない。 削除して縛りを復活させることで、rubocop が再びその違反を報告する状態になる。

4. 修正する

経路A(safe バッチ)

  • バッチ対象の Cop 全体に --only を付けずに一括で rubocop -a を当てる: bundle exec rubocop -a。 --only を外すのは、ある Cop の修正が引き金で新規発生する別 Cop の違反(連鎖違反)まで 一括で自動修正するため(詳細は references/cop-fix-guide.md 参照)。 --only なしのこの1回の実行結果(残った offense の一覧)が、そのまま残違反判定と手順6 最終検証を兼ねる(連鎖違反まで含めて検証される)。
  • 結果に違反が残った Cop があれば、その Cop だけバッチから切り離し、経路Bの手順 (Tier 2 → Tier 3)に回す。バッチ側は safe で完結した Cop だけでこのサイクルを完了させる。 切り離した Cop は別サイクルとして扱う(このサイクル内では深追いしない)。残った Cop が todo に載っていた対象 Cop なのか、autocorrect の連鎖で新規発生した別 Cop なのかを区別する: 前者は切り離して別サイクルに回すが、後者は切り離さず手順6の副作用処理としてこのサイクル内で 扱う。
    • 切り離した Cop のエントリは手順 3 で削除済みなので、bundle exec rubocop --auto-gen-config で todo に戻しておく。 戻さずに放置すると、todo に載らない生の違反として残り、 手順 6 のプロジェクト全体検証が通らなくなる。

経路B(unsafe/手動修正のバッチ、Tier 順)

references/cop-fix-guide.md に従い、上から順に試す。各 Tier で違反が 残ったら次の Tier へ進む。Tier 2・Tier 3 ともバッチ全体に一括で適用し、一部の Cop だけ残った・ テストで問題が出た場合はその Cop だけバッチから切り離す(経路Aの切り離しルールと同じ考え方。 切り離した Cop は --auto-gen-config で todo に戻し、別サイクルとして扱う)。

  • Tier 1: rubocop -a(safe autocorrect) — 挙動を変えない安全な自動修正。まずこれを試す。 autocorrect は絞らない: bundle exec rubocop -a(--only は付けない。連鎖違反を 取りこぼさないため)。
  • Tier 2: rubocop -A(unsafe autocorrect) — safe で残った分に、バッチ対象の Cop 全体へ 一括で 当てる: bundle exec rubocop -A(--only は付けない)。挙動が変わりうるので、 当てる前にユーザーに一言断り、適用後は手順 6 で必ずテストする。--auto 時、または実行環境が 非対話でユーザーの応答を待てない場合は、断りを省いて適用してよい(手順 2 の経路Aと同じ扱い)。 ただし手順 6 の関連テスト検証は省かない(無確認で当てる分、テストが唯一の安全網)。 テストが落ちたら、原因になった Cop だけバッチから切り離す。切り離しは次の2点がそろって 初めて完了とみなす: ① その Cop が -A で書き換えた箇所を取り消す(対象ファイルが他の Cop の変更と混在していなければ git checkout -- <file> で丸ごと戻せる。混在している場合は 該当 Cop 由来の変更箇所だけを手動で戻す)。② --auto-gen-config で .rubocop_todo.yml に 戻す。①を忘れると、todo で「許容」に戻したはずの Cop の書き換えがコードに残ったまま次工程に 進んでしまう。切り離した Cop は別サイクルとして扱い、残りの Cop でこのサイクルを完了させる。 原因の切り分けが付かない場合のみ、そのサイクルを停止してどの Cop に -A を当ててどのテストが 落ちたかを報告する。
  • Tier 3: 手動修正 — autocorrect 非対応の Cop、または自動修正後に残った違反を、意味を変えない 範囲で 個別に直す。バッチにまとめた Cop(目安2〜3個)を続けて直してよいが、どの修正がどの Cop 由来かコミットメッセージや差分から追えるように、Cop ごとに一区切りつけながら進める。 書き方はプロジェクトのコーディング規約に従う。
    • メソッド抽出ではコメントの対応先も見直す。 ガード節・処理のまとまりを別メソッドへ切り出すと、 直前にあった説明コメントがテキスト上「たまたま近い」別メソッドの直前に取り残されることがある。 抽出後は各コメントを「テキスト上の直前行」ではなく「意味的に何を説明しているか」で読み直し、 対応するメソッドの直前に付け直す。

5. 仕様上やむを得ない違反は Exclude / 無効化する

修正がアプリ仕様上不適切な違反だけ、.rubocop.yml での Exclude / 無効化、またはコード側の インライン # rubocop:disable で対応する。修正できるものは Tier 1〜3 で直し、ここに倒すのは 「直すと仕様が壊れる / その箇所には Cop の指摘が当てはまらない」ものに限る。

  • できるだけ狭い範囲に限定する。特定ファイル/ディレクトリだけの Exclude か、該当行だけの インライン # rubocop:disable を第一候補にし、Cop 全体の Enabled: false はそのプロジェクトに 合わないと判断したときだけ。
  • 必ず理由コメントを残す(記法はプロジェクトの規約に従う)。
    • WHY: 「あえてチェックを外した」判断はコードにも差分にも現れにくい。理由が無いと、後から別の人 (や別の AI)が対応漏れと誤認して蒸し返したり、漫然と放置されたりする。
  • 自明に直せるか無効化が妥当か 判断が割れるものはユーザーに相談 してから決める。 --auto 時は相談で止まる代わりに、その違反には手を付けず残し、最終報告に「要判断」として 列挙する(手順 7)。Tier 1〜3 で自明に直せるもの・明確に Exclude/インライン disable 相当の ものは従来どおり自動で処理してよい。曖昧なものだけ人に残す。
    • WHY: Exclude / 無効化は「あえてチェックを外す」判断でコードにも差分にも現れにくく、誤ると後で 対応漏れと誤認されて蒸し返される。自動で倒すと責任の所在が曖昧になるため、--auto でも ここだけは人に委ねる。
    • 人に残した「要判断」の違反は、その Cop のエントリを削除したままにせず、手順 7 で --auto-gen-config を実行して todo に拾わせ、見出しコメントに「要判断: <理由>」を一言 添える。 これにより違反が todo 上で「許容」され CI を壊さず、かつ次に見た人(や別の AI)が その Cop を素通りせず要判断状態だと気づける。
      • WHY: 手順 3 でエントリを削除した Cop に判断保留の違反が残ると、そのままでは todo にも 载っていない生の違反として CI で検出され続けてしまう。かといって黙って todo に戻すと 「もう解決済み」と誤認されて蒸し返されない。要判断である旨をコメントで残すことで、 両方の問題を同時に避けられる。

6. 検証する

  • 経路A(safe バッチ)は手順 4 の実行結果をそのまま使う。 再実行不要。挙動を変えない前提なので 関連テストの実行も不要。
  • 経路Bはバッチ対象の Cop に絞って再実行し、違反ゼロを確認する: bundle exec rubocop --only <Cop1>,<Cop2>,...。
  • サイクルの最後に、必ずプロジェクト全体で bundle exec rubocop(--only 無し、対象ファイル 指定も無し)を実行し、違反ゼロを確認する。 これがこのサイクルの完了条件であり、経路A・経路B 共通の最終ゲート。まだ todo に残っている(今回のサイクル対象外の)他 Cop の違反は inherit_from: .rubocop_todo.yml で抑制されるため出てこない想定で、ここで検出される違反は todo に載っていない新規のものだけのはず。
    • WHY: --only <Cop> や変更ファイルだけの実行では見えない副作用がある(例: autocorrect で不要な代入を消したらメソッド本体が空になり Lint/Void 等が新規発生する、 手順 5 の Exclude/無効化の書き方が構文として誤っている、など)。プロジェクト全体を通すことで 初めて「このサイクルで CI を壊していない」と言い切れる。
    • 手順 5 で「要判断」の違反を残した場合は、その Cop をこの時点ではまだ todo に戻していない (todo に戻すのは手順 7)。 そのままでは全体検証がその違反で失敗してしまうので、 要判断の Cop だけ手順 7 を先に済ませてから全体検証する(--auto-gen-config で todo に 戻し「要判断」コメントを添えたあと、あらためて全体実行する)。
    • それでも全体実行で違反が残っていたら、このサイクルは未完了として扱い、原因を調査してから 解消する。 想定される原因ごとの対応:
      • autocorrect の副作用でスコープ外の Cop が新規違反を出した → その違反を Tier 1〜3 の要領でこのサイクル内に含めて直す(バッチの選定基準は、あくまで 選定時にどの Cop を まとめて着手するかを縛るものであり、副作用の後始末まで対象を広げるかどうかを 縛るものではない)。手順4の autocorrect から --only を外したことで、safe に直せる 連鎖違反はこの時点(autocorrect 実行時)で既に解消されている。ここで残るのは、safe に 直せなかった連鎖違反や、Exclude/無効化の設定ミスなど autocorrect では対応できない ものだけという役割分担になる。
        • ただし新規違反の発生箇所が適用済みマイグレーション等の「書き換えてはいけないファイル」 の場合は、コード修正ではなく Exclude / インライン disable に倒す(Tier 1〜3 の対象に 含めない)。適用済みマイグレーションはロールバック定義も含めて過去のスキーマ操作の記録 そのものであり、rubocop 違反の解消目的であっても書き換えると履歴と実際のDBスキーマが 乖離する。判断基準は references/cop-fix-guide.md の「Exclude のパス指定」参照。
      • バッチから切り離した Cop のエントリを todo に戻し忘れている → 手順 4 の とおり --auto-gen-config で戻す。
      • 手順 5 で Exclude / 無効化した設定が誤っている(YAML の書き方・対象範囲のミスなど)→ 設定を直す。
    • --auto 時も原因調査と解消は省略しない。 確認ゲートを省くのは「進めてよいか」の 合意だけで、全体成功というゴール自体は --auto の有無に関係なく変わらない。
  • Tier 2(unsafe)または手動修正でコードの挙動に触れた場合は、変更箇所に関連するテストだけを そのプロジェクトの流儀で実行し、壊れていないことを確認する。バッチ内の複数 Cop をまとめて 1 回のテスト実行で検証してよい(Cop ごとに個別実行する必要はない。バッチは全 Cop が同じ Tier =同程度のリスクという前提でまとめているので、変更ファイル全体に対して一度テストを 通せば十分)。
    • 関連テストの絞り方: git diff --name-only で変更ファイルを出し、対応する spec/test、修正した クラス/メソッドを使う箇所など、今回の差分が影響しうる範囲に限定して走らせる。全テストは 流さない(重いので CI に任せる)。
    • 影響範囲が差分から自明でないほど広い場合のみ(例: Metrics/* 系をメソッド分割・クラス抽出して 呼び出し側が散る、1 Cop でも大量ファイルにまたがる修正)、変更したシンボルの利用箇所と対応する spec の洗い出しを 探索エージェントに委ねてよい。差分から関連 spec がすぐ辿れる通常ケースでは 不要(手間の方が勝つので、デフォルトは上記の git diff 起点の手動絞り込み)。
    • WHY: rubocop の pass はスタイルの整合しか見ない。unsafe autocorrect や手動修正は挙動を 変えうるので、関連テストを通して初めて「この変更で壊していない」と言える。全体の網羅は CI の 役割で、ここで毎回フルスイートを回すと 1 サイクルが重くなりレビュー単位の軽快さが失われる。

7. todo を再生成して停止する

  • 注意: ここでの再生成は「todo からエントリが消えて空いた分を綺麗にする」ためだけの操作。 手順 5 で決めた Exclude / 無効化の設定内容そのものは .rubocop.yml に書くのであって、 --auto-gen-config の出力(.rubocop_todo.yml)に理由コメントを足して着地させるものではない。 --auto-gen-config は実行のたびに Exclude/無効化していない残存違反を全部拾い直して .rubocop_todo.yml を丸ごと作り直すため、.rubocop.yml 側に書いた恒久設定と混同しないこと。
  • 手順 5 で Exclude / 無効化した場合、その Cop の項目が .rubocop_todo.yml に残って紛らわしいので bundle exec rubocop --auto-gen-config で作り直す。
    • 違反を全部修正しきった(Exclude/無効化していない)場合は、その Cop のエントリは手順 3 で既に 削除済みなので、再生成は必須ではない。todo の他項目の件数を更新したいときだけ実行する。
    • バッチ(経路A・経路Bいずれも)から Cop を切り離した場合も、その Cop の項目は手順 3 で 削除済みなので再生成不要。切り離した Cop は改めて別サイクルで扱う。
  • 手順 5 で「要判断」の違反を手を付けずに残した場合は、再生成が必須。 bundle exec rubocop --auto-gen-config を実行してその Cop を todo に戻したあと、生成された .rubocop_todo.yml を自分で開いて(--auto-gen-config はコメントを自動で足してくれないので 手動編集する)、見出しコメントの直後に「要判断: <理由を一言>」を追記する。 (この todo 反映自体は手順 6 の全体検証より前に行う必要がある。手順 6 の該当箇所を参照。)
    • WHY: 手順 3 で todo エントリを削除済みのまま要判断の違反を放置すると、todo にも载らない生の 違反として CI を壊し続ける。再生成して todo に戻し、かつ「要判断」と分かるコメントを添える ことで、CI を壊さずに「解決済みではない」ことも伝わる。
  • 1 サイクルが完了したらここで停止し、ユーザーに制御を返す。 差分確認・コミットはユーザーが行う。
    • WHY: レビュー単位で運用するため。バッチはあくまで「1サイクルで扱える Cop 数を、Tier ごとの リスクに見合う範囲で増やす」ものであり、複数サイクルを自動連続実行するものではない。 次を潰したいときは、ユーザーが改めてこのスキルを起動する。--auto でもこの停止原則は 不変(--auto は「1サイクルを確認なしで回しきる」だけで「複数サイクル連続」ではない)。
  • --auto 時の最終報告には次を含める(差分確認・コミット判断の材料になる):
    • 潰した Cop / バッチと結果(違反ゼロを確認した旨)。
    • -A(unsafe)を当てた場合はどの Cop に当てたか+手順 6 の関連テスト結果。
    • 手順 6 で見つかったスコープ外の新規違反(既存の「次回 --auto-gen-config で拾う todo 候補」報告に含める)。
    • 手順 5 で残した「要判断」の違反一覧(自動で倒さず人に残したもの)。

8. 全 Cop を潰しきったら .rubocop_todo.yml 自体を削除する

  • 手順 7 の結果、.rubocop_todo.yml に Cop のエントリが1つも残っていない(「要判断」で 戻した項目も無い)状態になったら、todo 運用そのものが不要になったとみなし、以下を行う。
    • .rubocop_todo.yml を削除する。
    • .rubocop.yml の inherit_from から .rubocop_todo.yml への参照を削除する (他ファイルへの参照と併記されていた場合は、その1行だけを取り除き残りは維持する。 inherit_from が .rubocop_todo.yml 単体だった場合は inherit_from キー自体を削除する)。
    • bundle exec rubocop を実行し、削除後も違反ゼロであることを確認する。
    • WHY: .rubocop_todo.yml は「未対応の違反を一時的に許容する」ための仕組み。中身が空になった まま放置すると、空ファイルと不要な inherit_from参照がプロジェクトに残り続け、次に見た人 (や別の AI)が「まだ何か許容されている違反があるのでは」と誤解する余地を残す。空になった 時点で撤去してしまえば、todo 運用が完了したことがファイル構成からも一目で分かる。
  • 1つでも Cop エントリが残っている場合はこのステップを行わない。 手順 7 までで停止する (まだ消化中の todo を早まって消すと、残りの違反が生の違反として CI を壊す)。
  • このステップも手順 7 までと同じサイクルの終端として扱い、削除できたらここで停止して ユーザーに制御を返す(コミットはユーザーが行う)。--auto 時も削除の実行自体は他の safe な 自動処理と同様に確認なしで行ってよいが、削除した旨は最終報告に必ず含める。

注意点・つまずきやすいところ

  • Tier をまたいでバッチにしない。 safe / unsafe / 手動修正は挙動変更のリスクが異なるので、 1 回のバッチは同じ Tier の Cop だけで構成する。
  • バッチのしきい値・打ち切り基準は references/cop-fix-guide.md 参照。 経路A(safe)は件数ベースで最も広く、Tier 2(unsafe)はそれより狭い件数、Tier 3(手動修正)は 件数ではなく性質が近い少数の Cop、という基準の違いに注意する。
  • safe と unsafe を区別する。 -a(safe)は基本そのまま信頼してよいが、-A(unsafe)は挙動が 変わりうる。-A を当てたら手順 6 の関連テストを飛ばさない。逆に、ここで全テストを流す必要はない (重いので CI に任せ、手元では差分に関連するテストだけ確認する)。
  • 検出は絞る/autocorrect は絞らない。 残違反の確認・検証(autocorrect を伴わない実行)は --only <Cop> を付ける——まだ todo に残した他 Cop の違反が出力に混ざらず、潰したい Cop の 進捗が見やすくなる。一方 autocorrect(-a/-A)には --only を付けない——付けると 対象 Cop の修正が引き金で新規発生する別 Cop の違反(連鎖違反)が自動修正されずに残ってしまう。 todo が対象外 Cop の違反をマスクしてくれるので、絞らなくても安全(詳細は references/cop-fix-guide.md 参照)。さらに手順 6 最後の 全体検証は --only を付けず対象ファイル指定も無しで実行する(この検証の目的そのものが 「絞り込みでは見えない副作用が無いか」の確認なので、絞ってしまうと意味がない)。まとめると 3区分: 検出・検証=絞る/autocorrect=絞らない/全体検証=絞らない。
  • サイクルの終端条件は「プロジェクト全体で bundle exec rubocop が違反ゼロ」。 対象 Cop だけ潰して停止するのではなく、手順 6 の全体検証まで含めて初めてサイクル完了とみなす。
  • 無効化は最小範囲+理由コメント。 Cop 全体を無効に戻すのは最後の手段。まず Exclude で ファイル/ディレクトリ単位に絞れないか考える。
  • コミットしない。 このスキルの責務は「選んだバッチを違反ゼロにして停止」まで。 コミット・PR はユーザーの手で。
  • todo が空になったら消す。 .rubocop_todo.yml の中身を全部潰しても、ファイル自体と .rubocop.yml の inherit_from 参照は自動では消えない。手順 8 で明示的に削除・参照解除まで 行う。

レビュー

まだレビューはありません。使ってみた感想をお寄せください。

同じリポジトリのスキル

概要と使いどころ

sgcop-setup

無料日本語概要

sgcop の RuboCop 設定を、導入先プロジェクトの .rubocop.yml にセットアップ・更新する。標準(rubocop.yml)か厳格版(rubocop_strict.yml)かの導入方針をまず確認して inherit_gem を整え、既存 .rubocop.yml から sgcop と重複する不要設定を削除する。gem 依存のカスタム Cop(enumerize 系など)は必要時のみ確認。そのうえで rubocop --auto-gen-config で .rubocop_todo.yml を生成し、違反(ノイズ)が多い Cop は無効化・Exclude・段階対応を提案、無効化したら todo を作り直す。

SonicGarden/sgcop232026年10月12日 更新

SonicGarden のスキルをすべて見る

このスキルの問題を報告する