mcpField
R
remove-deadcode

remove-deadcode

github.com/code-yeongyu開発70.4k525 回インストール今日更新
リポジトリ

remove-deadcode について

TypeScript プロジェクトで不要なコードを検出・削除するワークフロー用スキルです。スキャン、LSP による参照確認、並列エージェントへの作業分担を行い、エントリーポイントなどの誤判定を防ぎます。

主な機能

  1. 01不要コード候補の並列スキャン
  2. 02LSP による参照確認
  3. 03誤判定を避ける除外ルール
  4. 04ファイル単位の削除バッチ
  5. 05型チェック・テスト・ビルド

活用シーン

  1. 01TypeScript の未使用シンボルの監査
  2. 02確認済みの削除を複数ファイルに分担

インストール

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

$npx skills add https://github.com/code-yeongyu/oh-my-openagent --skill remove-deadcode

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

詳細

並列ディープエージェントを活用してデッドコードを削除します。あなたはオーケストレーターです。スキャン、検証、バッチ分けを行ってから、すべての削除を並列エージェントに委任してください。

- **LSP が最優先です。** 削除を決定する前に、必ず `LspFindReferences(includeDeclaration=false)` で確認してください。 - **エントリーポイントは削除しないでください。** `src/index.ts`、`src/cli/index.ts`、テストファイル、設定ファイル、`packages/` は対象外です。 - **自分でコードを削除しないでください。** スキャン、検証、バッチ分けを行ってから、ディープエージェントを起動してください。作業はエージェントが行います。 デッドコードと判定してはいけないもの: - `src/index.ts` またはバレル `index.ts` で再エクスポートされているシンボル - テストファイルから参照されているシンボル(テストは有効な利用者です) - `@public` / `@api` の JSDoc タグが付いたシンボル - フックファクトリー(`createXXXHook`)、ツールファクトリー(`createXXXTool`)、`agentSources` 内のエージェント定義 - コマンドテンプレート、スキル定義、MCP 設定 - `package.json` の exports に含まれるシンボル

PHASE 1: SCAN — デッドコード候補を見つける

以下をすべて並列で実行してください。

TypeScript strict モード(主要なスキャナーです。最初に実行してください):

bunx tsc --noEmit --noUnusedLocals --noUnusedParameters 2>&1

未使用のローカル変数、インポート、パラメーター、型の確定リストが、正確な file:line の位置とともに得られます。

探索エージェント(すべて同時にバックグラウンドで起動してください):

task(subagent_type="explore", run_in_background=true, load_skills=[],
  description="Find orphaned files",
  prompt="Find files in src/ NOT imported by any other file. Check all import statements. EXCLUDE: index.ts, *.test.ts, entry points, .md, packages/. Return: file paths.")

task(subagent_type="explore", run_in_background=true, load_skills=[],
  description="Find unused exported symbols",
  prompt="Find exported functions/types/constants in src/ that are never imported by other files. Cross-reference: for each export, grep the symbol name across src/ — if it only appears in its own file, it's a candidate. EXCLUDE: src/index.ts exports, test files. Return: file path, line, symbol name, export type.")

すべての結果を候補のマスターリストにまとめてください。


PHASE 2: VERIFY — LSP による確認(誤検出ゼロ)

フェーズ 1 の各候補について:

LspFindReferences(filePath, line, character, includeDeclaration=false)
// 0 references → CONFIRMED dead
// 1+ references → NOT dead, drop from list

また、上記の誤検出防止策も適用してください。確認済みリストを作成します。

| # | File | Symbol | Type | Action |
|---|------|--------|------|--------|
| 1 | src/foo.ts:42 | unusedFunc | function | REMOVE |
| 2 | src/bar.ts:10 | OldType | type | REMOVE |
| 3 | src/baz.ts:7 | ctx | parameter | PREFIX _ |

アクションの種類:

  • REMOVE — シンボル/インポート/ファイル全体を削除する
  • PREFIX _ — シグネチャ上必要だが未使用の関数パラメーター → _paramName に名前を変更する

確認済みの候補がゼロの場合は、「デッドコードは見つかりませんでした」と報告して終了してください。


PHASE 3: BATCH — ファイルごとに競合なく並列化できるようグループ化する

目標:Git の競合をゼロにして、並列エージェントの数を最大化します。

  1. 確認済みのデッドコード項目をファイルパスごとにグループ化します
  2. 同じファイル内の項目はすべて同じバッチに割り当てます(2 つのエージェントが同じファイルを編集するのを防ぎます)
  3. デッドファイル(ファイル全体の削除)がある場合は、独立したバッチにします
  4. バッチ数は 5~15 を目標にします。合計項目数が 5 未満の場合は、項目ごとに 1 バッチを使用します。

バッチ分けの例:

Batch A: [src/hooks/foo/hook.ts — 3 unused imports]
Batch B: [src/features/bar/manager.ts — 2 unused constants, 1 dead function]
Batch C: [src/tools/baz/tool.ts — 1 unused param, src/tools/baz/types.ts — 1 unused type]
Batch D: [src/dead-file.ts — entire file deletion]

同じディレクトリ内のファイルはまとめてバッチにできます(2 つのエージェントが同じファイルを編集しない限り、競合は発生しません)。並列化のため、バッチ数を最大化してください。


PHASE 4: EXECUTE — 並列ディープエージェントを起動する

各バッチについて、ディープエージェントを起動してください。

task(
  category="deep-low",
  load_skills=["typescript-programmer", "git-master"],
  run_in_background=true,
  description="Remove dead code batch N: [brief description]",
  prompt="[see template below]"
)

各ディープエージェントには、以下のプロンプト構成を渡します(バッチごとに内容を埋めてください)。

## TASK: Remove dead code from [file list]

## DEAD CODE TO REMOVE

### [file path] line [N]
- Symbol: `[name]` — [type: unused import / unused constant / unused function / unused parameter / dead file]
- Action: [REMOVE entirely / REMOVE from import list / PREFIX with _]

### [file path] line [N]
- ...

## PROTOCOL

1. Read each file to understand exact syntax at the target lines
2. For each symbol, run LspFindReferences to RE-VERIFY it's still dead (another agent may have changed things)
3. Apply the change:
   - Unused import (only symbol in line): remove entire import line
   - Unused import (one of many): remove only that symbol from the import list
   - Unused constant/function/type: remove the declaration. Clean up trailing blank lines.
   - Unused parameter: prefix with `_` (do NOT remove — required by signature)
   - Dead file: delete with `rm`
4. After ALL edits in this batch, run: `bun run typecheck`
5. If typecheck fails: `git checkout -- [files]` and report failure
6. If typecheck passes: stage ONLY your files and commit:
   `git add [your-specific-files] && git commit -m "refactor: remove dead code from [brief file list]"`
7. Report what you removed and the commit hash

## CRITICAL
- Stage ONLY your batch's files (`git add [specific files]`). NEVER `git add -A` — other agents are working in parallel.
- If typecheck fails after your edits, REVERT all changes and report. Do not attempt to fix.
- Pre-existing test failures in other files are expected. Only typecheck matters for your batch.

すべてのバッチを同時に起動し、すべての完了を待ってください。


PHASE 5: FINAL VERIFICATION

すべてのエージェントが完了した後:

bun run typecheck   # must pass
bun test            # note any NEW failures vs pre-existing
bun run build       # must pass

概要を作成してください。

## Dead Code Removal Complete

### Removed
| # | Symbol | File | Type | Commit | Agent |
|---|--------|------|------|--------|-------|
| 1 | unusedFunc | src/foo.ts | function | abc1234 | Batch A |

### Skipped (agent reported failure)
| # | Symbol | File | Reason |
|---|--------|------|--------|

### Verification
- Typecheck: PASS/FAIL
- Tests: X passing, Y failing (Z pre-existing)
- Build: PASS/FAIL
- Total removed: N symbols across M files
- Total commits: K atomic commits
- Parallel agents used: P

SCOPE CONTROL

$ARGUMENTS が指定されている場合は、スキャン範囲を絞ります。

  • ファイルパス → そのファイルのみ
  • ディレクトリ → そのディレクトリのみ
  • シンボル名 → そのシンボルのみ
  • all または空 → プロジェクト全体をスキャン(デフォルト)

ABORT CONDITIONS

以下の場合は停止して報告してください。

  • 候補が 50 件を超える(ユーザーに範囲を絞るか、続行を確認するよう依頼します)
  • ビルドが失敗し、元に戻しても修正できない

コメント