knip について
knipは、未使用のファイル、エクスポート、依存関係を検出するKnipの設定を案内するリポジトリ向けスキルです。検出を広く無効化せず、結果を確認してチェックの有効性を保ちたい開発者向けです。
主な機能
- 01knip.jsoncの設定指針
- 02エクスポート検査を保つルール
- 03生成されたshadcn/uiファイルへの対応
- 04CSS経由の依存関係の管理
- 05ノイズを減らす手順
活用シーン
- 01リポジトリでのKnip設定
- 02Knipの検出結果の確認と対応
- 03無視項目と除外設定の監査
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ liaoann/ skills --skill knipインストール後、Claude Code で/knipを入力して読み込まれたか確認します。
詳細
Knip
Knip(未使用ファイル/エクスポート/依存関係の検出ツール)を設定し、偽陽性で埋め尽くされることなく、実際のデッドコードを検出し続けられるようにします。
対象範囲
変更が Knip の設定に関わる場合、または Knip の出力への対応が必要な場合に使用します。手順ではなく、指針です。
ルール
設定は knip.jsonc に記述する
knip.json、knip.ts、package.json のキーではありません。JSONC ならコメントを記述できます。また、すべての ignore エントリーには、その理由を併記する必要があります。ignoreDependencies にパッケージ名だけを書いても、1 か月後にはレビューできません。
{
"$schema": "https://unpkg.com/knip@6/schema-jsonc.json",
"entry": ["src/index.ts"],
"project": ["src/**/*.{ts,tsx}"]
}
データでは表現できない compilers 関数が設定で必要な場合に限り、knip.ts を使用します。
ignoreExportsUsedInFile は決して設定しない
自身のファイル内の関数だけが使用するエクスポートされた type/interface は、export キーワードが付いたローカル型です。Knip のデフォルト(false)ではこれが検出されます。これこそが必要な検出結果です。これを true に設定したり、{ "interface": true, "type": true } のように細かく設定したりすると、このチェックは無効になります。CI を通すために types の issue type を除外する場合も同様です。
この検出結果を修正するには、export キーワードを削除します。エクスポートを公開状態に保つ必要がある場合は、全体のオプションを緩和するのではなく、そのシンボルにタグ(/** @public */ と "tags": ["-public"])を付けます。
shadcn/ui:生成されたディレクトリを ignore する
{
// Generated by shadcn/ui — not hand-authored, do not prune.
"ignore": ["src/components/ui/**"]
}
これらのファイルはベンダー提供のもので、未使用のバリアントも含まれています。削除すると、次に shadcn add を実行したときに再生成されるだけです。パスはプロジェクトの components.json のエイリアスに合わせてください。
その結果、ignore によってファイルがグラフから除外されるため、そのファイル内でのみ使用されているパッケージ(radix、class-variance-authority、clsx、tailwind-merge、lucide-react など)が未使用として検出されるようになります。プロジェクトで使用しているものを ignoreDependencies に追加してください。そのリストが長くなる場合は、代わりに "entry": ["src/components/ui/**"] を使用します。エクスポートは検出されなくなりますが、インポートは引き続きカウントされます。
CSS からインポートされるパッケージは ignoreDependencies に追加する
Tailwind v4 は CSS(@import "tailwindcss")から読み込まれますが、Knip はこれをスキャンしないため、誤検出が発生します。
{
"ignoreDependencies": [
// Imported from CSS, invisible to the module graph.
"tailwindcss",
"tw-animate-css"
]
}
Knip が削除対象として示した依存関係を削除する前に、スタイルシートを grep してください。
この順序でノイズを修正する
entry/project の glob → プラグイン設定 → 対象を絞った ignore(ignoreDependencies、ignoreFiles、タグ)→ 最後に ignore。トップレベルの exclude を広げて検出結果を抑制しないでください。1 件を隠すために、リポジトリ全体のチェックが無効になります。
完了基準
compilersが必要でknip.tsを使用する場合を除き、設定はschema-jsonc.jsonの$schemaを指定したknip.jsoncです。ignoreExportsUsedInFileは未設定で、typesは除外されていません。- すべての
ignore/ignoreFiles/ignoreDependenciesエントリーに、理由を記したコメントがあります。 - shadcn の
components/ui/**は ignore されているか、entryに設定されています。ignore されている場合は、そのディレクトリでのみ使われる依存関係が一覧に含まれています。 - CSS からインポートされるパッケージは
ignoreDependenciesに含まれており、package.jsonから削除されていません。 - リポジトリ全体のチェックを無効にすることなく、
knipがエラーなしで実行されます。