この記事で解決できること
CLAUDE.md を書いたのに Claude の振る舞いが変わらない——そういう詰まり方をしているときに確認すべき3つの原因と、その直し方。
環境: Claude Code(日常運用) / .claude/ ディレクトリにスキル・フックを設置済み
原因1: CLAUDE.md が長くなりすぎて後半のルールが読み飛ばされる
症状
CLAUDE.md の後半に書いたルール(禁止事項・注意事項など)が守られない。ファイルの前半のルールは有効。
原因
Claude は長いプロンプトを全部等しく読むわけではありません。コンテキストが長くなるほど、後半に書かれた内容の影響力は相対的に弱くなります。
解決方法
関心の違うルールは別ファイルに切り出して @import で参照する。
# CLAUDE.md(冒頭)
@AGENTS.md
# メインルール(本当に毎回必要なものだけ)
...
たとえば「Next.js の破壊的変更への注意」は AGENTS.md に移し、CLAUDE.md の冒頭で @AGENTS.md と1行書く。コンテキスト量が絞られ、残ったルールの効き目が上がる。
判断基準: CLAUDE.md が 80 行を超えていたら別ファイルへの切り出しを検討する。
原因2: .claude/skills/ に置いたスキルが呼ばれない
症状
スキルファイルを作っても Claude が自動で使ってくれない。
原因
スキルはデフォルトで受動的です。Claude がそのスキルを「今使うべき」と判断するためには、明示的なトリガー条件が必要です。スキルファイルを置くだけでは動きません。
解決方法
二段構えで書く:
- スキルファイル側: frontmatter または冒頭にトリガー条件を書く(「いつ呼ばれるか」「何をするスキルか」)
- CLAUDE.md 側: 「〇〇する前に publish-gate スキルを必ず invoke する」と明記する
# CLAUDE.md の例
- 記事を公開する前に `publish-gate` skill を必ず invoke すること
スキルファイルとCLAUDE.md の両方に記載すると確実に呼ばれる。
原因3: 「〜しない」という禁止指示が特定の状況で無視される
症状
「〇〇しない」「〇〇は禁止」と書いたのに、特定の操作やフロー変化でスルーされる。
原因
禁止形は、コンテキストが変わると境界が曖昧になりやすいです。「しない」という指示は「何かの条件下でのみ有効か」が伝わりにくい。
解決方法
条件付き許可形に書き直す。
# 禁止形(効きにくい)
実差分がない場合は published にしない。
# 条件付き許可形(効きやすい)
published にするのは、実差分があり かつ push が origin/main に landing した場合のみ。
それ以外は skipped または planned に戻す。
「何をしてよいか」の正の条件を明記するほうが安定します。
判断基準: 「〜しない」という禁止が5個以上ある場合、条件付き許可形への書き直しを試す。
まとめ: 3パターンの確認チェックリスト
CLAUDE.md の指示が通らないと感じたら、まずこの3点を確認:
- CLAUDE.md が 80 行以上になっていないか?(→ 別ファイルへの切り出し)
- スキルを置いたあとCLAUDE.md に「いつ呼ぶか」を書いたか?(→ 両方に記載)
- 禁止形の指示が多くないか?(→ 条件付き許可形に書き直す)
どれも「書いた内容は正しい。でも効かない」という詰まり方に対応しています。構文の問題でなく、どこに何を書くか・どう書くかの設計問題です。
元記事では実際のCLAUDE.md / AGENTS.md 構成の全体像と、各スキルのトリガー設計例も載せています → https://www.masatoman.net/articles/claude-md-design-stuck-patterns-2026?utm_source=qiita&utm_medium=referral&utm_campaign=dist-syndication&utm_content=claude-md-design-stuck-patterns-2026