CLAUDE.mdに何を書くと守られ、何を書いても守られないのか──公式仕様と、134行の運用ログで書き分ける
Claude Code公式ドキュメントは、CLAUDE.mdを「コンテキストであり強制的な設定ではない」と明記し、1ファイル200行以下を目標に挙げている。当サイトのユーザーレベルCLAUDE.mdは134行・6カテゴリで、そこには守られなかった違反6件が日付付きで残っている。何を書けば守られ、何を書いてもhookに落とすまで守られないのかを、公式仕様と実運用のログの両方から書き分ける。

目次
CLAUDE.mdの書き方で最初に押さえるべきは、公式ドキュメントの一文である。Claude Code公式「Claude があなたのプロジェクトを記憶する方法」は、CLAUDE.mdと自動メモリについて「Claude はこれらをコンテキストとして扱い、強制的な設定ではありません」「アクションをブロックするには、Claude の判断に関わらず PreToolUse hook を使用してください」と明記している。CLAUDE.mdは守られやすくする文書ではあっても、守らせる仕組みではない。この前提を置くと、書くべき内容と、別の場所へ移すべき内容が分かれる。以下、公式仕様(2026年8月27日にcode.claude.comで確認)と、当サイトが運用中のユーザーレベルCLAUDE.md(134行・6カテゴリ・違反記録6件)を並べて整理する。
- 公式ドキュメントはCLAUDE.mdを「コンテキストであり強制的な設定ではない」と定義し、目安として1ファイル200行以下を挙げている。ブロックが必要ならPreToolUse hookへ、と公式が明示している。
- CLAUDE.mdの内容はシステムプロンプトそのものではなく、システムプロンプトの後のユーザーメッセージとして配信される。公式は「厳密な遵守の保証はありません」と書いている。
- 当サイトのユーザーレベルCLAUDE.mdは134行・6カテゴリだが、そこには守られなかった記録が6件残っている。最終的に再発が止まったのは、条文をhook(PreToolUseで
exit 2)に落とした2件だった。
CLAUDE.mdはどこに置くと読まれるのか
公式ドキュメントは、CLAUDE.mdを4つのスコープに分けている。読み込み順は広いスコープから狭いスコープへで、後に来るものほど「Claudeが最後に読むもの」になる。
| スコープ | 置き場所 | 用途 | 共有範囲 |
|---|---|---|---|
| 管理ポリシー | macOS: /Library/Application Support/ClaudeCode/CLAUDE.md/Linux・WSL: /etc/claude-code/CLAUDE.md/Windows: C:\Program Files\ClaudeCode\CLAUDE.md |
組織全体の指示 | 組織内の全ユーザー |
| ユーザー指示 | ~/.claude/CLAUDE.md |
全プロジェクト共通の個人設定 | 自分だけ(全プロジェクト) |
| プロジェクト指示 | ./CLAUDE.md または ./.claude/CLAUDE.md |
チーム共有のプロジェクト規約 | ソース管理経由でチーム |
| ローカル指示 | ./CLAUDE.local.md |
個人的なプロジェクト固有の設定(.gitignoreに追加) |
自分だけ(現在のプロジェクト) |
読み込みの挙動も仕様で決まっている。Claude Codeは作業ディレクトリからツリーを上に辿り、途中の各ディレクトリのCLAUDE.md/CLAUDE.local.mdを起動時に全部読む。一方、作業ディレクトリより下にあるCLAUDE.mdは起動時には読まれず、Claudeがそのディレクトリ内のファイルを読んだときにオンデマンドで読まれる。「書いたのに効かない」の相当数は、この上下の違いで説明がつく。
管理ポリシーのCLAUDE.mdだけはclaudeMdExcludesで除外できない、と公式は但し書きしている。逆に言えばユーザー・プロジェクト・ローカルの各ファイルはclaudeMdExcludes(globまたは絶対パスで指定)でスキップでき、モノレポで他チームのCLAUDE.mdが混ざる場合の逃げ道はここにある。
何を書くと守られるのか──「検証できる粒度」まで落とす
公式が「効果的な指示を書く」節で挙げている基準は3つ、サイズ・構造・具体性である。具体性の例示が一番わかりやすい。
| 守られにくい書き方 | 公式が推奨する書き方 |
|---|---|
| コードを適切にフォーマットする | 2スペースのインデントを使用する |
| 変更をテストする | コミット前に npm test を実行する |
| ファイルを整理しておく | APIハンドラーは src/api/handlers/ に置く |
共通点は、書かれた通りにやったかを後から第三者が判定できること。左列は判定できず、右列は判定できる。当サイトのCLAUDE.mdでもこの差は結果に出ている。「自動化ジョブを止めたらlaunchctl list | grep <ジョブ名>を実行し、空になっていることを確認してから完了と報告する」という条項は、確認コマンドまで書いてあるので守られている。対して初期版の「シークレットを画面に表示しない」という抽象条項は2回破られた(2026-05-12の記録)。「シークレット」が何を指すかの判定が、実行時の解釈に委ねられるためである。
追記のタイミングについても公式は基準を示す。「Claudeが2回目に同じ間違いを犯す」「前回のセッションで入力した同じ修正をまたチャットに入力する」ときが合図だという。裏返せば、1回しか起きていないことを予防的に書き足すのは、後述する分量コストに見合わない。Claude Code自体の使い方や料金はClaude Code 使い方・料金・できることに整理してある。
何を書いても守られないのは、どういう条項か
公式ドキュメントのトラブルシューティング節に、この記事の核心にあたる説明がある。「CLAUDE.md コンテンツはシステムプロンプト自体の一部ではなく、システムプロンプトの後のユーザーメッセージとして配信されます。Claude はそれを読んで従おうとしますが、特に曖昧または矛盾する指示の場合、厳密な遵守の保証はありません」。
ここから、書いても効きにくい条項の型が3つ導ける。
- 判定基準が実行時の解釈に依存する条項(「適切に」「必要なら」「危険なものは」)。公式の具体性ガイドラインの裏返し。
- 他のファイルと矛盾する条項。公式は「2つのルールが互いに矛盾している場合、Claude は1つを任意に選択する可能性があります」と書いている。ユーザーCLAUDE.md、プロジェクトCLAUDE.md、
.claude/rules/を定期的に突き合わせる作業が必要になる。 - 特定のタイミングで必ず走る必要がある条項(コミット前、ファイル編集後など)。公式は明確に「代わりに hook として記述してください」と指示している。
当サイトの運用ログはこの3番目を裏づけている。ユーザーレベルCLAUDE.mdには134行のうち6カテゴリの「絶対遵守事項」が書かれているが、同じファイルの末尾に、それが破られた記録が6件、日付付きで残っている。内訳を型で分類すると次のようになる。
| 条項の型 | 記録された結果 | 打ち手 |
|---|---|---|
| 「シークレットを表示しない」(抽象・判定が解釈依存) | 2026-05-12に2回表示 | 対象ファイルの拡張子と、マスク方法まで条文に列挙 |
| 「停止したら記録する」(手順のみ、確認義務なし) | 2026-05-13、停止済みと記録されたジョブが実際は動いていた | 確認コマンドの実行結果提示を義務化する条項を追加 |
| 「設定ファイルを勝手に書き換えない」 | 2026-07-06に違反、複数セッションが巻き込まれた | PreToolUse hookで書き込みをexit 2ブロック |
| 「有料APIの実行前に承認を取る」 | 2026-07-08に違反、無断で大量実行 | PreToolUse hookでコマンド本文を走査しブロック |
最後の2件は、条文を書き足すのではなくhookに落とした。以降、同種の再発は記録されていない(2026年8月27日時点)。ただし1台・1人の観測であって、hookが原理的に破られないことの証明ではない。公式は「終了2はブロッキングエラーを意味します」「PreToolUse はツール呼び出しをブロックし、UserPromptSubmit はプロンプトを拒否します」と定義し、終了コード1は非ブロッキングとして処理が進む点も明記している。強制したいならexit 2である。hookの実装手順はAIに「ルールを読め」は効かない──読むまで作業をブロックする仕組み(hooks)の作り方にまとめた。
200行を超えたら、どこに逃がすか
公式は「CLAUDE.md ファイルあたり 200 行以下を目標にします。より長いファイルはより多くのコンテキストを消費し、遵守を減らします」と書いている。逃がし先は3つあり、それぞれ読み込まれるタイミングが違う。
| 置き場所 | いつ読み込まれるか | コンテキストコスト | 向いている内容 |
|---|---|---|---|
| CLAUDE.md | セッション開始時に全文 | 毎リクエスト | ビルドコマンド、規約、「常にXする」ルール |
.claude/rules/*.md |
毎セッション。paths frontmatterがあれば一致するファイルを読んだときだけ |
条件付き | 言語別・ディレクトリ別のガイドライン |
| Skill | オンデマンド(呼び出し時、または関連判断時) | 説明文のみ毎回、本文は使用時 | リファレンス資料、複数ステップの手順 |
| Hook | ライフサイクルイベント発火時 | ゼロ(出力を返さない限り) | 毎回同じ挙動が必要なガードレール |
.claude/rules/のパススコープは、frontmatterにpaths: ["src/api/**/*.ts"]のようにglobを書く方式。pathsがないルールは無条件に読まれ、.claude/CLAUDE.mdと同じ優先度で起動時に入る。ユーザーレベルの~/.claude/rules/はプロジェクトルールより先に読み込まれ、プロジェクト側の優先度が高くなる。
注意点として、公式は@pathインポートを「インポートされたファイルは起動時に読み込まれるため、コンテキストは削減されません」と明記している。分割は整理には効くが、トークンの節約にはならない。当サイトのプロジェクト側CLAUDE.mdは1行の@AGENTS.mdだけだが、これは他ツールとの共用のための構成であって、コンテキスト削減の手段ではない。
/compact のあとに残る指示、消える指示
長いセッションで圧縮(コンパクション)が走ったとき、指示がどうなるかは読み込まれ方で決まる。公式「コンテキストウィンドウを探索する」の表がそのまま答えになっている。
| メカニズム | コンパクション後 |
|---|---|
| システムプロンプト・出力スタイル | 変更なし(メッセージ履歴の一部ではない) |
| プロジェクトルートCLAUDE.md、スコープなしルール | ディスクから再注入される |
| 自動メモリ | ディスクから再注入される |
paths: frontmatterを持つルール |
一致するファイルが再度読まれるまで失われる |
| サブディレクトリのネストされたCLAUDE.md | そのディレクトリ内のファイルが再度読まれるまで失われる |
| 呼び出されたSkill本体 | 再注入(スキルあたり5,000トークン、合計25,000トークンでキャップ、古いものから脱落) |
| Hook | 影響なし(コンテキストではなくコードとして実行される) |
指示が抜け落ちたように見えたら、まず「その指示はどこに書いてあったか」を確認する。会話中に渡しただけの指示は圧縮で要約に潰れる。永続させたいならCLAUDE.mdに書く、というのが公式の案内である。セッションをまたぐ引き継ぎの考え方はAIに毎回同じ説明をするのが面倒──「朝会」方式で引き継ぎをなくす運用でも扱っている。
自動メモリはCLAUDE.mdと別物で、200行または25KBで切れる
CLAUDE.mdと並ぶもう一つの仕組みが自動メモリで、こちらはClaudeが自分で書く。保存先は~/.claude/projects/<project>/memory/、デフォルトは有効、autoMemoryEnabled: falseまたは環境変数CLAUDE_CODE_DISABLE_AUTO_MEMORY=1で無効化できる。
重要な数字は読み込み範囲である。公式は「MEMORY.md の最初の 200 行、または最初の 25KB のいずれか先に来る方が、すべての会話の開始時に読み込まれます」とし、続けて「この制限は MEMORY.md にのみ適用されます。CLAUDE.md ファイルは長さに関係なく完全に読み込まれます」と書いている。CLAUDE.mdの200行はあくまで遵守率のための目安で、MEMORY.mdの200行/25KBはハードな読み込み境界、という非対称がある。
当サイトの実測値(2026年8月27日時点、wcコマンドによる)は、MEMORY.md 156行・20,946バイト、同じmemoryディレクトリ内のファイル178個。MEMORY.mdは自動メモリで随時書き換わるため、この数値は取得のたびに変わる点は留意してほしい。行数は200行の内側だが、バイト数は25KB上限のおよそ8割に達している。1行あたりの情報密度を上げる書き方をしていると、行数だけ見て安心していても先にバイト側で切れる。読み込み状況は/memoryで確認できる。Claude Codeのエージェントとしての位置づけはClaude Codeとは──コード生成に留まらない「仕事を渡せる」AIエージェントに書いた。
遵守率の定量データはなく、当サイトの実測はn=1
- 遵守率の定量データはない。 公式は「より短いファイルはより良い遵守を生成します」「200行を超えるファイルは遵守を減らす可能性があります」と書いているが、何%改善するといった数値は公開されていない。本記事の200行という数字は、Anthropicが提示する目標値であって、実験結果ではない。
- 当サイトの運用ログはn=1である。 134行・6カテゴリ・違反6件・hook14本は、1人・1台のmacOS環境での記録にすぎない。「抽象条項は破られやすい」「hookに落とすと再発が止まった」は他環境で検証していない。hook導入後に同種の違反が記録されていないことも、記録に残っていないという以上のことは言えない。
- バージョン差がある。 公式には
/doctorのトリムチェックがv2.1.206以降、コンパクション時の要約が拡張思考設定を継承するのはv2.1.198以降、といったバージョン依存の記述がある。手元のClaude Codeが古い場合、記述通りに動かない項目がある。 - 管理ポリシー層は未検証。 MDMやグループポリシーで組織全体のCLAUDE.mdを配布する挙動は、公式記述の引用にとどめており、当サイトでは実行していない。
出典(すべて2026年8月27日に取得)
- Claude Code Docs「Claude があなたのプロジェクトを記憶する方法」 https://code.claude.com/docs/ja/memory
- Claude Code Docs「Claude Code を拡張する」 https://code.claude.com/docs/ja/features-overview
- Claude Code Docs「コンテキストウィンドウを探索する」 https://code.claude.com/docs/ja/context-window
- Claude Code Docs「Hooks」 https://code.claude.com/docs/ja/hooks
- Claude Code Docs「Settings」 https://code.claude.com/docs/ja/settings
但し書き:仕様はClaude Codeのバージョン更新で変わる。設定キー名やパス、閾値は導入前に公式ドキュメントで再確認してほしい。本記事に登場する当サイトの運用数値(134行、違反6件、MEMORY.md 156行・20,946バイト、hookスクリプト14本)は2026年8月27日時点の実測で、環境依存であり、同じ構成で同じ結果になることを保証するものではない。MEMORY.mdは自動メモリで随時書き換わるため、閲覧時点の実際の行数・バイト数とは一致しない。
出典・参照資料
AIニュースの解説を動画でも
YouTubeでは注目ニュースの背景を解説し、Xでは新着記事をお知らせしています。
コメント
まだコメントはありません。最初のコメントを書いてみませんか?
AIについて聞きたいことはありますか?
質問箱で無料で受け付けています。回答は公開され、他の方の参考にもなります。
質問箱を見る →新しい記事をメールで受け取る
AIの新しい発表を、出典付きで整理して届けます。