dead-code-removal
複数言語に対応し、リファクタリング後や本番デプロイ前に不要なコードを安全に検出し削除するSkill。
📜 元の英語説明(参考)
Detects and safely removes unused code (imports, functions, classes) across multiple languages. Use after refactoring, when removing features, or before production deployment. Includes safety checks and validation.
🇯🇵 日本人クリエイター向け解説
複数言語に対応し、リファクタリング後や本番デプロイ前に不要なコードを安全に検出し削除するSkill。
※ jpskill.com 編集部が日本のビジネス現場向けに補足した解説です。Skill本体の挙動とは独立した参考情報です。
下記のコマンドをコピーしてターミナル(Mac/Linux)または PowerShell(Windows)に貼り付けてください。 ダウンロード → 解凍 → 配置まで全自動。
mkdir -p ~/.claude/skills && cd ~/.claude/skills && curl -L -o dead-code-removal.zip https://jpskill.com/download/6905.zip && unzip -o dead-code-removal.zip && rm dead-code-removal.zip
$d = "$env:USERPROFILE\.claude\skills"; ni -Force -ItemType Directory $d | Out-Null; iwr https://jpskill.com/download/6905.zip -OutFile "$d\dead-code-removal.zip"; Expand-Archive "$d\dead-code-removal.zip" -DestinationPath $d -Force; ri "$d\dead-code-removal.zip"
完了後、Claude Code を再起動 → 普通に「動画プロンプト作って」のように話しかけるだけで自動発動します。
💾 手動でダウンロードしたい(コマンドが難しい人向け)
- 1. 下の青いボタンを押して
dead-code-removal.zipをダウンロード - 2. ZIPファイルをダブルクリックで解凍 →
dead-code-removalフォルダができる - 3. そのフォルダを
C:\Users\あなたの名前\.claude\skills\(Win)または~/.claude/skills/(Mac)へ移動 - 4. Claude Code を再起動
⚠️ ダウンロード・利用は自己責任でお願いします。当サイトは内容・動作・安全性について責任を負いません。
🎯 このSkillでできること
下記の説明文を読むと、このSkillがあなたに何をしてくれるかが分かります。Claudeにこの分野の依頼をすると、自動で発動します。
📦 インストール方法 (3ステップ)
- 1. 上の「ダウンロード」ボタンを押して .skill ファイルを取得
- 2. ファイル名の拡張子を .skill から .zip に変えて展開(macは自動展開可)
- 3. 展開してできたフォルダを、ホームフォルダの
.claude/skills/に置く- · macOS / Linux:
~/.claude/skills/ - · Windows:
%USERPROFILE%\.claude\skills\
- · macOS / Linux:
Claude Code を再起動すれば完了。「このSkillを使って…」と話しかけなくても、関連する依頼で自動的に呼び出されます。
詳しい使い方ガイドを見る →- 最終更新
- 2026-05-17
- 取得日時
- 2026-05-17
- 同梱ファイル
- 1
📖 Skill本文(日本語訳)
※ 原文(英語/中国語)を Gemini で日本語化したものです。Claude 自身は原文を読みます。誤訳がある場合は原文をご確認ください。
[スキル名] dead-code-removal
デッドコードの削除
このスキルは、複数のプログラミング言語にわたる未使用のコードを安全に特定し、削除します。実際に必要なコードが削除されるのを防ぐための包括的な安全チェックが含まれています。
このスキルを使用するタイミング
- コードのリファクタリングと機能の削除後
- バンドルサイズを削減するための本番デプロイ前
- レガシーコードのクリーンアップ時
- 非推奨機能の削除時
- コードベースサイズの最適化時
- コード品質基準の維持時
このスキルが行うこと
- 言語検出: プロジェクトの言語と構造を特定します。
- エントリーポイントマッピング: エントリーポイントと重要なパスをマッピングします。
- 依存関係分析: 依存関係グラフと使用パターンを構築します。
- 安全な検出: 安全チェックにより未使用の要素を特定します。
- 段階的な削除: 検証を伴いながらコードを段階的に削除します。
- バックアップ作成: 変更を加える前にバックアップを作成します。
ヘルパースクリプト
このスキルには、scripts/ にPythonヘルパースクリプトが含まれています。
-
find_unused_imports.py: AST解析を使用して、Pythonファイル内の未使用のインポートを正確に検出します。未使用のインポートと行番号を含むJSONを出力します。python scripts/find_unused_imports.py src/utils.py src/services.py
使用方法
未使用コードの削除
このプロジェクトの未使用のインポートと関数を見つけて削除する
src/ディレクトリのデッドコードをクリーンアップするが、慎重に行う
特定の分析
src/utils/の未使用の関数をチェックし、安全に削除する
分析プロセス
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ヘルパースクリプトが含まれています。
# Pythonファイル内の未使用のインポートを見つける
python scripts/find_unused_imports.py src/utils.py src/services.py
未使用のインポート:
# Python: ASTベースの分析
import ast
# 追跡: import文と実際の使用状況
# スキップ: 動的インポート (importlib, __import__)
// JavaScript: モジュール分析
// 追跡: import/requireと参照
// スキップ: 動的インポート、遅延ロード
未使用の関数/クラス:
- 定義: 宣言されたすべての関数/クラス
- 参照: 直接呼び出し、継承、コールバック
- 保持: エントリーポイント、フレームワークフック、イベントハンドラ
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"
段階的な削除:
- 変更を含む一時ファイルを作成します。
- 構文を検証します。
- 利用可能な場合はテストを実行します。
- 適用またはロールバックします。
検証:
# 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 の未使用のインポートをクリーンアップする
出力:
## デッドコードの削除: src/utils/helpers.py
### 分析
- **ファイル**: `src/utils/helpers.py`
- **総インポート数**: 8
- **未使用のインポート数**: 3
### 見つかった未使用のインポート
1. `import os` - 2行目 (どこでも使用されていません)
2. `import json` - 3行目 (どこでも使用されていません)
3. `from datetime import timedelta` - 5行目 (どこでも使用されていません)
### 削除しても安全
✅ 3つのインポートすべては削除しても安全です (動的な使用は検出されませんでした)
### 変更
```python
# 変更前
import os
import json
from datetime import datetime, timedelta
import requests
# 変更後
from datetime import datetime
import requests
検証
- ✅ 構文チェックに合格しました
- ✅ テストに合格しました
- ✅ 動的なインポートは検出されませんでした
### 例2: 未使用の関数の削除
**入力**: `src/services/` の未使用の関数を見つける
**出力**:
```markdown
## デッドコードの削除: src/services/
### 分析
- **分析されたファイル数**: 12
- **見つかった関数数**: 45
- **未使用の関数数**: 2
### 未使用の関数
**1. `src/services/utils.js` 内の `formatOldDate()`**
- **場所**: 34-42行目
- **ステータス**: ✅ 削除しても安全
- **理由**: 参照が見つからず、エクスポートされておらず、テストでも使用されていません
**2. `src/services/auth.js` 内の `legacyAuth()`**
- **場所**: 78-95行目
- **ステータス**: ⚠️ 保持 (フレームワークパターン)
- **理由**: ルート設定で参照されています (12行目)
### 要約
- **削除されたもの**: 1つの関数 (`formatOldDate`)
- **保持されたもの**: 1つの関数 (フレームワークの使用)
- **L 📜 原文 SKILL.md(Claudeが読む英語/中国語)を展開
Dead Code Removal
This skill safely identifies and removes unused code across multiple programming languages. It includes comprehensive safety checks to prevent removing code that's actually needed.
When to Use This Skill
- After refactoring code and removing features
- Before production deployment to reduce bundle size
- When cleaning up legacy code
- When removing deprecated functionality
- When optimizing codebase size
- When maintaining code quality standards
What This Skill Does
- Language Detection: Identifies project languages and structure
- Entry Point Mapping: Maps entry points and critical paths
- Dependency Analysis: Builds dependency graphs and usage patterns
- Safe Detection: Identifies unused elements with safety checks
- Incremental Removal: Removes code incrementally with validation
- Backup Creation: Creates backups before making changes
Helper Scripts
This skill includes Python helper scripts in scripts/:
-
find_unused_imports.py: Uses AST parsing to accurately detect unused imports in Python files. Outputs JSON with unused imports and line numbers.python scripts/find_unused_imports.py src/utils.py src/services.py
How to Use
Remove Unused Code
Find and remove unused imports and functions in this project
Clean up dead code in src/ directory, but be conservative
Specific Analysis
Check for unused functions in src/utils/ and remove them safely
Analysis Process
1. Language Detection
Identify Project Type:
- Python: Look for
pyproject.toml,setup.py,requirements.txt - JavaScript/TypeScript: Check
package.json,tsconfig.json - Java: Look for
pom.xml,build.gradle - Go: Check
go.mod - Rust: Check
Cargo.toml
Detect Entry Points:
- 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 files:
*.config.*,settings.*,setup.* - Test files:
test_*.py,*.test.js,*.spec.js
2. Build Dependency Graph
Cross-File Dependencies:
- Track imports and requires
- Map function/method calls
- Identify class inheritance
- Track dynamic usage patterns
Framework Patterns:
- Preserve framework-specific patterns (Django models, React components, etc.)
- Check for decorators and annotations
- Verify entry point registrations
3. Detect Unused Elements
Using Helper Script:
The skill includes a Python helper script for finding unused imports:
# Find unused imports in Python files
python scripts/find_unused_imports.py src/utils.py src/services.py
Unused Imports:
# 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
Unused Functions/Classes:
- Define: All declared functions/classes
- Reference: Direct calls, inheritance, callbacks
- Preserve: Entry points, framework hooks, event handlers
4. Safety Checks
Never Remove If:
- Python:
getattr(),eval(),globals()usage detected - JavaScript:
window[],this[], dynamicimport()usage - Java: Reflection, annotations (
@Component,@Service) - Framework patterns: Models, controllers, routes, components
- Entry points: Main functions, app initialization
- Test files: All test-related code
Framework Preservation:
Python:
- Django: Models, migrations, admin registrations
- Flask: Routes, blueprints, app factories
- FastAPI: Endpoints, dependencies
JavaScript:
- React: Components, hooks, context providers
- Vue: Components, directives, mixins
- Angular: Decorators, services, modules
Java:
- Spring: Beans, controllers, repositories
- JPA: Entities, repositories
5. Safe Removal Process
Backup Creation:
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"
Incremental Removal:
- Create temp file with change
- Validate syntax
- Run tests if available
- Apply or rollback
Validation:
# Python
python -m py_compile file.py
python -m pytest
# JavaScript
npx eslint file.js
npm test
# Java
javac -Xlint file.java
mvn test
Examples
Example 1: Remove Unused Imports
Input: Clean up unused imports in src/utils/helpers.py
Output:
## 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
Validation
- ✅ Syntax check passed
- ✅ Tests pass
- ✅ No dynamic imports detected
### 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
Best Practices
Safety Guidelines
Do:
- Run tests after each removal
- Preserve framework patterns
- Check string references in templates
- Validate syntax continuously
- Create comprehensive backups
- Remove incrementally
Don't:
- Remove without understanding purpose
- Batch remove without testing
- Ignore dynamic usage patterns
- Skip configuration files
- Remove from migrations
- Remove exported/public APIs
Detection Patterns
Static Analysis:
- Use AST parsing for accurate detection
- Track cross-file references
- Check for dynamic usage patterns
- Verify framework-specific patterns
Validation:
- Always run syntax checks
- Run tests after removal
- Verify build still works
- Check for runtime errors
Reporting
Report Should Include:
- Files analyzed (count and types)
- Unused detected (imports, functions, classes)
- Safely removed (with validation status)
- Preserved (reason for keeping)
- Impact metrics (lines removed, size reduction)
Related Use Cases
- Code cleanup before release
- Reducing bundle size
- Removing deprecated code
- Maintaining code quality
- Refactoring legacy codebases
- Optimizing build times