mcpField
S
simplify

simplify

github.com/venhdev開発165 回インストール1 日前に更新
リポジトリ

simplify について

simplifyは、開発者やコーディングエージェント向けのコードリファクタリングスキルです。構造上の基準で対象コードを確認し、変更案の承認後にリファクタリングを検証します。

主な機能

  1. 018つの観点によるリファクタリング基準
  2. 02動作と公開 API の維持
  3. 03承認後に変更を適用
  4. 04検証失敗時に処理を停止

活用シーン

  1. 01深い制御フローのネスト削減
  2. 02ファイル内の重複コードの集約
  3. 03識別子や式の明確化

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/venhdev/skills --skill simplify

インストール後、Claude Code で/simplifyを入力して読み込まれたか確認します。

詳細

simplify — コードの明瞭化とリファクタリングエンジン

運用上の不変条件

  • 動作の不変性:既存の機能、テスト結果、エラー処理、パブリック API シグネチャを100%維持し、プログラムの意味を変えたり、契約を破ったりすることを禁じます。
  • スコープの厳守:リファクタリングは対象のファイルまたは関数に厳密に限定し、対象ファイル外でのファイル間抽出、クラスの分解、アーキテクチャの再設計を禁じます。
  • 変更前のゲート:変更は Changeset の概要を通じてのみステージし、直ちにターンを終了します。人間による明示的な承認なしに、ディスクへ変更を書き込むことを禁じます。
  • 検証のサーキットブレーカー:検証に失敗したら直ちに実行を停止し、ファイルへの引用を添えて標準エラー出力を報告し、変更を戻すかデバッグを続けるかをユーザーに確認します。情報を失う無言の差し戻しや、指針のない再試行ループを禁じます。

ドメイン評価基準

対象コードを、互いに重複しない次の8つの構造的な観点で評価します。

  1. 制御フロー(ブロック階層)

    • 問題点:ネストが3レベル以上、アローアンチパターン、末尾の else ブロック。
    • 対処法:条件を反転してガード節と早期リターンにします。
    • ガードレール:単純な1段階の条件分岐と自然な直線的フローは維持します。
  2. 述語ロジック(ブール式)

    • 問題点:複合条件(3節以上)、二重否定。
    • 対処法:説明的なブール変数を抽出し、ド・モルガンの法則を適用します。
    • ガードレール:明白な1〜2節のチェック(存在確認やステータス検証など)はインラインのままにします。
  3. 関数の凝集度(垂直的なスコープ)

    • 問題点:高レベルのオーケストレーションと低レベルの処理(解析、書式設定、正規表現など)が混在する関数。
    • 対処法:低レベルの処理を、単一のタスクに特化したヘルパー関数へ抽出します。
    • ガードレール:一度しか使わない些細なマイクロ抽出は禁止し、凝集した直線的なロジックを維持します。
  4. コードの重複(水平的な重複)

    • 問題点:対象ファイル内にある、同一のコピー&ペーストされたブロック(3か所以上)。
    • 対処法:共通ロジックを単一のプライベートヘルパーにまとめます。
    • ガードレール:ブールフラグ引数を使って偶然似ている処理を統合しないでください。密結合した抽象化よりも、軽微な重複を許容します。
  5. 式の密度(インライン構文)

    • 問題点:ネストした三項演算子や連鎖したインライン条件分岐、1行に詰め込まれた複数のステートメント。
    • 対処法:明示的な複数行の条件分岐またはパターンマッチングのステートメントに展開します。
    • ガードレール:単純なフォールバックや値の選択など、読みやすい1行の二項条件式は維持します。
  6. 識別子の命名(用語体系)

    • 問題点:ループカウンター(i, j)以外で、誤解を招く、紛らわしい、または判読しにくい1文字の変数名。
    • 対処法:ドメイン上の意図が明確になるよう、識別子を改名します。
    • ガードレール:標準的な慣例(err、ctx、req、res、i)を見た目だけの変更で置き換えないでください。パブリック API のパラメーターは決して改名しないでください。
  7. 状態の変更(変数の可変性)

    • 問題点:一時変数を離れたスコープ間で再代入すること、無関係な状態にフラグを使い回すこと、関数パラメーターの束縛を変更すること。
    • 対処法:異なるライフサイクル上の値を反映する、単一代入または不変の変数に分けます。
    • ガードレール:標準的なループの累積処理(sum += x)、ストリームバッファー、パフォーマンスが重要なインプレース変更は維持します。
  8. マジックリテラル(リテラルの不明瞭さ)

    • 問題点:運用ロジックに直接埋め込まれた、ハードコードされたマジックナンバー、ステータス文字列、設定のしきい値。
    • 対処法:ホスト言語の規約に従った、説明的なプライベート定数へ抽出します。
    • ガードレール:普遍的に意味が明らかなリテラル(0、1、""、-1)はインラインのままにします。アーキテクチャ上の明確な根拠なしに、プライベート定数をエクスポートしないでください。

実行プロトコル

フェーズ 1:調査とクリーンパスの確認
  1. ファイルを変更しないツールを使って、対象のファイル、差分、または関数を調査します。

  2. リファクタリング基準に照らして対象コードを評価します。

  3. クリーンパス終了条件:基準に抵触するコードのにおいがゼロの場合、または候補となるすべてのリファクタリングがガードレールに違反する場合は、次の評価を出力し、このターンを直ちに終了します。

    Assessment: Target code is already clean, idiomatic, and minimal. No refactoring required.
    
フェーズ 2:ステージングと承認ゲート
  1. 変更予定を 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).
    
  2. Changeset の概要と技術的な根拠を提示し、人間による承認を待つため、このターンを直ちに終了します。チャットへの生の差分の出力は禁止します。

フェーズ 3:変更と検証
  1. 承認を受けてから、ディスク上のファイルを編集します。
  2. 既存のテスト、リンター、または構文チェックを実行します。失敗した場合は検証サーキットブレーカーを適用します。

コメント