mcpField
R
refactor-method-complexity-reduce

refactor-method-complexity-reduce

github.com/github開発40.5k10.0k 回インストール今日更新
リポジトリ

refactor-method-complexity-reduce について

役割を絞ったヘルパーメソッドを抽出し、動作を維持しながらメソッドを簡素化するコーディングスキルです。テストの失敗数がゼロであることとコンパイル結果を確認し、認知的複雑度のしきい値も検証します。

主な機能

  1. 01認知的複雑度の要因を特定
  2. 02役割を絞ったヘルパーメソッドを抽出
  3. 03検証処理とエラー動作を維持
  4. 04テストとコンパイルの確認を要求
  5. 05目標とする複雑度のしきい値を確認

活用シーン

  1. 01長いメソッドの複雑度を下げる
  2. 02重複処理や型別処理を分離
  3. 03リファクタリング後の動作を検証

インストール

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

$npx skills add https://github.com/github/awesome-copilot --skill refactor-method-complexity-reduce

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

詳細

認知複雑度を下げるためのメソッドのリファクタリング

目的

メソッド ${input:methodName} をリファクタリングし、ロジックを責務の絞られたヘルパーメソッドに抽出することで、その認知複雑度を ${input:complexityThreshold} 以下に下げます。

手順

  1. 現在のメソッドを分析する - 認知複雑度の原因を特定します:

    • ネストされた条件文
    • 複数の if-else または switch チェーン
    • 繰り返されるコードブロック
    • 条件を伴う複数のループ
    • 複雑な真偽式
  2. 抽出の機会を特定する:

    • 別のメソッドに抽出できるバリデーションロジック
    • 繰り返される型固有またはケース固有の処理
    • 複雑な変換や計算
    • 複数回現れる共通パターン
  3. 責務の絞られたヘルパーメソッドを抽出する:

    • 各ヘルパーは単一の明確な責務を持つべきです
    • バリデーションを個別の Validate* メソッドに抽出します
    • 型固有のロジックをハンドラーメソッドに抽出します
    • 共通操作のためのユーティリティメソッドを作成します
    • 適切なアクセスレベル(static、private、async)を使用します
  4. メインメソッドを簡素化する:

    • ネストの深さを減らします
    • 巨大な if-else チェーンを、より小さな呼び出しの組み合わせに置き換えます
    • よりクリーンなディスパッチのために、適切な場所で switch 文を使用します
    • メインメソッドが高レベルのフローとして読めるようにします
  5. 機能を保持する:

    • 同じ入力/出力の挙動を維持します
    • すべてのバリデーションとエラー処理を保持します
    • 例外の種類とエラーメッセージを保持します
    • すべてのパラメーターがヘルパーに適切に渡されるようにします
  6. ベストプラクティス:

    • インスタンスの状態を必要としないヘルパーメソッドは static にします
    • null チェックとガード句を早い段階で使用します
    • 不要なローカル変数の作成を避けます
    • 複数の戻り値にはタプルの使用を検討します
    • 関連するヘルパーメソッドをまとめて配置します

実装のアプローチ

  • メインフローをリファクタリングする前にヘルパーメソッドを抽出します
  • デグレードがないことを確認するために、インクリメンタルにテストします
  • 抽出した責務を表す意味のある名前を使用します
  • 抽出したメソッドは使用される場所の近くに配置します
  • 繰り返されるコードパターンを汎用メソッドにすることを検討します

結果

リファクタリング後のメソッドは次のようになるべきです:

  • 認知複雑度が目標しきい値 ${input:complexityThreshold} 以下に低減されている
  • より読みやすく、保守しやすい
  • 関心の分離が明確である
  • テストとデバッグがより容易である
  • 元のすべての機能を保持している

テストと検証

重要: リファクタリングを完了した後、あなたは必ず以下を行わなければなりません:

  1. 既存のすべてのテストを実行する - リファクタリングしたメソッドとその周辺機能に関連するテスト
  2. 必須: テスト結果が「failed=0」を示していることを明示的に検証する
    • テストが合格したと決して仮定しないでください - 常に実際のテスト出力を確認してください
    • 合格/不合格の件数を含むサマリー行(例: 「passed=X failed=Y」)を検索してください
    • サマリーが「failed=0」以外の数値を示している場合、テストは失敗しています
    • テスト出力がファイルにある場合は、ファイル全体を読んで失敗件数を特定し検証してください
    • テストを実行することは、テストが合格したことを検証することと同じではありません
    • 失敗がゼロであることを明示的に確認するまで、先に進まないでください
  3. テストが失敗した場合(failed > 0):
    • 失敗したテストの件数を明確に述べてください
    • 各失敗を分析し、どの機能が壊れたのかを理解してください
    • よくある原因: null の扱い、空のコレクションのチェック、条件ロジックの誤り
    • リファクタリング後のコードにおける根本原因を特定してください
    • 元の挙動を復元するようにリファクタリング後のコードを修正してください
    • テストを再実行し、出力で「failed=0」を検証してください
    • すべてのテストが合格する(failed=0)まで繰り返してください
  4. コンパイルを検証する - コンパイルエラーがないことを確認してください
  5. 認知複雑度を確認する - 指標が目標しきい値 ${input:complexityThreshold} 以下であることを確認してください

確認チェックリスト

  • コードがエラーなくコンパイルされる
  • テスト結果に「failed=0」が明記されている(出力を読んで確認済み)
  • すべてのテスト失敗が分析され、修正されている(失敗が発生した場合)
  • 認知的複雑度が目標しきい値 ${input:complexityThreshold} 以下である
  • 元の機能がすべて保持されている
  • コードがプロジェクトの規約と標準に従っている

コメント