mcpField
K
knip

knip

github.com/liaoann開発039 回インストール4 週間前に更新
リポジトリ

knip について

knipは、未使用のファイル、エクスポート、依存関係を検出するKnipの設定を案内するリポジトリ向けスキルです。検出を広く無効化せず、結果を確認してチェックの有効性を保ちたい開発者向けです。

主な機能

  1. 01knip.jsoncの設定指針
  2. 02エクスポート検査を保つルール
  3. 03生成されたshadcn/uiファイルへの対応
  4. 04CSS経由の依存関係の管理
  5. 05ノイズを減らす手順

活用シーン

  1. 01リポジトリでのKnip設定
  2. 02Knipの検出結果の確認と対応
  3. 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 がエラーなしで実行されます。

コメント