目次
Claude Code に「CLAUDE.md を読んだか?」と確認すると「はい、読みました」と返ってくる。それでも数ターン後には、そこに書いてあるはずのルールが守られていない——プロジェクト固有のコマンド、コミットメッセージのルール、デプロイ手順、すべてどこかに消えていく。
これは Claude Code 特有の問題ではない。Cursor の .cursor/rules、GitHub Copilot の .github/copilot-instructions.md、Codex CLI の AGENTS.md でも、長く使っているうちに同じ現象が起きる。
本記事では、AIエージェントが .md 形式のルールファイルを無視する 根本原因5つ を整理した上で、即効性のある書き換えテクニックから、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エージェント別 ルール設計のコツ
共通の鉄則は 「短く・具体的に・優先度を明示」。ファイル名や置き場所はツールにより異なるが、書き方の原則は同じだ。
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)で実行レベルの認識を確認するのが確実。