メインコンテンツへスキップ
見出し画像

Claude CodeのCLAUDE.mdが太って効かなくなった——8KBまで削って戻した話

    CLAUDE.md、いま何行ありますか?

    うちは一時期、開くのが億劫になる長さになっていました。そして、そのころがいちばん指示が守られなかった時期です。

    書いてあるのに守られない。これ、書いた側からすると相当こたえます。

    今日は、その状態から抜けた話を書きます。やったことは1つで、CLAUDE.mdに本文を書くのをやめただけでした。

    CLAUDE.mdは「毎回読まれる唯一の場所」

    先に前提から。

    Claude Code のCLAUDE.mdは、セッションが始まるときに自動で読み込まれます。ここが他のドキュメントと決定的に違うところです。

    指示書をいくつ作っても、呼ばれなければ存在しないのと同じです。CLAUDE.mdだけは、呼ばれることが保証されている。

    だから、大事なことは全部ここに書きたくなる。私もそうしました。

    新しいルールができたら追記する。事故が起きたら、その経緯と対策を追記する。「これは絶対に守ってほしい」と思うたびに追記する。

    半年で、手に負えない長さになりました。

    画像


    太ってから削るまでの、半年の経過

    先に、どういう経過をたどったかを時系列で置いておきます。数字が入っているほうが、自分のCLAUDE.mdと比べやすいと思うので。

    1ヶ月目は20行くらいでした。起動時にやることと、絶対に人の承認が要ることだけ。このころは守られていました。

    2〜3ヶ月目、事故が起きるたびに追記するようになります。ここで初めて「経緯」を書き始めました。なぜこのルールができたのか、いつ誰が決めたのか、何があって決まったのかを、あとから読む人のために残しておこうと思ったからです。親切のつもりでした。

    4ヶ月目。100行を超えたあたりから体感が変わります。

    指示が通らない回が出てくる。そのたびに「もっとはっきり書こう」と思って、強調と念押しを足しました。太字を増やし、「絶対に」を増やし、同じことを2箇所に書いて確実にしようとした。これが完全に逆でした。

    5ヶ月目には250行前後まで来ています。この時期に、さっき書いた「もう有効でない制約」の事故が起きました。対応済みの機能を、指示書に残った古い1行のせいで数ヶ月まるごと使っていなかったやつです。

    6ヶ月目で削りました。250行から20行ちょっとへ。

    ただし消したのではなくて、本文を別のファイルへ移しただけです。文章の総量はほとんど変わっていません。

    いまは上限を8KBに決めて、機械に測らせています。運用して21日、超過は1件だけ。原因は、新しいルールを足すときに本文を正本ファイルへ移し忘れて、索引の1行と一緒に説明まで書いてしまったことでした。

    こう並べると分かるんですが、太っていく過程はどの段階も善意なんですよね。親切に書こう、はっきり書こう、忘れないように書こう。全部まっとうです。

    まっとうな判断の積み重ねで壊れるので、途中で気づけませんでした。

    画像


    太ると、なぜ守られなくなるのか

    ここが直感に反するところです。

    書けば書くほど、守られる確率は下がります。

    理由は2つあると思っています。

    1つは、単純に読まれる密度の問題です。長い文章の中の1行は、短い文章の中の1行より軽くなる。人間でも同じですよね。就業規則を全部覚えている社員は、たぶんいません。

    もう1つのほうが本質的でした。長い指示書には、もう有効でないルールが必ず混ざるからです。

    うちの場合、ある機能の制約について「この形式には対応していない」と書いた1行が残っていました。翌月には対応済みになっていたのに、消し忘れていた。

    その古い1行を読んだ結果、対応しているはずの機能が、90日以上そのまま使われずに放置されました。しかも誰も気づかない。書いてあるとおりに動いているので、誰も疑わないんです。

    正直に言うと、これはかなり効きました。指示書の矛盾は、指示書を読む側ではなく、書く側の責任です。

    やったのは「本文を書かない」と決めただけ

    直し方は単純でした。それは、

    ルールの本文をCLAUDE.mdに書かない

    です。

    代わりに、こうしました。

    • ルールの本文は、そのルール専用のファイル1つに書く(1ルール=正本1箇所)

    • CLAUDE.mdには、1行の索引だけを置く。「何のルールがあるか」と「本文はどこか」の2つだけ

    • 経緯・実験の記録・過去の裁定は、別の追記用ファイルへ回す

    つまりCLAUDE.mdの役割を、目次と受付に限定しました。

    やってみて分かったのは、長さの問題ではなかったということです。1つのことが2箇所に書いてある状態が問題でした。2箇所あると、片方だけ直る。直らなかったほうが、あとで嘘になる。

    正本を1箇所に決めると、直す場所が自動的に1つに決まります。矛盾が構造的に起きなくなる。

    画像


    上限を決めて、機械に測らせた

    決めただけだと、また太ります。人は必ず追記するので。

    だから上限を決めました。CLAUDE.mdは8KB、全体の案内役のファイルは24KBまで。

    そしてその上限を、自分で数えないようにしました。 定期監査のスクリプトがサイズを測って、超えていたら不合格として出します。

    数値そのものに深い根拠はありません。「いまの分量よりちょっと厳しい」くらいで置いただけです。

    大事なのは数字ではなく、超えたときに機械が言ってくれることでした。自分で気をつけるルールは、忙しい日に必ず飛びます。

    「これは絶対に守らせたい」と思ったときの分岐

    上限を決めると、追記したいときに毎回考えることになります。

    そこで作った分岐がこれです。

    • 1回目の指摘 → 該当の正本ファイルを直す。CLAUDE.mdは触らない

    • 2回目の同じ指摘 → 成果物ではなく仕組みのほうを直す

    • 3回目、または機械で判定できる内容 → 文章をやめて、hookにする

    3つめが効きました。

    hookは、決まった場面で自動的に走る自前の処理です。文章のお願いと違って、hookは読まれなくても動きます。

    たとえば「この形式のファイルを直接上書きしない」というルール。文章で書くと、忙しい日に飛びます。ところが、書き込みの直前に割り込んで止める処理を1本置いておくと、その日どれだけ急いでいても、上書きは物理的に起きません。

    文章で3回言ったことは、たいてい機械化できます。 そして機械化できたら、その行は指示書から消せます。

    指示書が痩せる仕組みを、指示書の中に入れておく。これが今回いちばん効いた設計だったと思っています。

    画像


    では、CLAUDE.mdに何を残すのか

    削る話ばかりしたので、残すもののほうを書きます。うちで最後まで残ったのは4種類でした。

    1つめ、起動時にやることの順番。 セッションが始まったら何を最初に読むか。ここが決まっていないと、毎回ちがう前提で仕事が始まります。逆にここさえ効けば、あとは呼ばれた先で詳しく書けます。

    2つめ、絶対に人の承認が要ることの一覧。 外部への送信、公開、課金、削除。この4つは1行ずつ書いてあります。取り返しがつかない操作は、判断を分散させてはいけない。

    3つめ、正本の場所の索引。 「◯◯のルールは、このファイル」の1行だけ。中身は書きません。

    4つめ、太らせないためのルール。 新しいルールの本文をここに書かない、という宣言そのものを、ここに置いています。

    逆に、追い出したものはこうです。

    • 何かができるようになった経緯、実験の記録、過去にどう判断したかの理由

    • 特定の作業の手順(呼ばれたときに読めばいい)

    • もう有効でないかもしれない制約の説明

    判断の基準は「毎回のセッションで、着手する前に知っている必要があるか」の一点です。着手してから調べても間に合うことは、全部よそへ出しました。

    これで意外なほど減ります。うちの場合、着手する前に本当に知っている必要があったのは、起動の順番が3行、承認が要る操作が4件、正本の場所を指す索引が数行で、合わせて10行ちょっとでした。

    「それでも全部読ませたい」と思った人へ

    分かります。私も削るとき、いちばん抵抗があったのがそこでした。

    消したら守られなくなるんじゃないか、と。

    実際にやってみると、逆でした。残った行の守られ方が、はっきり良くなりました。

    理由は、たぶん優先順位が伝わるようになったからです。100行の中の1行は、優先順位を持ちません。全部が同じ重さに見える。

    20行まで削ると、そこにあること自体が「これは特別だ」という合図になります。

    削るのは、諦めることではなくて、順位をつけることなんだと思います。

    今日からできる一歩

    まず、いまのCLAUDE.mdを開いて、もう有効でない行を探してみてください。

    探すコツは、日付が書いてある行、機能の制約について書いてある行、それから「〜には対応していない」という否定形の行です。この3つに、古くなったものが集中します。

    うちは、この3つを見ただけで矛盾が1件見つかりました。数ヶ月、静かに効き続けていたやつです。

    見つかったら、その1行を消す。それだけで今日は十分だと思います。

    今日はこんな話でした。


    Claude Code を業務に入れるときの型をまとめています

    Claude Code Studio では、Claude Code を実務に組み込むときに私たちが実際に踏んだ事故と、その日のうちに入れた対策をそのまま公開しています。指示書の分け方、承認ゲートの引き方、hookで止める線の決め方までひとまとめにしました。

    👉 ClaudeCodeStudio 6大特典を受け取る

     
     
    Claude Codeガチ勢3人で運営|実務レベルのCLI活用・自動化を毎日発信|開発プログラム参加|賞金30万円獲得|現在は上場企業とAIエージェントを共同開発中|AI時代はコンテキスト/ナレッジ管理が9割|Claude Code学びたい方はフォロー推奨👇

    あなたへのおすすめ