CLAUDE.md に指示を足すきっかけはよくありますが、消すきっかけはあまりありません。失敗したときに足した一行を読み直しても、消したらまた同じことになりそうで、結局そのままにしてしまいます。

そこで手元の 2 本を、残す理由まで書き出して読み直しました。ブログ用の 13 項目はほとんど残り、共通のツール説明は 15 項目中 6 項目が削除候補になりました。同じように毎回読ませているファイルでも、中身はずいぶん違いました。今回は判定までで、ファイルは編集していません。

.NET ブログの「Instructions Hygiene: What Frontier Models Still Need You to Say」に、見直す基準が書かれていました(Wendy Breiding、2026-08-12 公開、2026-08-21 取得)。モデルが自分で調べたり推論したりしても分からないことを残す、という考え方です。

コードを読めば分かることまで書いていないか

記事の例では、legacy/ がまだ本番で使われていることや、src/Clients/Generated を手で編集してはいけないことを残します。Billing.Api と Billing.Worker の役割分担など、設計で決めた意図も同じです。名前や配置から推測されて、間違った判断をされると困るものです。

検証用のコマンドは、動くことを確認してから書く。絶対に守る制約には always / never / must を使ってよいが、何でも強い指示にしない。詳しい説明は別の文書に置き、そこへのリンクを示す、という整理です。

消す候補は、一般的な助言、ファイル目録、ツールが調べる設定、ほかの文書のコピーなど。「深呼吸して」「step by step で考えて」といった文句や、過去の失敗を経緯ごと書いたメモも挙がっていました。

フォーマット設定を 20 個書くより、dotnet format --verify-no-changes を走らせる指示を残す。この例なら、自分のファイルでも置き換えられる箇所を探しやすいです。

見直すときは、各行を次の 4 つに分けます。原文では keep / remove / move / verify と呼んでいます。

判定 判断すること
残す 今も正しく、結果に影響し、自力では分かりにくいか
消す 一般論、曖昧な指示、古い情報、ツールが検査する内容ではないか
移す 特定のパスだけの指示や、別の文書に置く詳細ではないか
確かめる コマンド、回避策、バージョン、依存関係が今も有効か

モデルの変更、ビルド方法の変更、リポジトリの再編、同じ指示が繰り返し無視されるときが、見直しの機会だそうです。新しいモデルが指示なしで成功したなら削り、リポジトリ固有の知識が足りずに失敗したなら、その知識を足す。

行数そのものは目標にしない、という説明もありました。コマンドが間違った 30 行より、必要な設計の説明がある 100 行のほうがよい。この基準なら、短くするためだけに削らずに済みます。

ブログの CLAUDE.md は、ほとんど残った

このブログの CLAUDE.md は当時 40 行。空行と表の罫線を除く 13 項目を、私が一つずつ読みました。記事で勧めている、先にモデルへ重複や矛盾を探させる手順は使っていません。

内容 判定 理由
記事は /blog-write の手順で書く 残す 執筆規約を読む場所を示している
ビルドと検査のコマンド 確かめる 実行して、今も動くかを見る
hugo が見つからなければ /opt/homebrew/bin/hugo を試す 残す 手元の環境で実際に必要だった補足
記事本文は blog-site/content/posts/ に置く 残す このリポジトリの決め事
種の置き場と、2026-08-16 に移した経緯 経緯だけ消す 現在の場所が分かれば足りる
検査スクリプトの場所と、CI で見る記事の範囲 残す 検証に必要
docs/ と posts/ はサイトに出ない 残す ディレクトリ名だけでは分かりにくい
太字と em ダッシュを使わない 残す 文体の決め事。太字の数は自動検査していない
日本語の太字が Goldmark の規則で壊れる場合がある 残す ソースを読むだけでは気づきにくい
新規記事に url: と aliases: を書かない 残す 古い記事を真似すると間違える
検査が何件を見たか確認する 残す 対象 0 件でも exit 0 になる
カタログ側の規約をブログへ持ち込まない 残す リポジトリ間のルールを区別する必要がある
カタログ側の文書 3 つへの参照表 移す スキルにも同じ参照がある

「残す」10、「確かめる」1、「消す」1、「移す」1 でした。コマンドは実行して確認しました。次は当時の出力です。

$ cd blog-site && hugo --quiet && cd ..
$ perl scripts/check-post-output.pl blog-site/content/posts/2026-08-21-instructions-hygiene.md
  OK: blog-site/content/posts/2026-08-21-instructions-hygiene.md(本文 6242 文字, ソースの **=0, 本文 <strong>=0, 生の **=0, em ダッシュ=0)

ビルドと検査はどちらも exit 0。対象の記事 1 件を検査したことも確認し、この項目も残すと判断しました。

たとえば hugo が見つからなければ絶対パスを試す、という行。一般的な使い方の説明に見えますが、手元では実際に必要だった補足です。古い記事にある url: を新規記事には使わない、という規則も、コードを真似するだけでは分かりません。もともと自動検査で捕まえられないことを残していたので、削る箇所は少なくなりました。

共通のツール説明には、導入時のメモが残っていた

もう一つ見たのは、シェル出力を圧縮する RTK の使い方を書いた RTK.md です。全プロジェクトで毎回読ませていました。空行と囲みを除くと 15 項目あります。

残したいのは、何のためのツールかという説明と、フックがコマンドを自動で書き換える仕組み、それにフックの対象外で直接実行する rtk gain などのコマンドです。

削除候補は、rtk --version や which rtk など導入確認の 3 行、同名ツールとの衝突についての注意書き、参照先に該当する節がない「詳細は CLAUDE.md を参照」でした。導入確認は一度済ませればよく、今は名前の衝突もありません。古い参照も毎回読ませる意味がありませんでした。

こちらは「残す」9、「消す」6。導入時には必要だった確認が、その後も毎回読む説明に混ざっていました。

「過去の失敗の日記」は耳が痛いです。経緯を全部書いておくと次は防げる気がしますが、作業に必要なのは、そこから決まった手順だけの場合もあります。経緯はコミットや設計文書で読めればよさそうです。

今回は分類だけなので、消しても困らないかはまだ確認できていません。削った後には、普段の作業で以前の失敗が再発しないかを見ます。ブログの指示がほとんど残ったことにも、それぞれ理由はありました。行数だけ見ていても、その違いは分かりませんでした。