simplify について
simplifyは、開発者やコーディングエージェント向けのコードリファクタリングスキルです。構造上の基準で対象コードを確認し、変更案の承認後にリファクタリングを検証します。
主な機能
- 018つの観点によるリファクタリング基準
- 02動作と公開 API の維持
- 03承認後に変更を適用
- 04検証失敗時に処理を停止
活用シーン
- 01深い制御フローのネスト削減
- 02ファイル内の重複コードの集約
- 03識別子や式の明確化
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ venhdev/ skills --skill simplifyインストール後、Claude Code で/simplifyを入力して読み込まれたか確認します。
詳細
simplify — コードの明瞭化とリファクタリングエンジン
運用上の不変条件
- 動作の不変性:既存の機能、テスト結果、エラー処理、パブリック API シグネチャを100%維持し、プログラムの意味を変えたり、契約を破ったりすることを禁じます。
- スコープの厳守:リファクタリングは対象のファイルまたは関数に厳密に限定し、対象ファイル外でのファイル間抽出、クラスの分解、アーキテクチャの再設計を禁じます。
- 変更前のゲート:変更は Changeset の概要を通じてのみステージし、直ちにターンを終了します。人間による明示的な承認なしに、ディスクへ変更を書き込むことを禁じます。
- 検証のサーキットブレーカー:検証に失敗したら直ちに実行を停止し、ファイルへの引用を添えて標準エラー出力を報告し、変更を戻すかデバッグを続けるかをユーザーに確認します。情報を失う無言の差し戻しや、指針のない再試行ループを禁じます。
ドメイン評価基準
対象コードを、互いに重複しない次の8つの構造的な観点で評価します。
-
制御フロー(ブロック階層)
- 問題点:ネストが3レベル以上、アローアンチパターン、末尾の else ブロック。
- 対処法:条件を反転してガード節と早期リターンにします。
- ガードレール:単純な1段階の条件分岐と自然な直線的フローは維持します。
-
述語ロジック(ブール式)
- 問題点:複合条件(3節以上)、二重否定。
- 対処法:説明的なブール変数を抽出し、ド・モルガンの法則を適用します。
- ガードレール:明白な1〜2節のチェック(存在確認やステータス検証など)はインラインのままにします。
-
関数の凝集度(垂直的なスコープ)
- 問題点:高レベルのオーケストレーションと低レベルの処理(解析、書式設定、正規表現など)が混在する関数。
- 対処法:低レベルの処理を、単一のタスクに特化したヘルパー関数へ抽出します。
- ガードレール:一度しか使わない些細なマイクロ抽出は禁止し、凝集した直線的なロジックを維持します。
-
コードの重複(水平的な重複)
- 問題点:対象ファイル内にある、同一のコピー&ペーストされたブロック(3か所以上)。
- 対処法:共通ロジックを単一のプライベートヘルパーにまとめます。
- ガードレール:ブールフラグ引数を使って偶然似ている処理を統合しないでください。密結合した抽象化よりも、軽微な重複を許容します。
-
式の密度(インライン構文)
- 問題点:ネストした三項演算子や連鎖したインライン条件分岐、1行に詰め込まれた複数のステートメント。
- 対処法:明示的な複数行の条件分岐またはパターンマッチングのステートメントに展開します。
- ガードレール:単純なフォールバックや値の選択など、読みやすい1行の二項条件式は維持します。
-
識別子の命名(用語体系)
- 問題点:ループカウンター(
i, j)以外で、誤解を招く、紛らわしい、または判読しにくい1文字の変数名。 - 対処法:ドメイン上の意図が明確になるよう、識別子を改名します。
- ガードレール:標準的な慣例(
err、ctx、req、res、i)を見た目だけの変更で置き換えないでください。パブリック API のパラメーターは決して改名しないでください。
- 問題点:ループカウンター(
-
状態の変更(変数の可変性)
- 問題点:一時変数を離れたスコープ間で再代入すること、無関係な状態にフラグを使い回すこと、関数パラメーターの束縛を変更すること。
- 対処法:異なるライフサイクル上の値を反映する、単一代入または不変の変数に分けます。
- ガードレール:標準的なループの累積処理(
sum += x)、ストリームバッファー、パフォーマンスが重要なインプレース変更は維持します。
-
マジックリテラル(リテラルの不明瞭さ)
- 問題点:運用ロジックに直接埋め込まれた、ハードコードされたマジックナンバー、ステータス文字列、設定のしきい値。
- 対処法:ホスト言語の規約に従った、説明的なプライベート定数へ抽出します。
- ガードレール:普遍的に意味が明らかなリテラル(
0、1、""、-1)はインラインのままにします。アーキテクチャ上の明確な根拠なしに、プライベート定数をエクスポートしないでください。
実行プロトコル
フェーズ 1:調査とクリーンパスの確認
-
ファイルを変更しないツールを使って、対象のファイル、差分、または関数を調査します。
-
リファクタリング基準に照らして対象コードを評価します。
-
クリーンパス終了条件:基準に抵触するコードのにおいがゼロの場合、または候補となるすべてのリファクタリングがガードレールに違反する場合は、次の評価を出力し、このターンを直ちに終了します。
Assessment: Target code is already clean, idiomatic, and minimal. No refactoring required.
フェーズ 2:ステージングと承認ゲート
-
変更予定を Changeset 形式でステージングします。
# Changeset: Simplify <Target Scope> |-- <collapsed/subsystem_or_directory>/ | `-- <target_file> | `-- [UPDATE] Simplify <component_or_function>: | * <Dimension applied from rubric>. | * <Multi-line refactoring detail with hanging indent>. Summary: 1 file affected (1 updated). -
Changeset の概要と技術的な根拠を提示し、人間による承認を待つため、このターンを直ちに終了します。チャットへの生の差分の出力は禁止します。
フェーズ 3:変更と検証
- 承認を受けてから、ディスク上のファイルを編集します。
- 既存のテスト、リンター、または構文チェックを実行します。失敗した場合は検証サーキットブレーカーを適用します。
コメント
Markdown 対応