はじめに
最近、Claude Code を本格的に使い始めました。
使っていくうちに、プロジェクトルートに CLAUDE.md を置くと Claude がそれを読み込んでくれることを知り、「これは便利だ」と感動したのですが、ふと疑問が浮かびました。
「サブディレクトリにも CLAUDE.md を置いたら、どうなるの?」
モノレポのように複数のパッケージが存在するプロジェクトでは、ルートに共通ルールを書きつつ、各パッケージ固有の指示も出したいことがあります。でも、サブディレクトリの CLAUDE.md が読み込まれるのか、読み込まれるとしたらどういう優先順位なのか、ドキュメントを見てもパッと分かりませんでした。
そこで実際に調べてみたので、その結果を共有します。
結論:親もサブディレクトリも、両方読み込まれる
先に結論を書いておくと、親ディレクトリとサブディレクトリの両方に CLAUDE.md がある場合、両方とも読み込まれます。
ただし、読み込まれるタイミングが異なります。
読み込みの仕組み
親方向の読み込み(起動時)
Claude Code を起動すると、現在のワーキングディレクトリから親ディレクトリに向かって再帰的に CLAUDE.md を検索します。見つかったファイルはすべて読み込まれ、セッション開始時にコンテキストに含まれます。
/Users/coa/projects/myapp/ ← ここで起動
├── CLAUDE.md ← 読み込まれる
└── ...
/Users/coa/projects/
├── CLAUDE.md ← これも読み込まれる
└── ...
サブディレクトリの読み込み(オンデマンド)
一方、サブディレクトリの CLAUDE.md は起動時には読み込まれません。
Claude がそのサブディレクトリ内のファイルを読むタイミングで、初めて統合されます。これはコンテキストウィンドウを効率的に使うための設計だと思われます。
myapp/
├── CLAUDE.md ← セッション開始時に読み込み
├── frontend/
│ ├── CLAUDE.md ← frontend/ のファイルを読む時に追加
│ └── app.ts
└── backend/
├── CLAUDE.md ← backend/ のファイルを読む時に追加
└── server.ts
この構成の場合:
-
セッション開始時:
myapp/CLAUDE.mdが読み込まれる -
frontend/app.tsを読む時:frontend/CLAUDE.mdが追加で統合される -
backend/server.tsを読む時:backend/CLAUDE.mdが追加で統合される
frontend の作業をしている間は backend の CLAUDE.md は読み込まれないので、不要な指示でコンテキストが圧迫されないというわけです。賢い。
優先順位
CLAUDE.md だけでなく、Claude Code には複数の「メモリ」の種類があり、それぞれ優先順位があります。
| 優先度 | メモリの種類 | 場所 | 対象 |
|---|---|---|---|
| 1 | 管理ポリシー |
/Library/Application Support/ClaudeCode/CLAUDE.md (macOS) |
組織全体 |
| 2 | プロジェクトメモリ |
./CLAUDE.md または ./.claude/CLAUDE.md
|
チーム共有 |
| 3 | プロジェクトルール | ./.claude/rules/*.md |
モジュール化された指示 |
| 4 | ユーザーメモリ | ~/.claude/CLAUDE.md |
個人(全プロジェクト共通) |
| 5 | プロジェクト個人用 | ./CLAUDE.local.md |
個人(プロジェクト固有) |
上位の階層のファイルが先に読み込まれて基礎となり、下位のファイルがそれに積み重ねられる形で統合されます。
競合する指示がある場合は、より具体的(下層)な指示が優先されます。
活用例
モノレポでの使い分け
モノレポだとこんな構成が便利そうです。
monorepo/
├── CLAUDE.md # 共通のコーディング規約・チームルール
├── packages/
│ ├── web/
│ │ └── CLAUDE.md # React/Next.js 固有の指示
│ ├── api/
│ │ └── CLAUDE.md # バックエンド固有の指示(使用フレームワークなど)
│ └── shared/
│ └── CLAUDE.md # 共有ライブラリのルール
ルートの CLAUDE.md には「TypeScript を使う」「コミットメッセージは日本語で」といった共通ルールを書き、各パッケージの CLAUDE.md にはそのパッケージ固有の技術スタックや注意点を書く、という使い方ができます。
個人設定との組み合わせ
チーム開発では、こんな使い分けも良さそうです。
-
~/.claude/CLAUDE.md: 個人の好み(言語設定、好みのコーディングスタイルなど) -
プロジェクトの
CLAUDE.md: チーム共通のルール -
CLAUDE.local.md: プロジェクト固有の個人設定(.gitignore に入れる)
~/.claude/CLAUDE.md に「日本語で回答してください」と書いておけば、どのプロジェクトでも日本語で応答してくれます。
まとめ
- Claude Code は CLAUDE.md を階層的に読み込む
- 親方向はセッション開始時、サブディレクトリはオンデマンド
- 複数の CLAUDE.md がある場合、より具体的な指示が優先される
- モノレポや個人設定との組み合わせで柔軟に活用できる
階層的に読み込まれることを知っておくと、プロジェクトの規模に応じた柔軟な設定ができるようになると思います。
参考
最後に
株式会社ピュアポムメディアラボ(PML)では、AI を活用した開発支援やプロダクト開発に取り組んでいます。
Claude Code をはじめとする AI ツールを活用した開発に興味のある方、一緒に働きませんか?
- 採用情報・お問い合わせ: https://purpom-media-lab.com/
お気軽にお声がけください。