knip-dead-code について
JavaScript と TypeScript のプロジェクト向けに、Knip で静的に到達不能なファイル、依存関係、エクスポートを検出するスキルです。コードベースの整理や CI での問題確認に役立ちます。
主な機能
- 01未使用のファイル、依存関係、エクスポートの検出
- 02未使用の型と列挙メンバーの検出
- 03エントリーポイントと一般的なツールの自動判別
- 04本番コードまたは変更ファイルのスキャン
- 05CI 向け終了コードと JSON レポート
活用シーン
- 01プロジェクトの未使用依存関係の削除
- 02ライブラリの未使用エクスポートの確認
- 03CI でのデッドコード問題の防止
- 04基準ブランチからの変更ファイルのみをスキャン
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ laurigates/ claude-plugins --skill knip-dead-codeインストール後、Claude Code で/knip-dead-codeを入力して読み込まれたか確認します。
同梱ファイルREFERENCE.md
詳細
Knip によるデッドコード検出
Knip は、JavaScript および TypeScript プロジェクト内の未使用のコード、依存関係、エクスポートを見つけるための包括的なツールです。コードベースをクリーンに保ち、デッドコードが蓄積する前に検出するのに役立ちます。
Knip は静的に到達不能なコードを検出します。未使用の CSS(PurgeCSS)、実行時のデッドコードパス、バンドルサイズの削減(バンドラーのツリーシェイキング)、重複した依存関係(npm-dedupe)には、別のツールを使用してください。
主な機能
Knip とは?
- 未使用項目の検出:ファイル、依存関係、エクスポート、型、enum メンバー
- プラグインシステム:80 以上のフレームワークとツールに対応
- 高速:大規模なコードベースを数秒で解析
- 実用的:ファイルの場所を明示したわかりやすいレポート
- CI 対応:ビルドを失敗させる終了コード
インストール
# Project-local (recommended)
bun add --dev knip
# Verify installation
bunx knip --version
基本的な使い方
# Run Knip (scans entire project)
bunx knip
# Show only unused dependencies
bunx knip --dependencies
# Show only unused exports
bunx knip --exports
# Show only unused files
bunx knip --files
# Production mode (only check production dependencies)
bunx knip --production
# Exclude specific issue types
bunx knip --exclude-exports-used-in-file
# Output JSON (for CI)
bunx knip --reporter json
# Debug mode (show configuration)
bunx knip --debug
設定
自動検出(設定不要)
Knip は次の項目を自動的に検出します。
- エントリーポイント(package.json の
main、exports、bin) - フレームワーク(Next.js、Vite、Remix など)
- テストランナー(Vitest、Jest、Playwright)
- ビルドツール(ESLint、TypeScript、PostCSS)
一般的なプロジェクトでは設定は不要です。
knip.json(明示的な設定)
{
"$schema": "https://unpkg.com/knip@latest/schema.json",
"entry": ["src/index.ts", "src/cli.ts"],
"project": ["src/**/*.ts"],
"ignore": ["**/*.test.ts", "scripts/**"],
"ignoreDependencies": ["@types/*"],
"ignoreBinaries": ["npm-check-updates"]
}
knip.ts(TypeScript の設定)
// knip.ts
import type { KnipConfig } from 'knip';
const config: KnipConfig = {
entry: ['src/index.ts', 'src/cli.ts'],
project: ['src/**/*.ts', 'scripts/**/*.ts'],
ignore: ['**/*.test.ts', '**/*.spec.ts', 'tmp/**'],
ignoreDependencies: [
'@types/*', // Type definitions
'typescript', // Always needed
],
ignoreExportsUsedInFile: true,
ignoreWorkspaces: ['packages/legacy/**'],
};
export default config;
よくあるパターン
未使用の依存関係のみを確認する
# Fastest check - only dependencies
bunx knip --dependencies
# Exit with error if any unused dependencies
bunx knip --dependencies --max-issues 0
CI で使用して、依存関係を厳密に管理します。
エクスポートのみを確認する(ライブラリ開発)
# Check for unused exports
bunx knip --exports
# Allow exports used in same file
bunx knip --exports --exclude-exports-used-in-file
ライブラリで使用して、パブリック API がクリーンであることを確認します。
本番用と開発用の依存関係
# Check production code only
bunx knip --production
# Check everything (including dev dependencies)
bunx knip
結果の解釈
出力例
No unused files
No unused dependencies
2 unused exports
src/utils.ts:
- calculateTax (line 42)
- formatDate (line 58)
src/types.ts:
- UserRole (line 12)
問題の種類
| 種類 | 説明 | 対処 |
|---|---|---|
| 未使用のファイル | どこからもインポートされていないファイル | 削除するか、エントリーポイントに追加する |
| 未使用の依存関係 | package.json にあるが使用されていないパッケージ | 依存関係から削除する |
| 未使用のエクスポート | エクスポートされているが、どこからもインポートされていない | エクスポートを削除するか、プライベートにする |
| 未使用の型 | エクスポートされているが使用されていない型/インターフェース | 削除するか、内部用にする |
| 未使用の enum メンバー | 参照されていない enum メンバー | メンバーを削除する |
| 重複したエクスポート | 複数のファイルから同じものがエクスポートされている | エクスポートを統合する |
エージェント向けの最適化
| コンテキスト | コマンド |
|---|---|
| クイックスキャン | bunx knip |
| 依存関係のみ | bunx knip --dependencies |
| エクスポートのみ | bunx knip --exports |
| CI の厳格モード | bunx knip --max-issues 0 |
| 本番環境のチェック | bunx knip --production |
| JSON 出力 | bunx knip --reporter json |
| 設定のデバッグ | bunx knip --debug |
| 変更されたファイル | bunx knip --changed --base main |
クイックリファレンス
| フラグ | 説明 |
|---|---|
--dependencies | 未使用の依存関係のみを確認 |
--exports | 未使用のエクスポートのみを確認 |
--files | 未使用のファイルのみを確認 |
--production | 本番用の依存関係のみを確認 |
--max-issues N | 問題が N 件を超えた場合に失敗 |
--reporter json | CI 用の JSON 出力 |
--reporter compact | コンパクトな出力 |
--debug | 設定の詳細を表示 |
--changed | 変更されたファイルのみを確認 |
--changed --base main | main 以降に変更されたファイル |
--workspace NAME | 指定したワークスペースを確認 |
--exclude-exports-used-in-file | 同じファイル内のエクスポートを無視 |
詳しい例、高度なパターン、ベストプラクティスについては、REFERENCE.md を参照してください。
参考資料
コメント
Markdown 対応