リファクタリング - デッドコード削除(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}: {理由}
## テスト結果
- 実行前: {パス/失敗}
- 削除後: {パス/失敗}
## 備考
{追加コメント}
