Claude Code に「CLAUDE.md を読んだか?」と確認すると「はい、読みました」と返ってくる。それでも数ターン後には、そこに書いてあるはずのルールが守られていない——プロジェクト固有のコマンド、コミットメッセージのルール、デプロイ手順、すべてどこかに消えていく。

これは Claude Code 特有の問題ではない。Cursor の .cursor/rules、GitHub Copilot の .github/copilot-instructions.md、Codex CLI の AGENTS.md でも、長く使っているうちに同じ現象が起きる。

本記事では、AIエージェントが .md 形式のルールファイルを無視する 根本原因5つ を整理した上で、即効性のある書き換えテクニックから、Hooks やサブエージェントによる仕組み化まで、実例ベースで対応策を解説する。

SUMMARY

なぜルールは無視されるのか

— そして、どう仕組み化するか

原因
コンテキスト制約
長いセッションで初期指示が auto-compact で薄まる
原因
優先度の曖昧さ
ユーザーの直接指示がCLAUDE.mdより優先される
対策
短く・優先度明示
150行以内、CRITICAL/MUST等で重要度を明確に
対策
仕組み化
Hooks・サブエージェント・スラッシュコマンドで自動強制

1. なぜAIはルールを無視するのか——5つの根本原因

① コンテキストウィンドウの構造的制約

LLMは入力された全テキストに同じ重みで注意を払うわけではない。長文の中ほどにある指示は「lost in the middle」現象で見落とされる。CLAUDE.md が 200行を超えたあたりから、中盤のルールは事実上消える。

② 長いセッションでの auto-compact

Claude Code には会話履歴を圧縮する /compact 機能がある。これが自動発動するとシステムプロンプト寄りの指示は残るが、CLAUDE.md の細かい運用ルールは要約・省略される。長時間の作業ほど後半でルール無視が起きやすい理由だ。

③ ユーザーの直接指示が優先される

AIにとって 「いま画面で言われたこと」は「数百ターン前に読んだルール」より優先度が高い。ユーザーが「とりあえずやって」「コミットして」と急かすと、CLAUDE.md の「コミット前に確認」を素通りする。

④ ルールの曖昧さ・矛盾

「丁寧に書く」「適切に処理する」のような主観的・抽象的な指示は AIが自分の判断で解釈するため、人間の期待とズレやすい。「3行以内で書く」「Slack APIを使う場合はchat.postMessageを使う」のように、検証可能な形に落とし込む必要がある。

⑤ ルールファイルの長大化・分散

CLAUDE.md + SPEC.md + README.md + 各種 .md……と分散し、しかも各々が長くなると、AIは全部を均等に読んでくれない。同じ指示が複数ファイルで矛盾していると、AIは「無難な方」を選ぶ傾向がある。

2. ルールが守られているか診断する方法

まず現状把握から。以下の質問をAIに投げて応答を観察する:

質問判断ポイント
「CLAUDE.md に書かれているルールを箇条書きで全部教えて」抜けがあれば、その項目はAIに認識されていない
「次にコードを書く前に、CLAUDE.md のどのルールに従うか宣言して」宣言しないルールは適用されないと考えてよい
「過去5ターンで CLAUDE.md のルールに違反した可能性のある操作を挙げて」違反の自覚があるか、ないかで対応が変わる

「読んだ」「理解した」とAIが答えても、実際に適用するかは別問題。診断は実行後の振る舞いで判断するのが確実だ。

3. 即効性のある対応策(5分でできる)

① ルールファイルを150行以内に圧縮

体感的に、Claude Code が確実に守るのは CLAUDE.md 100〜150行程度まで。それを超えるなら以下に分割:

  • 必ず守る掟(10〜20行)→ CLAUDE.md の冒頭
  • サービス別の詳細仕様 → SPEC-xxx.md に分離
  • 過去の経緯・背景 → docs/ ディレクトリへ

CLAUDE.md は「忘れたら致命的なものだけ」に絞る。詳細は別ファイル参照で良い。

② 優先度マーカーを付ける

以下のような明示的な優先度キーワードを使うと AIの注意を強制的に集められる:

  • CRITICAL / 致命的: 違反すると本番障害が起きるレベル
  • MUST / 必須: 必ず守る
  • SHOULD / 推奨: 通常守る
  • NICE TO HAVE / 任意: 余裕があれば

CRITICAL: 本番DBへの破壊的クエリは事前承認必須」のように書くと、長文中でも見落とされにくい。

③ チャット内で再強調

セッション開始時に「最重要ルール3つを宣言してから作業を始めて」と一文添える。これで該当ルールが直近のコンテキストに引き上げられ、その後の作業に効く。

④ 危険操作はTodoWrite に記録させる

AIエージェントTodoWrite ツール(または同等のタスク管理機能)に「ルール確認」を含めて、各ステップでチェックさせる。可視化により「忘れた」が起きにくくなる。

4. 中長期の仕組み化——Hooks・サブエージェント・スラッシュコマンド

ルール記述で頑張るのには限界がある。「AIに守らせる」のではなく「環境が強制する」仕組みにシフトする方が確実だ。

① Claude Code Hooks で機械的に強制

Claude Code の Hooks 機能を使えば、特定のツール呼び出し前後に任意のスクリプトを実行できる。「AIがルールを忘れても、システムが止める」仕組みを作れる。

例えば PreToolUse フックで:

  • Bash ツール実行前に危険コマンド(rm -rf, git push --force)を検出 → 拒否
  • Edit ツール実行前に対象ファイルの権限・ロック状態をチェック
  • コミット前にプロジェクト固有のテストを実行、失敗なら阻止

ルールを文章で頼むより、Hooks で機械的に強制する方が圧倒的に堅牢だ。

② サブエージェントで責務分離

Claude Agent SDK や Cursor のサブエージェント機能を使い、「ルール監査専用のエージェント」を作る。メインのエージェントが書いたコードを監査エージェントがレビューする二段構えにすると、メインがルールを忘れても監査が拾う。

サブエージェントには監査用の短いプロンプトだけを与えれば良いので、ルール認識率が高いのがポイント。

③ カスタムスラッシュコマンドで定型化

「コミット前に必ず行う3つのチェック」のような定型作業は、スラッシュコマンド(/precommit など)に切り出す。ユーザーが /precommit を打てば、AIは決まった手順を実行する。毎回ルールを読み直す必要がない

④ 自動検証スクリプトで検出

CIや pre-commit hook で「禁止されるパターン」を grep で検出する。例:

  • console.log が本番コードに残っていないか
  • ハードコードされた API キーがないか
  • ファイル冒頭に著作権コメントが入っているか

AIに頼らず、機械が見つける。これが最終防衛線になる。

5. ツール別ベストプラクティス

主要AIエージェント別 ルール設計のコツ

Claude Code
Anthropic
設定ファイル
CLAUDE.md + ~/.claude/CLAUDE.md
推奨上限
プロジェクト 100〜150行
仕組み化
Hooks / サブエージェント / Slash Commands
Cursor
Anysphere
設定ファイル
.cursor/rules/*.mdc
推奨上限
1ルール 50行 × 複数ファイル
仕組み化
glob で適用範囲限定 / @-mention で参照
GitHub Copilot
GitHub
設定ファイル
.github/copilot-instructions.md
推奨上限
100行以内
仕組み化
.github/instructions/*.md でファイル別ルール
Codex CLI
OpenAI
設定ファイル
AGENTS.md
推奨上限
200行程度(GPT-5系は長文耐性高め)
仕組み化
承認モード切替 / サンドボックスで強制

共通の鉄則は 「短く・具体的に・優先度を明示」。ファイル名や置き場所はツールにより異なるが、書き方の原則は同じだ。

6. ルール設計のアンチパターン3選

① 「ベストプラクティスに従ってください」

誰のベストプラクティス? AI は学習データの平均に従うため、結果的に最大公約数的な書き方になる。プロジェクト固有の事情は反映されない。具体的な禁止事項・必須事項として書く。

② 同じルールを複数ファイルに重複記載

CLAUDE.md と SPEC.md と README.md に同じ「コミット規約」を書くと、3つの間で微妙にズレが出てAIが混乱する。正本(Source of Truth)を1箇所に決め、他からは参照リンクのみ

③ 「絶対に〜してください」の連発

すべてが「絶対」だと、AIは優先順位を判断できなくなる。本当に致命的なものだけ「CRITICAL」を使い、ほかは普通の語調にする。強調はインフレを起こすと心得る。

まとめ

AIエージェントが .md ルールを無視するのは、AIの怠慢ではなく 構造的な制約とルール設計の問題がほとんどだ。即効性のある対応策(150行以内に圧縮・優先度マーカー・チャット内再強調)で多くは解決する。それで足りない致命的ルールは、Hooks・サブエージェント・スラッシュコマンド・自動検証スクリプトで機械的に強制する仕組みに移行しよう。

「ルールが守られないなら、守らせる仕組みを作る」——AIエージェント運用の新しい常識だ。

FAQ

Q1. CLAUDE.md は何行以内が理想?

体感では 100〜150行。200行を超えるなら、SPEC-xxx.md などに分割推奨。冒頭に「最重要ルール5つ」のサマリを置くと忘却対策になる。

Q2. Cursor の .cursorrules.cursor/rules/*.mdc はどっちを使うべき?

新規なら .cursor/rules/*.mdc 推奨。1ルール = 1ファイルでglobパターンによる適用範囲指定ができる。レガシーの .cursorrules は単一ファイルで肥大化しやすい。

Q3. ルールを長く書くほど厳格になる?

逆効果。長くなるほど中盤のルールが薄れる。短く本質的なルールを目立つ位置(冒頭)に置く方が守られる確率が高い。

Q4. 複数のAIツール(Claude Code + Cursor)で同じプロジェクトを使う場合は?

各ツールの設定ファイルに同じ内容のサマリを書きつつ、詳細は共通の SPEC.md に集約するのが現実解。完全な統合はまだない(2026年5月時点)。

Q5. AIが「読んだ」と言っても本当に読んでない?

「読んだ」の主張と実行時の挙動は別物。診断方法(本記事 §2)で実行レベルの認識を確認するのが確実。