【Claude Code】CLAUDE.md運用のベストプラクティス:失敗しないための7つの原則
Claude Code のパフォーマンスを最大化する鍵は、実は CLAUDE.md の設計にあります。
しかし、「なんとなく情報を詰め込んでいるだけ」になってしまってはいないでしょうか?
良かれと思ってルールを増やしすぎた結果、かえって AI の混乱を招き、指示が無視される――。
これは多くの開発者が直面する「コンテキスト汚染」の典型例です。
この記事では、そんな「悪い CLAUDE.md」と「良い CLAUDE.md」の違いを整理しながら、LLMの研究やコンテキストエンジニアリングの観点に基づいた、現場で使える書き方・設計のポイントをまとめます。
🚨 なぜ多くの CLAUDE.md は失敗するのか
よくある失敗パターンは次のようなものです。
- 情報量が多すぎて、LLM が処理しきれない 🤯
- 実務に関係ない「好みのコードスタイル」まで全部詰め込んでいる
-
/initなどで自動生成した、誰もメンテしない長文ドキュメントになっている
LLM は一度に安定して扱える「ルールの数」に限界があります。指示が増えれば増えるほど、守られない指示が出てきてしまいます。
「なんか最近 Claude の精度が悪いな...」と思ったら、まず CLAUDE.md を疑ってみる価値がありますよ!
📏 原則1: CLAUDE.md は「小さく・絞って」書く
📉 行数と情報量の目安
推奨されるのは、 できるだけ小さい CLAUDE.md です。
- 目安は 300 行以下
- 指示としては 150〜200 個程度 に収める
これ以上増やしても、人間にとっても LLM にとっても扱いにくく、重要な情報が埋もれがちです。
LLM のコンテキストウィンドウは、人間の 「作業メモリ(ワーキングメモリ)」 に似ています。不要な情報でメモリを埋め尽くしてしまうと、本当に重要なタスクに割けるリソースが減り、推論能力の低下を招きます。これを「コンテキストエンジニアリング」の視点で最適化することが重要です。
🤖 /init や自動生成に頼りすぎない
Claude に「このリポジトリから CLAUDE.md を作って」と指示して自動生成させると、冗長でノイズの多いドキュメントになりやすいです。
結果として「全部書いてあるけど、どれも守られない」という状態になりがちなので、 /init ベースの生成は基本的に避けたほうがよい、とされています。
🎨 原則2: コードスタイルはツールに任せる
CLAUDE.md に次のような内容を書いていないでしょうか?
- インデントは 2 スペースにして
- シングルクオートを使って
- import 順序はこうしてほしい
こうした「フォーマット・スタイル」の指示は、Lint や Formatter、Git hooks(pre-commit / post_tool_use など)で機械的に強制する方が確実です。
CLAUDE.md に載せるべきなのは、「スタイル」ではなく 「プロジェクト固有の知識・罠・運用ルール」 です。
💎 原則3: すべてのプロジェクトに共通で入れるべき3要素
どんなプロジェクトでも、有効に機能しやすいのは次の 3 つです。
1. プロジェクトを一行で説明する
Claude がリポジトリ全体を読む前に、 一発で全体像が掴める一文 があると、タスク理解がぐっと安定します。
2. 日常的によく使うコマンド
ここに書くのは「頻繁に使うもの」に絞ります。
- アプリの起動・ビルド・テスト・Lint
- よく使うスクリプト(DB マイグレーションなど)
記述例:
## Commands
- 開発サーバー: `pnpm dev`
- テスト: `pnpm test`
- Lint: `pnpm lint`
- Prisma マイグレーション: `pnpm prisma migrate dev`
これだけでも、Claude が「どうやってローカルで動かすか」「CI が何をしているか」を正しく推測しやすくなります。
ここでのポイントは、単に禁止事項を並べるのではなく、 「トリガー(いつ)」と「アクション(何をするか)」 をセットで記述することです。
-
× 悪い例:
schema.prismaの直接編集は禁止。 -
○ 良い例:
schema.prismaを変更したいときは、必ずschema/*.prismaを編集してからpnpm build:schemaを実行すること。
人間の新メンバーに「最初に知っておいてほしいことリスト」を渡すイメージで、Claude にもその 地雷マップ を共有してあげましょう。具体的な行動指示(Actionable)にすることで、遵守率が劇的に向上します。
📂 原則4: 情報は「段階的に開示」する
CLAUDE.md にすべてを書ききる必要はありません。
むしろ、詳細な情報(DB スキーマ、API 一覧、ビジネスルールなど)は別ファイルに分け、Claude には「必要になったら読ませる」方がうまくいきます。
| 種類 | ファイルパス例 |
|---|---|
| DB スキーマ | docs/schema.md |
| API ドキュメント | docs/api.md |
| 複雑なドメインルール | docs/domain-rules.md |
CLAUDE.md には、これらの場所と概要だけを書いておき、タスクに応じて追加のファイルを開かせる、という「 progressive disclosure(段階的開示) 」の設計が推奨されます。
🧠 原則5: Claude が指示を無視する理由を理解する
Claude Code のシステムメッセージには、「 CLAUDE.md の文脈はタスクと無関係な場合がある」という前提が含まれています。
そのため、Claude は状況によって CLAUDE.md の一部を意図的に無視することがあります。
さらに LLM は、入力の先頭と末尾をより強く重み付ける傾向があります。
-
先頭: システムメッセージ +
CLAUDE.mdの冒頭 - 末尾: 直近のユーザープロンプト
この特性を踏まえると、 本当に守ってほしいことは CLAUDE.md の冒頭に書く のが効果的です。
「IMPORTANT」「Read this first」などで明示的に強調するのも有効ですよ!
💾 原則6: CLAUDE.md は「長期記憶」として扱う
Claude Code を使っていると、動作が不安定になったときに /clear コマンドで会話履歴をリセットすることがあります。
このとき、チャットログ(短期記憶)は消えますが、CLAUDE.md (長期記憶)は読み直されます。
- 短期記憶(Chat Log): タスクごとに使い捨てられる。不安定になりやすい。
- 長期記憶(CLAUDE.md): 常に維持される唯一の拠り所。
「毎回同じことを説明しているな」と感じたら、それは短期記憶にしか情報がない証拠です。すぐに CLAUDE.md という 長期記憶 に書き込みましょう。これにより、セッションをリセットしても賢い状態を即座に復元できます。
🌱 原則7: CLAUDE.md は「生きたドキュメント」として育てる
CLAUDE.md は一度書いて終わりの静的なドキュメントではなく、開発とともに育てていくべきです。
例えば、次のようなタイミングでアップデートしていきます。
- Claude が誤ったフレームワークや API を選んでしまった
- 開発中に新しい「罠」や注意点に気づいた
- ワークフローやコマンドが変わった
「AI が何度も同じミスをしている」と感じたら、その都度 CLAUDE.md に一行追加するぐらいの軽さで、継続的にメンテするのが理想ですね。
🏠 原則8: 置き場所とスコープ設計
Claude Code は、プロジェクトルートだけでなく、親ディレクトリ・サブディレクトリの CLAUDE.md も自動で探索します。
これを利用すると、モノレポなどで次のような構成にできます。
- リポジトリルート: 全体共通のルール・方針
- 各パッケージ配下: そのサービス固有のルール・罠
さらに、個人用の設定はリポジトリにはコミットせず、 claude.local.md に書いて .gitignore に入れる運用も紹介されています。
すべてのプロジェクトに共通する「自分の好み」は、ホームディレクトリの ~/.claude に書いておくことで、全セッションに適用できます。
✅ まとめ: 良い CLAUDE.md のチェックリスト
最後に、手元の CLAUDE.md を見直すときのチェックリストを置いておきます。
- 300 行以内、指示は 150〜200 個程度に収まっているか
-
/initなどの自動生成頼みになっていないか - コードスタイルやフォーマットの好みを書いていないか(Lint / Formatter に任せているか)
- 冒頭に「プロジェクトの一行説明」があるか
- よく使うコマンドだけが整理されているか
- プロジェクト特有の「罠」「注意点」がトリガーと行動(If X, then Y)形式で書かれているか
-
詳細情報は docs 配下などに分離し、
CLAUDE.mdでは場所だけ案内しているか - 本当に重要なルールは冒頭に書かれているか
-
/clearしても失われない「長期記憶」として必要な情報が網羅されているか - 直近の開発で気づいたことが反映されているか
このあたりを満たしていれば、「AI にとっても人間にとっても読める CLAUDE.md」になっているはずです。
ぜひ、あなたのプロジェクトの CLAUDE.md も見直してみてくださいね!🚀
Discussion