Claude CodeにCLAUDE.mdでルールを書いても、しばらく会話が続くと守られなくなることがあります。原因はモデルのやる気やAIの限界ではなく、CLAUDE.mdの読まれ方にあります。
CLAUDE.mdはセッション開始時に一度だけ読まれる
CLAUDE.mdはセッションの最初にシステムプロンプトとして読み込まれます。会話が進むにつれてユーザーの発言、ツールの実行結果、コードの差分が積み上がり、CLAUDE.mdの内容は相対的にコンテキストの奥へ埋もれていきます。モデルは基本的に直前の文脈を優先して応答を組み立てるため、100往復を超えたあたりでは、CLAUDE.mdの指示は数万トークン前の情報になっています。
これはモデルが指示を忘れているというより、目の前のタスクに関連する情報の方が重みを持って扱われている状態に近いです。長いセッションほどこの傾向は強くなります。
対策は2つしかない
- ルールを短く保つ。長いCLAUDE.mdほど個々のルールの優先度が埋もれます。
- 重要なものは毎回のプロンプトに入れ直す。Claude CodeにはUserPromptSubmitフックがあり、プロンプト送信のたびに固定のテキストを差し込めます。CLAUDE.mdが一度きりの注入なのに対し、フックは毎回効きます。
効かないルール、効くルール
「丁寧に書く」「慎重に進める」「ベストプラクティスに従う」といった抽象的な指示はほぼ効きません。何をもって丁寧とするか、何が失敗なのかがモデルの判断に委ねられたままだからです。判断基準そのものが書かれていないルールは、実質的に何も指定していないのと同じです。
効くルールは判断基準と検証手順が具体的です。例えば次のようなものです。
- 「できましたと書く前に、必ずテストコマンドを実行し、その結果を報告に含める」
- 「80行以上のコードを書き換える場合は、実行前に変更計画を3行で提示する」
- 「破壊的な操作(force push、rm -rf、DBのDROP系)は必ず確認を挟む」
共通しているのは、いつ・何を・どう確認するかが具体的に書かれている点です。「気をつける」ではなく「実行後にこのコマンドで確認する」まで落とし込むと、モデルはその通りに動きやすくなります。
判断が必要な箇所には判断基準を書く
「適切に処理する」ではなく、何が適切かの基準を書きます。例えばエラーハンドリングなら「失敗したら例外を投げる」のか「ログを出して処理を続ける」のかを明示します。基準を書かずに任せると、その場その場でモデルが違う判断をし、コードの一貫性が崩れます。
300行を超えたら削る
CLAUDE.mdが長くなるほど、1つ1つのルールの優先度は下がります。定期的に見直して、実際に効いていないルールや、もう関係なくなったプロジェクトの記述は消していく方が、新しいルールを足すより効果があります。行数の上限を決めて、それを超えたら足す前に削る、という運用がシンプルです。この考え方をそのまま導入できる形(フック4本・メモリ構造・スキル4本・解説6本)にまとめたものを、別の記事で配布しています。Claude Codeが同じミスを繰り返さなくなる設定一式
