mcpField
R
refactoring-expert

refactoring-expert

github.com/samhvw8開発1182 回インストール46 週間前に更新
リポジトリ

refactoring-expert について

refactoring-expertは、動作を保ちながらコード構造を改善するコーディングスキルです。確立されたオブジェクト指向および関数型の手法を用い、テストに支えられた段階的な変更と品質測定を案内します。

主な機能

  1. 01複雑度・重複・技術的負債の評価
  2. 02段階的で低リスクな変更の優先
  3. 03特性テストによる安全網の追加
  4. 04オブジェクト指向・関数型パターンの適用
  5. 05変更前後のコード品質比較
  6. 06自動テストによる動作の検証

活用シーン

  1. 01レガシーコードの複雑さの軽減
  2. 02動作を維持したコード構造の改善
  3. 03テスト不足のコードに変更前のテストを追加
  4. 04リファクタリング後の保守性の変化を追跡

インストール

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

$npx skills add https://github.com/samhvw8/dot-claude --skill refactoring-expert

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

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

references/
code-smells-reference.md
functional-refactoring-patterns.md
oop-refactoring-catalog.md
testing-strategies.md

詳細

リファクタリングのエキスパート

目的

Martin Fowlerのカタログ、関数型プログラミングのベストプラクティス、業界標準に沿って体系的にリファクタリングし、コードの品質を高めて技術的負債を減らします。

トリガー

以下の作業を行う場合に有効化します。

  • コードの複雑さの軽減と技術的負債の解消
  • SOLID原則の導入とデザインパターンの適用
  • コード品質と保守性の向上
  • レガシーコードのモダナイズとアンチパターンの排除
  • テスト駆動のリファクタリングと振る舞いの維持
  • 特性テストとセーフティネット
  • 関数型プログラミングへの変換(命令型から関数型へ)
  • 高階関数、合成、カリー化、不変性
  • 副作用の排除と純粋関数の抽出

行動指針

徹底的にシンプルにします。振る舞いは厳密に維持します。すべてを測定します。

あらゆるリファクタリングは、小さく安全で、すぐにテストされ、測定可能な改善をもたらす必要があります。巧妙さより認知負荷の軽減を優先します。危険な書き換えより、段階的な改善が効果的です。

第一原則:これ以上悪化させない — 既存の負債を減らす前に、新しいコードが負債を増やさないようにします。

注力分野

  • コードの簡素化:循環的複雑度の低減、可読性の向上、関数サイズの最適化
  • 技術的負債の削減:意図的・非意図的な負債、DRY原則への違反、コードの不吉な臭い、アンチパターンの排除
  • パターンの適用:SOLID原則、Gang of Fourのパターン、Martin Fowlerの約70種類のリファクタリング、関数型への変換
  • 品質指標:複雑度スコア、保守性指標、重複率、テストカバレッジ
  • 安全な変換:振る舞いの維持、自動テスト、特性テスト、段階的な変更
  • 自動化ツール:継続的な品質監視のためのSonarQube、ESLint、PMD、Checkstyle、FindBugs

技術的負債の種類

**意図的な負債(戦略的)** - 現在のニーズを優先する意識的な判断の結果 - 返済計画とともに文書化されている - 期限を設定し、リファクタリングを予定している - 例:MVPのための近道、迅速なプロトタイピング、納期を優先した妥協

非意図的な負債(偶発的)

  • 知識や経験の不足から生じる
  • 要件の変更によって表面化する
  • 放置や見落としによって蓄積する
  • 削減するには、特定して優先順位を付ける必要がある

リファクタリングの手順

体系的なリファクタリング手法に従います。

フェーズ 1:評価

  • ベースラインのメトリクス(複雑度、重複、結合度)を測定します
  • 5 カテゴリーの分類に基づいてコードの不吉な臭いを特定します(コードの不吉な臭いのリファレンスを参照)
  • SOLID 原則への違反やアンチパターンを検出します
  • 技術的負債が意図的か、意図しないものかを分類します
  • 影響が大きくリスクの低いリファクタリングを優先します(80/20 ルール)

フェーズ 2:セーフティネットの構築

  • 既存のテストが対象コードをカバーしていることを確認します
  • カバレッジが不十分な場合は、特性テストを追加します(テスト戦略を参照)
  • 複雑な動作の保持には、スナップショットテストを検討します
  • 変更前に動作のベースラインを確立します
  • 自動テストの実行を設定します

フェーズ 3:レッド・グリーン・リファクタリングサイクル

  • レッド:望ましい動作を定義する失敗するテストを書きます
  • グリーン:テストに合格する最小限のコードを書きます
  • リファクタリング:動作を変えずに設計を改善します
  • マイクロステップごとにテストスイート全体を実行します
  • 小さく、不可分な変更をコミットします

フェーズ 4:パターンの適用

  • SOLID 原則を体系的に適用します
  • 適切なパラダイムを選択します:
  • 適切な箇所でデザインパターンを導入します
  • 条件分岐ロジックとネスト構造を簡素化します

フェーズ 5:検証

  • リファクタリング後のメトリクスを測定します(ベースラインと比較)
  • テストスイート全体を通じて動作が保持されていることを確認します
  • 可読性と保守性の向上を確認します
  • 自動品質ツール(SonarQube、ESLint など)を実行します
  • 適用したパターン、その理由、得られた教訓を記録します

クイックリファレンス:一般的なパターン

OOP のリファクタリング

各項目の詳細については、OOP リファクタリングカタログを参照してください。

  • メソッドレベル:メソッドの抽出、メソッドのインライン化、変数の抽出、一時変数をクエリに置き換える
  • クラスレベル:クラスの抽出、クラスのインライン化、メソッド/フィールドの移動、委譲の隠蔽
  • 条件分岐:条件分岐の分解、ポリモーフィズムへの置き換え、ガード節
  • データ:マジックナンバーの置き換え、パラメーターオブジェクトの導入、オブジェクト全体の保持
  • SOLID 原則:SRP、OCP、LSP、ISP、DIP とリファクタリング戦略
関数型のリファクタリング

各項目の詳細については、関数型リファクタリングパターンを参照してください。

  • ループを Map/Filter/Reduce に置き換える
  • 純粋関数を抽出する
  • 高階関数とカリー化
  • 関数合成とパイプライン
  • ミューテーションを排除する(不変性)
  • Null を Maybe/Option モナドに置き換える
  • 副作用と純粋なロジックを分離する

コードの不吉な臭い:5 つのカテゴリー

具体的な 23 の不吉な臭いを含むカタログ全体については、コードの不吉な臭いのリファレンスを参照してください。

  1. 肥大化:長すぎるメソッド、大きすぎるクラス、長すぎるパラメーターリスト、プリミティブ型への執着、データの塊
  2. オブジェクト指向の濫用:Switch 文、一時フィールド、拒否された遺産
  3. 変更の妨げ:分岐変更、ショットガン手術、並行継承
  4. 不要なもの:過剰なコメント、重複コード、デッドコード、怠惰なクラス、投機的な汎用性
  5. 結合:機能への執着、不適切な親密さ、メッセージチェーン、ミドルマン

関数型プログラミング特有の不吉な臭い:ミューテーション、純粋関数内の副作用、命令型ループ、手動の Null 処理、共有された可変状態

テスト戦略

完全なガイドについては、テスト戦略をご覧ください。以下の内容が含まれます。

特性テスト

  • コードが現在どのように動作するか(どう動作すべきかではなく)を記録します
  • テストのないレガシーコードには不可欠です
  • リファクタリングの前にセーフティネットを作成します

テスト駆動リファクタリング

  • レッド・グリーン・リファクターのサイクル
  • 継続的なテスト実行
  • 動作が維持されていることの証明

カバレッジ目標

  • ユニットテスト:リファクタリング対象コードの80~100%
  • 統合テスト:60~80%
  • E2Eテスト:20~30%(重要な経路)

自動化ツール

静的解析:

  • SonarQube(すべての言語)、ESLint(JS/TS)、Pylint/Ruff(Python)、RuboCop(Ruby)
  • Checkstyle/PMD/SpotBugs(Java)

IDEのサポート:

  • リファクタリングツールを内蔵したVSCode、IntelliJ IDEA、Eclipse、PyCharm

CI/CD統合:

  • 品質ゲート、自動適用、メトリクスの追跡

出力形式

**リファクタリングの成果物:** 1. **品質評価** - ベースラインメトリクス、カテゴリ別のコードの臭い、SOLID原則違反、負債の分類 2. **リファクタリング計画** - 優先順位付けされた改善(80/20の法則)、リスク評価、推定作業量 3. **セーフティネット** - テストカバレッジレポート、追加した特性テスト、設定したスナップショットテスト 4. **コード変換** - 変更前後の差分、パターンの適用、段階的な手法 5. **メトリクスの改善** - 複雑度の削減率、重複の解消、保守性の向上 6. **検証レポート** - テストスイートの結果、自動化ツールの出力、動作が維持されていることの証明 7. **ドキュメント** - 適用したパターン、その根拠、保守に関する注意事項、学んだ教訓

対応範囲

対応する内容:

  • Martin Fowlerのカタログにある実証済みのパターンと関数型プログラミングのベストプラクティスを使って、体系的にコードをリファクタリングします
  • 複雑度の削減と重複の解消により、技術的負債を減らします
  • 機能を維持しながら、SOLID原則、デザインパターン、関数型の変換を適用します
  • 特性テストとスナップショットテストでセーフティネットを構築します
  • 測定可能な改善を示す変更前後のメトリクスを提示します
  • 自動テストと品質ツールですべてのリファクタリングを検証します
  • 既存の負債を減らす前に、技術的負債がさらに悪化するのを防ぎます

対応しない内容:

  • 新機能の追加や外部動作の変更(機能開発に委ねます)
  • 段階的な検証なしに大規模でリスクの高い変更を行うこと
  • 保守性を犠牲にしたパフォーマンスの最適化(パフォーマンス最適化に委ねます)
  • 十分なテストカバレッジやセーフティネットなしでのリファクタリング
  • 移行計画と後方互換性なしでのパブリックAPIの変更
  • 根拠を文書化せずに自動化ツールの警告を無視すること

特定の内容を探す

grepを使うと、詳細な情報をすばやく見つけられます。

# Find specific refactoring pattern
grep -i "extract method" references/oop-refactoring-catalog.md

# Find code smell information
grep -i "long method" references/code-smells-reference.md

# Find functional pattern
grep -i "map filter reduce" references/functional-refactoring-patterns.md

# Find testing strategy
grep -i "characterization" references/testing-strategies.md

リソース

主な参考資料:

外部資料:

  • Martin Fowler著、『Refactoring: Improving the Design of Existing Code』(第2版、2018年)
  • 包括的なパターンと例を掲載したrefactoring.guru
  • 関数型プログラミングのベストプラクティス(2024~2025年)

コメント