refactoring-expert について
refactoring-expertは、動作を保ちながらコード構造を改善するコーディングスキルです。確立されたオブジェクト指向および関数型の手法を用い、テストに支えられた段階的な変更と品質測定を案内します。
主な機能
- 01複雑度・重複・技術的負債の評価
- 02段階的で低リスクな変更の優先
- 03特性テストによる安全網の追加
- 04オブジェクト指向・関数型パターンの適用
- 05変更前後のコード品質比較
- 06自動テストによる動作の検証
活用シーン
- 01レガシーコードの複雑さの軽減
- 02動作を維持したコード構造の改善
- 03テスト不足のコードに変更前のテストを追加
- 04リファクタリング後の保守性の変化を追跡
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ samhvw8/ dot-claude --skill refactoring-expertインストール後、Claude Code で/refactoring-expertを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/code-smells-reference.mdfunctional-refactoring-patterns.mdoop-refactoring-catalog.mdtesting-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 原則を体系的に適用します
- 適切なパラダイムを選択します:
- OOP パターン:Martin Fowler による約 70 のリファクタリングについては、OOP リファクタリングカタログを参照してください
- 関数型パターン:命令型から関数型への変換については、関数型リファクタリングパターンを参照してください
- 適切な箇所でデザインパターンを導入します
- 条件分岐ロジックとネスト構造を簡素化します
フェーズ 5:検証
- リファクタリング後のメトリクスを測定します(ベースラインと比較)
- テストスイート全体を通じて動作が保持されていることを確認します
- 可読性と保守性の向上を確認します
- 自動品質ツール(SonarQube、ESLint など)を実行します
- 適用したパターン、その理由、得られた教訓を記録します
クイックリファレンス:一般的なパターン
OOP のリファクタリング
各項目の詳細については、OOP リファクタリングカタログを参照してください。
- メソッドレベル:メソッドの抽出、メソッドのインライン化、変数の抽出、一時変数をクエリに置き換える
- クラスレベル:クラスの抽出、クラスのインライン化、メソッド/フィールドの移動、委譲の隠蔽
- 条件分岐:条件分岐の分解、ポリモーフィズムへの置き換え、ガード節
- データ:マジックナンバーの置き換え、パラメーターオブジェクトの導入、オブジェクト全体の保持
- SOLID 原則:SRP、OCP、LSP、ISP、DIP とリファクタリング戦略
関数型のリファクタリング
各項目の詳細については、関数型リファクタリングパターンを参照してください。
- ループを Map/Filter/Reduce に置き換える
- 純粋関数を抽出する
- 高階関数とカリー化
- 関数合成とパイプライン
- ミューテーションを排除する(不変性)
- Null を Maybe/Option モナドに置き換える
- 副作用と純粋なロジックを分離する
コードの不吉な臭い:5 つのカテゴリー
具体的な 23 の不吉な臭いを含むカタログ全体については、コードの不吉な臭いのリファレンスを参照してください。
- 肥大化:長すぎるメソッド、大きすぎるクラス、長すぎるパラメーターリスト、プリミティブ型への執着、データの塊
- オブジェクト指向の濫用:Switch 文、一時フィールド、拒否された遺産
- 変更の妨げ:分岐変更、ショットガン手術、並行継承
- 不要なもの:過剰なコメント、重複コード、デッドコード、怠惰なクラス、投機的な汎用性
- 結合:機能への執着、不適切な親密さ、メッセージチェーン、ミドルマン
関数型プログラミング特有の不吉な臭い:ミューテーション、純粋関数内の副作用、命令型ループ、手動の 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
リソース
主な参考資料:
- OOPリファクタリングカタログ - Martin Fowlerのパターン、SOLID原則、ツール
- 関数型リファクタリングパターン - 関数型プログラミングの変換、高階関数、不変性
- コードの臭いに関するリファレンス - 5つのカテゴリ、23のコードの臭い、リファクタリング戦略
- テスト戦略 - 特性テスト、TDD、カバレッジ、リグレッションの防止
外部資料:
- Martin Fowler著、『Refactoring: Improving the Design of Existing Code』(第2版、2018年)
- 包括的なパターンと例を掲載したrefactoring.guru
- 関数型プログラミングのベストプラクティス(2024~2025年)