jpskill.com
📦 その他 コミュニティ

dead-code-detector

プログラム内で使われていないコードや変数、関数などを特定し、安全に削除できるようにすることで、プログラムを整理して保守しやすくするSkill。

📜 元の英語説明(参考)

Identify unused code, imports, variables, and functions for safe removal.

🇯🇵 日本人クリエイター向け解説

一言でいうと

プログラム内で使われていないコードや変数、関数などを特定し、安全に削除できるようにすることで、プログラムを整理して保守しやすくするSkill。

※ jpskill.com 編集部が日本のビジネス現場向けに補足した解説です。Skill本体の挙動とは独立した参考情報です。

⚡ おすすめ: コマンド1行でインストール(60秒)

下記のコマンドをコピーしてターミナル(Mac/Linux)または PowerShell(Windows)に貼り付けてください。 ダウンロード → 解凍 → 配置まで全自動。

🍎 Mac / 🐧 Linux
mkdir -p ~/.claude/skills && cd ~/.claude/skills && curl -L -o dead-code-detector.zip https://jpskill.com/download/18165.zip && unzip -o dead-code-detector.zip && rm dead-code-detector.zip
🪟 Windows (PowerShell)
$d = "$env:USERPROFILE\.claude\skills"; ni -Force -ItemType Directory $d | Out-Null; iwr https://jpskill.com/download/18165.zip -OutFile "$d\dead-code-detector.zip"; Expand-Archive "$d\dead-code-detector.zip" -DestinationPath $d -Force; ri "$d\dead-code-detector.zip"

完了後、Claude Code を再起動 → 普通に「動画プロンプト作って」のように話しかけるだけで自動発動します。

💾 手動でダウンロードしたい(コマンドが難しい人向け)
  1. 1. 下の青いボタンを押して dead-code-detector.zip をダウンロード
  2. 2. ZIPファイルをダブルクリックで解凍 → dead-code-detector フォルダができる
  3. 3. そのフォルダを C:\Users\あなたの名前\.claude\skills\(Win)または ~/.claude/skills/(Mac)へ移動
  4. 4. Claude Code を再起動

⚠️ ダウンロード・利用は自己責任でお願いします。当サイトは内容・動作・安全性について責任を負いません。

🎯 このSkillでできること

下記の説明文を読むと、このSkillがあなたに何をしてくれるかが分かります。Claudeにこの分野の依頼をすると、自動で発動します。

📦 インストール方法 (3ステップ)

  1. 1. 上の「ダウンロード」ボタンを押して .skill ファイルを取得
  2. 2. ファイル名の拡張子を .skill から .zip に変えて展開(macは自動展開可)
  3. 3. 展開してできたフォルダを、ホームフォルダの .claude/skills/ に置く
    • · macOS / Linux: ~/.claude/skills/
    • · Windows: %USERPROFILE%\.claude\skills\

Claude Code を再起動すれば完了。「このSkillを使って…」と話しかけなくても、関連する依頼で自動的に呼び出されます。

詳しい使い方ガイドを見る →
最終更新
2026-05-18
取得日時
2026-05-18
同梱ファイル
1

📖 Skill本文(日本語訳)

※ 原文(英語/中国語)を Gemini で日本語化したものです。Claude 自身は原文を読みます。誤訳がある場合は原文をご確認ください。

Dead Code Detector Skill

安全に削除できる未使用のコード、インポート、変数、関数を特定します。

指示

あなたはデッドコード検出のエキスパートです。呼び出された場合:

  1. 未使用コードのスキャン:

    • 未使用のインポートと依存関係
    • 参照されていない関数とメソッド
    • 未使用の変数とパラメータ
    • 到達不能なコードパス
    • コメントアウトされたコードブロック
    • コードベースに残っている非推奨の関数
    • 未使用の CSS クラスとスタイル
    • 未使用の型定義
  2. 依存関係の分析:

    • どこにもインポートされていないインストール済みのパッケージ
    • 本番環境で使用されている開発依存関係
    • 開発/テストでのみ使用される本番依存関係
    • 循環依存関係
  3. コードの到達可能性の確認:

    • 決して呼び出されない関数
    • return 文の後のコード
    • 不可能な条件分岐
    • モジュール内の未使用のエクスポート
  4. レポートの生成: 発見事項を分類します。

    • 削除しても安全: 明らかに使用されていない
    • 潜在的に未使用: 動的に、またはテストで使用されている可能性がある
    • レビューが必要: エクスポートされているが、内部で使用されていない(外部で使用されている可能性がある)

検出カテゴリ

未使用のインポート

// 未使用
import { foo, bar } from 'module'; // bar は決して使用されない

// 推奨
import { foo } from 'module';

未使用の変数

// 未使用
const result = calculate();
const unused = 42; // 決して参照されない

// デッドアサインメント
let value = 10;
value = 20; // 最初の代入はデッド

到達不能なコード

function example() {
  return true;
  console.log('Never executes'); // デッドコード
}

if (false) {
  // デッドコードブロック
}

未使用の関数

// 決して呼び出されないプライベート関数
function helperFunction() {
  // ...
}

// エクスポートされているが、どこでも使用されていない
export function unusedExport() {
  // ...
}

使用例

@dead-code-detector
@dead-code-detector src/
@dead-code-detector --include-tests
@dead-code-detector --aggressive
@dead-code-detector --safe-only

レポート形式

# Dead Code Detection Report

## Summary
- 合計未使用アイテム: 47
- 削除しても安全: 32
- レビューが必要: 15
- 潜在的な節約: ~1,200 行

## Safe to Remove (32)

### Unused Imports (12)
- src/utils/helpers.js:3
  `import { oldFunction } from './legacy'`

- src/components/Button.jsx:5
  `import { validateProps } from './validation'`

### Unused Variables (8)
- src/services/api.js:23
  `const DEBUG_MODE = false` (決して参照されない)

### Unreachable Code (5)
- src/handlers/payment.js:67
  `return` 文の後のコード (lines 68-72)

### Unused Functions (7)
- src/utils/format.js:45
  `function formatOldDate()` (決して呼び出されない)

## Needs Review (15)

### Exported but Not Used Internally (10)
- src/api/client.js:89
  `export function legacyRequest()`
  ⚠ パブリックエクスポート、コンシューマーによって使用されている可能性がある

### Potentially Dynamic Usage (5)
- src/plugins/loader.js:34
  `function loadPlugin()`
  ⚠ 文字列参照を介して動的に呼び出される可能性がある

## Dependencies

### Unused npm Packages (5)
- `moment` (代わりに date-fns を使用)
- `lodash.debounce` (ネイティブの debounce を使用)
- `axios` (fetch に切り替え)

### Misclassified Dependencies (2)
- `typescript` in dependencies (should be devDependency)
- `jest` in devDependencies but used in production scripts

## Commented Code (8 blocks)

- src/legacy/auth.js:120-145 (25 lines commented)
- src/components/Modal.jsx:67-82 (15 lines commented)

## Recommendations

1. **Immediate Actions**:
   - 32 個の削除しても安全なアイテムを削除
   - コメントアウトされたコードブロックを削除
   - 5 個の未使用パッケージをアンインストール

2. **Review Required**:
   - コンシューマーを持つ 10 個のエクスポートされた関数を確認
   - 5 個の潜在的な動的参照を検証

3. **Estimated Impact**:
   - バンドルサイズの削減: ~45KB
   - コードの削減: ~1,200 行
   - 依存関係の削減: 5 パッケージ

検出戦略

静的解析

  • AST を解析して宣言と参照を見つける
  • インポートとその使用状況を追跡する
  • エクスポートされているが未使用のシンボルを特定する

カバレッジベース

  • テストカバレッジを使用して、テストされていないコードを見つける
  • テストで実行されないコードを特定する
  • 決して実行されない分岐を見つける

型ベース (TypeScript)

  • 未使用の型定義を見つける
  • 未使用のインターフェースを検出する
  • 孤立したジェネリクスを特定する

考慮すべきエッジケース

動的参照

// 未使用に見えるかもしれないが、動的に呼び出される
const handlers = {
  onClick: handleClick,
  onHover: handleHover
};

// 文字列を介して呼び出される
window['initApp']();

テストコード

// テストでのみ使用され、メインコードでは未使用に見える可能性がある
export function testHelper() {}

パブリック API

// 外部コンシューマーのためにエクスポートされる
export function publicApi() {
  // 内部では使用されないが、パブリックインターフェースの一部
}

言語固有のツール

  • JavaScript/TypeScript: ts-prune, unimported, depcheck, ESLint
  • Python: vulture, autoflake, pycln
  • Java: UCDetector, IntelliJ IDEA inspections
  • Go: unused, deadcode
  • Rust: cargo-udeps, cargo-machete

ベストプラクティス

  • 定期的なクリーンアップ: 毎月検出を実行する
  • Pre-Commit Hooks: 新しいデッドコードを早期にキャッチする
  • コードレビュー: レビューにデッドコードチェックを含める
  • 非推奨: 削除する前にコードを非推奨としてマークする
  • ドキュメント: コードが未使用である理由をドキュメント化する
  • バージョン管理: git を使用して削除されたコードを追跡する
  • パブリック API: エクスポートされた関数には注意する

削除戦略

  1. 安全な場所から開始: 明らかな未使用コードを最初に削除する
  2. 削除後のテスト: 各削除後にテストを実行する
  3. インポートの確認: インポート文を更新する
  4. コードベースの検索: 文字列参照を grep する
  5. エクスポートのレビュー: パブリックパッケージの semver を検討する
  6. ドキュメント: コードが削除された理由をコミットに記録する

注記

  • 一部の「未使用」コードは、リフレクションまたは動的インポートを介して使用されている可能性がある
  • パブリックライブラリはより慎重である必要がある
  • 参照についてドキュメントと例を確認する
  • パブリック API の非推奨期間を検討する
  • 削除コミットを分離してアトミックに保つ
📜 原文 SKILL.md(Claudeが読む英語/中国語)を展開

Dead Code Detector Skill

Identify unused code, imports, variables, and functions for safe removal.

Instructions

You are a dead code detection expert. When invoked:

  1. Scan for Unused Code:

    • Unused imports and dependencies
    • Unreferenced functions and methods
    • Unused variables and parameters
    • Unreachable code paths
    • Commented-out code blocks
    • Deprecated functions still in codebase
    • Unused CSS classes and styles
    • Unused type definitions
  2. Analyze Dependencies:

    • Installed packages not imported anywhere
    • Dev dependencies used in production
    • Production dependencies only used in dev/test
    • Circular dependencies
  3. Check Code Reachability:

    • Functions never called
    • Code after return statements
    • Impossible conditional branches
    • Unused exports in modules
  4. Generate Report: Categorize findings:

    • Safe to Remove: Definitely unused
    • Potentially Unused: Might be used dynamically or in tests
    • Review Required: Exported but not used internally (might be used externally)

Detection Categories

Unused Imports

// Unused
import { foo, bar } from 'module'; // bar is never used

// Recommended
import { foo } from 'module';

Unused Variables

// Unused
const result = calculate();
const unused = 42; // Never referenced

// Dead assignment
let value = 10;
value = 20; // First assignment is dead

Unreachable Code

function example() {
  return true;
  console.log('Never executes'); // Dead code
}

if (false) {
  // Dead code block
}

Unused Functions

// Private function never called
function helperFunction() {
  // ...
}

// Exported but not used anywhere
export function unusedExport() {
  // ...
}

Usage Examples

@dead-code-detector
@dead-code-detector src/
@dead-code-detector --include-tests
@dead-code-detector --aggressive
@dead-code-detector --safe-only

Report Format

# Dead Code Detection Report

## Summary
- Total unused items: 47
- Safe to remove: 32
- Needs review: 15
- Potential savings: ~1,200 lines

## Safe to Remove (32)

### Unused Imports (12)
- src/utils/helpers.js:3
  `import { oldFunction } from './legacy'`

- src/components/Button.jsx:5
  `import { validateProps } from './validation'`

### Unused Variables (8)
- src/services/api.js:23
  `const DEBUG_MODE = false` (never referenced)

### Unreachable Code (5)
- src/handlers/payment.js:67
  Code after return statement (lines 68-72)

### Unused Functions (7)
- src/utils/format.js:45
  `function formatOldDate()` (never called)

## Needs Review (15)

### Exported but Not Used Internally (10)
- src/api/client.js:89
  `export function legacyRequest()`
  ⚠ Public export, might be used by consumers

### Potentially Dynamic Usage (5)
- src/plugins/loader.js:34
  `function loadPlugin()`
  ⚠ Might be called dynamically via string reference

## Dependencies

### Unused npm Packages (5)
- `moment` (use date-fns instead)
- `lodash.debounce` (using native debounce now)
- `axios` (switched to fetch)

### Misclassified Dependencies (2)
- `typescript` in dependencies (should be devDependency)
- `jest` in devDependencies but used in production scripts

## Commented Code (8 blocks)

- src/legacy/auth.js:120-145 (25 lines commented)
- src/components/Modal.jsx:67-82 (15 lines commented)

## Recommendations

1. **Immediate Actions**:
   - Remove 32 safe-to-remove items
   - Delete commented code blocks
   - Uninstall 5 unused packages

2. **Review Required**:
   - Check 10 exported functions with consumers
   - Verify 5 potentially dynamic references

3. **Estimated Impact**:
   - Bundle size reduction: ~45KB
   - Code reduction: ~1,200 lines
   - Dependency reduction: 5 packages

Detection Strategies

Static Analysis

  • Parse AST to find declarations and references
  • Track imports and their usage
  • Identify exported but unused symbols

Coverage-Based

  • Use test coverage to find untested code
  • Identify code never executed in tests
  • Find branches never taken

Type-Based (TypeScript)

  • Find unused type definitions
  • Detect unused interfaces
  • Identify orphaned generics

Edge Cases to Consider

Dynamic References

// Might look unused but called dynamically
const handlers = {
  onClick: handleClick,
  onHover: handleHover
};

// Called via string
window['initApp']();

Test Code

// Used only in tests, might appear unused in main code
export function testHelper() {}

Public API

// Exported for external consumers
export function publicApi() {
  // Not used internally but part of public interface
}

Language-Specific Tools

  • JavaScript/TypeScript: ts-prune, unimported, depcheck, ESLint
  • Python: vulture, autoflake, pycln
  • Java: UCDetector, IntelliJ IDEA inspections
  • Go: unused, deadcode
  • Rust: cargo-udeps, cargo-machete

Best Practices

  • Regular Cleanup: Run detection monthly
  • Pre-Commit Hooks: Catch new dead code early
  • Code Review: Include dead code check in reviews
  • Deprecation: Mark code as deprecated before removal
  • Documentation: Document why code is unused
  • Version Control: Use git to track removed code
  • Public APIs: Be careful with exported functions

Removal Strategy

  1. Start Safe: Remove obvious unused code first
  2. Test After Each: Run tests after each removal
  3. Check Imports: Update import statements
  4. Search Codebase: Grep for string references
  5. Review Exports: Consider semver for public packages
  6. Document: Note why code was removed in commit

Notes

  • Some "unused" code might be used via reflection or dynamic imports
  • Public libraries should be more conservative
  • Check documentation and examples for references
  • Consider deprecation period for public APIs
  • Keep removal commits separate and atomic