mcpField
D
dead-code-removal

dead-code-removal

github.com/89jobrien開発4198 回インストール9 週間前に更新
リポジトリ

dead-code-removal について

Dead Code Removalは、未使用コードを安全に特定して削除するスキルです。コードベースを保守・整理する開発者向けに、プロジェクト構成や依存関係を調べ、バックアップ、段階的な変更、検証によって誤削除のリスクを抑えます。

主な機能

  1. 01言語とエントリーポイントの検出
  2. 02ファイル間の依存関係と参照の分析
  3. 03未使用のインポート、関数、クラスの検出
  4. 04動的な利用やフレームワークのパターンを保護
  5. 05バックアップと段階的な削除
  6. 06構文チェックとテストによる検証

活用シーン

  1. 01リファクタリング後の未使用コード整理
  2. 02リリース前のレガシーコード整理
  3. 03非推奨機能の削除
  4. 04Pythonファイルの未使用インポート確認

インストール

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

$npx skills add https://github.com/89jobrien/steve --skill dead-code-removal

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

同梱ファイルscripts/find-unused-imports.py

詳細

デッドコードの削除

このスキルは、複数のプログラミング言語にわたって未使用のコードを安全に特定し、削除します。実際には必要なコードを削除してしまわないよう、包括的な安全チェックが含まれています。

このスキルを使用する場面

  • コードをリファクタリングして機能を削除した後
  • バンドルサイズを削減するため、本番環境へのデプロイ前
  • レガシーコードを整理するとき
  • 非推奨の機能を削除するとき
  • コードベースのサイズを最適化するとき
  • コード品質の基準を維持するとき

このスキルでできること

  1. 言語の検出:プロジェクトの言語と構成を特定します
  2. エントリーポイントのマッピング:エントリーポイントと重要な処理経路をマッピングします
  3. 依存関係の分析:依存関係グラフと使用パターンを構築します
  4. 安全な検出:安全チェックを行いながら未使用の要素を特定します
  5. 段階的な削除:検証しながらコードを段階的に削除します
  6. バックアップの作成:変更を加える前にバックアップを作成します

ヘルパースクリプト

このスキルには、scripts/ 内に Python のヘルパースクリプトが含まれています。

  • find_unused_imports.py:AST 解析を使って Python ファイル内の未使用のインポートを正確に検出します。未使用のインポートと行番号を JSON 形式で出力します。

    python scripts/find_unused_imports.py src/utils.py src/services.py
    

使用方法

未使用コードの削除
Find and remove unused imports and functions in this project
Clean up dead code in src/ directory, but be conservative
特定の分析
Check for unused functions in src/utils/ and remove them safely

分析プロセス

1. 言語の検出

プロジェクトの種類を特定する:

  • Python:pyproject.toml、setup.py、requirements.txt を確認します
  • JavaScript/TypeScript:package.json、tsconfig.json を確認します
  • Java:pom.xml、build.gradle を確認します
  • Go:go.mod を確認します
  • Rust:Cargo.toml を確認します

エントリーポイントを検出する:

  • Python:main.py、__main__.py、app.py、run.py
  • JavaScript:index.js、main.js、server.js、app.js
  • Java:Main.java、*Application.java、*Controller.java
  • 設定ファイル:*.config.*、settings.*、setup.*
  • テストファイル:test_*.py、*.test.js、*.spec.js
2. 依存関係グラフの構築

ファイル間の依存関係:

  • インポートと require を追跡します
  • 関数やメソッドの呼び出しをマッピングします
  • クラスの継承を特定します
  • 動的な使用パターンを追跡します

フレームワークのパターン:

  • フレームワーク固有のパターン(Django のモデル、React のコンポーネントなど)を保持します
  • デコレーターとアノテーションを確認します
  • エントリーポイントの登録を検証します
3. 未使用の要素の検出

ヘルパースクリプトの使用:

このスキルには、未使用のインポートを検出するための Python ヘルパースクリプトが含まれています。

# Find unused imports in Python files
python scripts/find_unused_imports.py src/utils.py src/services.py

未使用のインポート:

# Python: AST-based analysis
import ast
# Track: Import statements vs actual usage
# Skip: Dynamic imports (importlib, __import__)
// JavaScript: Module analysis
// Track: import/require vs references
// Skip: Dynamic imports, lazy loading

未使用の関数/クラス:

  • 定義:宣言されているすべての関数/クラス
  • 参照:直接呼び出し、継承、コールバック
  • 保持:エントリーポイント、フレームワークのフック、イベントハンドラー
4. 安全チェック

次の場合は削除しない:

  • Python:getattr()、eval()、globals() の使用が検出された場合
  • JavaScript:window[]、this[]、動的な import() の使用
  • Java:リフレクション、アノテーション(@Component、@Service)
  • フレームワークのパターン:モデル、コントローラー、ルート、コンポーネント
  • エントリーポイント:メイン関数、アプリの初期化処理
  • テストファイル:テスト関連のコードすべて

フレームワーク固有のコードの保持:

Python:

  • Django:モデル、マイグレーション、管理画面への登録
  • Flask:ルート、ブループリント、アプリファクトリー
  • FastAPI:エンドポイント、依存関係

JavaScript:

  • React:コンポーネント、フック、コンテキストプロバイダー
  • Vue:コンポーネント、ディレクティブ、ミックスイン
  • Angular:デコレーター、サービス、モジュール

Java:

  • Spring:Bean、コントローラー、リポジトリー
  • JPA:エンティティ、リポジトリー
5. 安全な削除プロセス

バックアップの作成:

backup_dir="./unused_code_backup_$(date +%Y%m%d_%H%M%S)"
cp -r . "$backup_dir" 2>/dev/null || mkdir -p "$backup_dir" && rsync -a . "$backup_dir"

段階的な削除:

  1. 変更を加えた一時ファイルを作成します
  2. 構文を検証します
  3. テストが利用可能な場合は実行します
  4. 変更を適用するか、ロールバックします

検証:

# Python
python -m py_compile file.py
python -m pytest

# JavaScript
npx eslint file.js
npm test

# Java
javac -Xlint file.java
mvn test

例

例 1:未使用のインポートを削除する

入力:src/utils/helpers.py 内の未使用のインポートを整理します

出力:

## Dead Code Removal: src/utils/helpers.py

### Analysis
- **File**: `src/utils/helpers.py`
- **Total imports**: 8
- **Unused imports**: 3

### Unused Imports Found
1. `import os` - Line 2 (not used anywhere)
2. `import json` - Line 3 (not used anywhere)
3. `from datetime import timedelta` - Line 5 (not used anywhere)

### Safe to Remove
✅ All 3 imports are safe to remove (no dynamic usage detected)

### Changes
```python
# Before
import os
import json
from datetime import datetime, timedelta
import requests

# After
from datetime import datetime
import requests
検証
  • ✅ 構文チェックに合格
  • ✅ テストに合格
  • ✅ 動的インポートは検出されませんでした

### Example 2: Remove Unused Functions

**Input**: Find unused functions in `src/services/`

**Output**:
```markdown
## Dead Code Removal: src/services/

### Analysis
- **Files analyzed**: 12
- **Functions found**: 45
- **Unused functions**: 2

### Unused Functions

**1. `formatOldDate()` in `src/services/utils.js`**
- **Location**: Line 34-42
- **Status**: ✅ Safe to remove
- **Reason**: No references found, not exported, not used in tests

**2. `legacyAuth()` in `src/services/auth.js`**
- **Location**: Line 78-95
- **Status**: ⚠️ Preserved (framework pattern)
- **Reason**: Referenced in route configuration (line 12)

### Summary
- **Removed**: 1 function (`formatOldDate`)
- **Preserved**: 1 function (framework usage)
- **Lines removed**: 9
- **Size reduction**: ~300 bytes

ベストプラクティス

安全ガイドライン

実施すること:

  • 削除するたびにテストを実行する
  • フレームワークのパターンを維持する
  • テンプレート内の文字列参照を確認する
  • 継続的に構文を検証する
  • 包括的なバックアップを作成する
  • 段階的に削除する

実施しないこと:

  • 目的を理解せずに削除する
  • テストせずにまとめて削除する
  • 動的な使用パターンを無視する
  • 設定ファイルを確認しない
  • マイグレーションから削除する
  • エクスポートされた API/パブリック API を削除する
検出パターン

静的解析:

  • 正確に検出するために AST 解析を使用する
  • ファイル間の参照を追跡する
  • 動的な使用パターンを確認する
  • フレームワーク固有のパターンを検証する

検証:

  • 必ず構文チェックを実行する
  • 削除後にテストを実行する
  • ビルドが引き続き正常に動作することを確認する
  • 実行時エラーがないか確認する
レポート

レポートに含める内容:

  • 解析したファイル(数と種類)
  • 未使用として検出された項目(インポート、関数、クラス)
  • 安全に削除した項目(検証状況を含む)
  • 維持した項目(維持した理由)
  • 影響指標(削除した行数、サイズ削減量)

関連するユースケース

  • リリース前のコード整理
  • バンドルサイズの削減
  • 非推奨コードの削除
  • コード品質の維持
  • レガシーなコードベースのリファクタリング
  • ビルド時間の最適化

コメント