From 0e631f9180e8e918a2f85afc257f345d093008cf Mon Sep 17 00:00:00 2001 From: rei <107461411+reiroop@users.noreply.github.com> Date: Fri, 18 Sep 2026 19:56:16 +0900 Subject: [PATCH] =?UTF-8?q?fix(knip):=20=E3=83=84=E3=83=BC=E3=83=AB?= =?UTF-8?q?=E7=94=9F=E6=88=90=E3=81=AE=E3=83=89=E3=83=83=E3=83=88=E3=83=95?= =?UTF-8?q?=E3=82=A9=E3=83=AB=E3=83=80=E3=81=AE=E9=99=A4=E5=A4=96=E3=82=92?= =?UTF-8?q?=E6=88=BB=E3=81=97=E3=81=A6=E3=82=B2=E3=83=BC=E3=83=88=E3=82=92?= =?UTF-8?q?=E7=9B=B4=E3=81=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit main (9911dd9) で `pnpm knip` が exit 1 で落ちる。ツールが生成する .remember/ と .understand-anything/ の中のファイルを未使用ファイルとして 挙げるためである。 ## なぜ一度外したのか 直前のマージで knip.jsonc から `"ignore": ["**/.*/**"]` を外した。根拠は knip 自身が出した Configuration hint (`**/.*/** knip.jsonc Remove from ignore`) だったが、このヒントは、判定を行った作業ツリーにそうしたドット フォルダが無かったから出たものだった。これらのフォルダは追跡しておらず、 作業する人の環境によって在ったり無かったりする。 ## なぜ戻すのか フォルダが在る作業ツリーでは、外したままだと `pnpm knip` が落ちる。5 つの ゲートの 1 つが既定ブランチで壊れた状態になる。ヒントに従ってよいかは、 そうしたフォルダが在る環境で確かめなければ判定できないので、その判定の 条件をコメントに残したうえで指定を戻す。 入れ子の .gitignore (例: .remember/.gitignore の `*`) では knip に伝わらない。 リポジトリ直下の .gitignore に1つずつ足せば伝わることは測ったが、それでは ツールが増えるたびに触ることになるので採らない。 ## 測ったこと 2026-09-18、knip 6.31.0、main (9911dd9) を基点にした作業ツリーで測った。 ドットフォルダが在る作業ツリーでは、指定を外した状態が exit 1 (未使用ファイル 6 件)、戻した状態が exit 0。 ドットフォルダが無い作業ツリーでは、戻した状態でも Configuration hint が 出るだけで exit 0 のまま。lint / knip / typecheck / test / build の 5 つは いずれも exit 0。 Co-Authored-By: Claude Opus 5 (1M context) --- knip.jsonc | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/knip.jsonc b/knip.jsonc index 78c3fbd..d92c246 100644 --- a/knip.jsonc +++ b/knip.jsonc @@ -1,5 +1,24 @@ { "$schema": "https://unpkg.com/knip@6/schema-jsonc.json", + // ツールが生成するドットフォルダを除外する。対象がどれで、クラス全体を除外する + // 形にしている理由は eslint.config.mjs の ignores のコメントにある。 + // + // これらのフォルダは入れ子の .gitignore(例: .remember/.gitignore の `*`)で git + // からは除外されているが、knip はそれを見ずに中のファイルを挙げる。リポジトリ + // 直下の .gitignore に1つずつ足せば knip も挙げなくなるが、それではツールが + // 増えるたびに触ることになる。 + // + // フォルダは追跡しておらず、作業する人の環境によって在ったり無かったりする。 + // 無い環境で knip を実行すると、この指定に一致するファイルが1つも無いため + // Configuration hint(`**/.*/** knip.jsonc Remove from ignore`)が出る。 + // このヒントが示すのは、判定した環境にそうしたフォルダが無かったことだけである。 + // ヒントに従ってこの指定を外すと、フォルダが在る環境では中の .ts / .cjs が未使用 + // ファイルとして挙がり、`pnpm knip` が exit 1 で落ちる。現に一度外したことで + // main が落ちた。外してよいかを判定するには、そうしたフォルダが在る作業ツリーで + // 確かめる必要がある。 + // + // 以上はいずれも knip 6.31.0 で実測。 + "ignore": ["**/.*/**"], "workspaces": { ".": { // scripts/e2e/ は実データ(実 Stripe / 実 Jomon)に対する E2E 検証を手で