リファクタリング - デッドコード削除(Refactor Clean)
テスト検証を行いながら、デッドコードを安全に特定・削除するためのガイド。
このスキルの目的
- デッドコードの分析 - 未使用のコード、エクスポート、依存関係を特定
- リスク評価 - 削除対象を重要度で分類
- 安全な削除 - テスト検証を行いながら段階的に削除
- 変更の追跡 - 削除した項目のサマリーを提示
言語自動検出
プロジェクトの言語は以下のファイルの存在で自動判定する:
| 言語 |
判定ファイル |
| TypeScript |
tsconfig.json, package.json |
| Python |
pyproject.toml, setup.py, requirements.txt |
| C# |
*.csproj, *.sln |
言語が指定された場合({{language}})はその言語を優先する。
ワークフロー
ステップ1: デッドコード分析ツールの実行
プロジェクトの言語に応じて適切なツールを選択する。
TypeScript/JavaScript
| ツール |
検出対象 |
| knip |
未使用のエクスポート、ファイル |
| depcheck |
未使用の依存関係 |
| ts-prune |
未使用のTypeScriptエクスポート |
詳細: reference/typescript/tools.md を参照
Python
| ツール |
検出対象 |
| vulture |
未使用のコード全般 |
| autoflake |
未使用のインポート |
| ruff |
未使用コード(F401, F841) |
詳細: reference/python/tools.md を参照
C#
| ツール |
検出対象 |
| Roslyn Analyzers |
未使用コード(IDE0051, IDE0052等) |
| dotnet format |
コードスタイル違反 |
詳細: reference/csharp/tools.md を参照
注意: プロジェクトに適したツールを選択する。すべてのツールが必要なわけではない。
ステップ2: 包括的なレポートの生成
分析結果を .reports/dead-code-analysis.md に出力する。
レポートには以下を含める:
- 検出されたデッドコードの一覧
- 各項目の分類と重要度
- 推奨されるアクション
ステップ3: 重要度による分類
検出された項目を以下の3つのカテゴリに分類する:
| 重要度 |
対象例 |
削除の安全性 |
| SAFE(安全) |
テストファイル、未使用ユーティリティ |
安全に削除可能 |
| CAUTION(注意) |
APIルート、コンポーネント |
慎重に確認が必要 |
| DANGER(危険) |
設定ファイル、メインエントリポイント |
削除非推奨 |
ステップ4: 安全な削除のみを提案
重要: SAFEカテゴリの項目のみを削除対象として提案する。
CAUTIONカテゴリは追加の確認が必要。
DANGERカテゴリは原則として削除しない。
ステップ5: テスト検証付き削除プロセス
各削除に対して以下のプロセスを厳守する:
1. テストスイートを実行
2. テストがパスすることを確認
3. 対象コードを削除
4. テストスイートを再実行
5. テストが失敗した場合 → ロールバック
6. テストがパスした場合 → 次の削除へ
ステップ6: 削除サマリーの提示
作業完了後、以下の情報を含むサマリーを提示する:
- 削除したファイル/コードの一覧
- 削除できなかった項目(理由付き)
- テスト結果の概要
重要な注意事項
絶対に守ること:
- テストを実行せずにコードを削除してはならない
- DANGERカテゴリの項目は明示的な許可なしに削除しない
- 1つの変更ごとにテストを実行し、失敗時は即座にロールバック
レポートテンプレート
# デッドコード分析レポート
## 分析日時
{日時}
## 使用ツール
- {ツール1}
- {ツール2}
## 検出結果
### SAFE(安全に削除可能)
- [ ] {ファイル/コード1} - {理由}
- [ ] {ファイル/コード2} - {理由}
### CAUTION(要確認)
- [ ] {ファイル/コード1} - {理由}
- [ ] {ファイル/コード2} - {理由}
### DANGER(削除非推奨)
- {ファイル/コード1} - {理由}
- {ファイル/コード2} - {理由}
## 推奨アクション
1. {アクション1}
2. {アクション2}
削除サマリーテンプレート
# デッドコード削除サマリー
## 削除完了
- {ファイル/コード1}
- {ファイル/コード2}
## 削除スキップ(理由付き)
- {ファイル/コード1}: {理由}
## テスト結果
- 実行前: {パス/失敗}
- 削除後: {パス/失敗}
## 備考
{追加コメント}