CLAUDE.md はどこに置くと読まれるのか、ルート・サブディレクトリ・CLAUDE.local.md・--add-dir の違い
Claude Code が CLAUDE.md を読む場所とタイミングを整理します。起動時の上位方向の探索、サブディレクトリの CLAUDE.md が遅れて読まれる仕組み、Git 管理外の CLAUDE.local.md、--add-dir の CLAUDE.md を読ませる環境変数を解説します。
目次
CLAUDE.md を書いたのに効いていない気がする。その原因の大半は内容ではなく「置いた場所が、いま読み込まれる場所ではない」ことです。Claude Code が CLAUDE.md を読む場所は 1 つではなく、読まれるタイミングも場所ごとに違います。
結論として、起動時に読まれるのは「カレントディレクトリから上」にある CLAUDE.md と ~/.claude/CLAUDE.md です。カレントより下のサブディレクトリのものは Claude がそのディレクトリのファイルを扱ったときに読まれ、--add-dir で追加した場所のものは既定では読まれません。
KEY POINT
この記事で分かること
- 起動時に読まれる CLAUDE.md と、あとから読まれる CLAUDE.md の違い
- モノレポでルートと各パッケージに何を書くか
- 自分だけのメモを Git に入れずに読ませる CLAUDE.local.md
--add-dirで追加したディレクトリの CLAUDE.md を読ませる環境変数/contextと/memoryの使い分け
読み込まれる場所とタイミングの一覧
| CLAUDE.md の位置 | 読み込まれるタイミング | Git 管理 |
|---|---|---|
~/.claude/CLAUDE.md(ユーザー用) | セッション開始時 | しない |
カレントディレクトリとその上位(リポジトリのルートまで)の CLAUDE.md または .claude/CLAUDE.md | セッション開始時 | する |
リポジトリのルートの CLAUDE.local.md | セッション開始時 | しない |
カレントより下のサブディレクトリの CLAUDE.md | Claude がそのディレクトリ内のファイルを読む・編集するとき | する |
--add-dir や permissions.additionalDirectories で追加した場所の CLAUDE.md | 既定では読まれない。環境変数で有効化すると開始時 | 場所による |
用語解説
上位方向の探索: Claude Code は起動ディレクトリから親ディレクトリをたどって CLAUDE.md を探します。そのため、リポジトリのどこで起動してもルートの CLAUDE.md は必ず読まれます。CLAUDE.md と .claude/CLAUDE.md の両方を同じ階層に置くと二重に読まれるので、どちらか一方にします。
サブディレクトリの CLAUDE.md はいつ読まれるか
リポジトリのルートで claude を起動すると、ルートの CLAUDE.md は最初から読まれますが、packages/api/CLAUDE.md は Claude が packages/api/ 配下のファイルに触れた時点で読み込まれます。逆に packages/api/ の中で起動すれば、packages/api/CLAUDE.md とルートの CLAUDE.md の両方が最初から読まれます。
この仕組みを使うと、モノレポでルートに共通事項、各パッケージに固有事項を置けます。web の作業中に api のマイグレーション手順がコンテキストを占有することがなくなります。
リポジトリ/
├── CLAUDE.md # 全体方針、共通コマンド、全パッケージ共通の規約
├── CLAUDE.local.md # 自分だけのメモ(Git 管理外)
├── packages/
│ ├── api/
│ │ └── CLAUDE.md # API 固有: DB マイグレーションの手順、禁止事項
│ └── web/
│ └── CLAUDE.md # フロント固有: コンポーネント規約、スタイルの方針
└── docs/
ルートの CLAUDE.md の例:
## 共通コマンド
- 全体のテスト: `pnpm -r test`
- Lint: `pnpm lint`
## 共通規約
- パッケージ間の依存は `packages/shared` 経由。相互 import は禁止
- 各パッケージの詳細は packages/*/CLAUDE.md を参照
packages/api/CLAUDE.md の例:
## このパッケージ
- テスト: `pnpm --filter api test`(Docker の DB が必要: `docker compose up db`)
- マイグレーションは `prisma/migrations/` に新規ファイルを追加する。既存ファイルは変更しない
サブディレクトリの CLAUDE.md を先に読ませたい場合は、指示の最初に「packages/api/CLAUDE.md を読んでから始めて」と伝えるか、そのディレクトリで起動します。ルートとサブディレクトリで逆の指示があると挙動が不安定になるので、サブディレクトリには追加情報だけを書き、ルートの規約を上書きしないようにします。
サブディレクトリの CLAUDE.md もコンテキストを消費する
一度読み込まれた内容はセッション中ずっとコンテキストに残ります。複数パッケージを横断する作業では各パッケージの CLAUDE.md が順に積み上がるので、それぞれを短く保ってください。
CLAUDE.local.md に自分だけのメモを書く
チームで共有する CLAUDE.md に、自分のローカル環境の DB 名や個人的な TODO を書くわけにはいきません。そうした「自分だけが Claude に伝えたいこと」の置き場所が CLAUDE.local.md です。リポジトリのルートに置くと CLAUDE.md と一緒に自動で読み込まれます。
| 項目 | CLAUDE.md | CLAUDE.local.md | ~/.claude/CLAUDE.md |
|---|---|---|---|
| 効く範囲 | このプロジェクトの全員 | このプロジェクトでの自分 | 自分の全プロジェクト |
| Git 管理 | する | しない | しない |
| 書く内容 | 規約、コマンド、変更禁止 | ローカル環境の情報、進行中の作業、個人の好み | 全プロジェクト共通の自分の好み |
書く内容の例:
## ローカル環境
- DB は Docker の `pg-local` コンテナ(ポート 5433)。`docker compose up db` で起動
- 開発サーバーは 3001 番ポートで動かしている(3000 は別プロジェクトが使用中)
## 自分の作業メモ
- 現在 `feature/billing` ブランチで請求機能を実装中
- `src/legacy/` は近く削除予定なので新規コードを追加しない
チームの規約と矛盾する内容は書かないでください。「チームは A、自分は B」という指示が両方読まれると挙動が不安定になります。CLAUDE.local.md には、CLAUDE.md にない情報の追加だけを書くのが安全です。
Git 管理から外れているかは必ず確認してください。Claude Code が自動で除外していなければ、リポジトリの .gitignore に手で追加します。個人用の権限設定 settings.local.json も同じ扱いです(settings.json と settings.local.json の役割分担)。
CLAUDE.local.md
.claude/settings.local.json
秘密情報は書かない
Git 管理外であっても、API キーやパスワードは CLAUDE.local.md に書かないでください。ファイルの内容は毎セッション API に送信されます。接続情報が必要なら環境変数名だけを書き、値は環境変数に置きます。
--add-dir で追加したディレクトリの CLAUDE.md は読まれない
共通の設定やドキュメントを別リポジトリに置き、claude --add-dir ../shared-config で参照させる構成はよくあります。ところが shared-config/CLAUDE.md に書いた指示は効きません。--add-dir(セッション内なら /add-dir)は追加の作業ディレクトリとしてファイルの読み書きを許可するだけで、公式ドキュメントは追加ディレクトリからは「ほとんどの .claude/ 設定が検出されない」と明記しています。settings.json の permissions.additionalDirectories も役割は同じで、ファイルアクセスの付与であって CLAUDE.md の読み込みではありません。
読み込ませたい場合は、環境変数 CLAUDE_CODE_ADDITIONAL_DIRECTORIES_CLAUDE_MD を設定して起動します。
CLAUDE_CODE_ADDITIONAL_DIRECTORIES_CLAUDE_MD=1 claude --add-dir ../shared-config
このとき読み込まれるのは、追加ディレクトリ直下の CLAUDE.md、.claude/CLAUDE.md、.claude/rules/*.md、CLAUDE.local.md(--setting-sources で local を除外していると読まれない)です。環境変数ページではこの変数を「CLAUDE.md を探す追加ディレクトリのコロン区切りリスト(Windows は ; 区切り)」と説明し、メモリのページの例は =1 を付けて --add-dir と組み合わせています。どちらの形でも動くかは公式ドキュメントでは確認できなかったため、まずは公式例どおり =1 と --add-dir の組み合わせで試し、効かなければディレクトリのパスを値に指定してください。
毎回シェルで指定するのが面倒なら、settings.json の env に書きます。
{
"env": {
"CLAUDE_CODE_ADDITIONAL_DIRECTORIES_CLAUDE_MD": "1"
},
"permissions": {
"additionalDirectories": ["../shared-config/"]
}
}
追加ディレクトリの CLAUDE.md は信頼できるものだけにする
追加ディレクトリの CLAUDE.md は、そのディレクトリを管理している人が書いた指示をそのまま Claude に渡します。clone してきた他人のリポジトリを --add-dir で追加してこの環境変数を有効にすると、意図しない指示が入り込む余地があります。共有設定リポジトリなど、内容を自分たちが管理しているものに限ってください。
共有したい指示が短いなら、環境変数を使わず自分の CLAUDE.md から @../shared-config/rules.md のインポート記法で取り込む方が単純です(CLAUDE.md に追記する方法と @ インポート)。
どの CLAUDE.md が効いているかを確認する
/contextを実行すると Memory files の一覧に、その時点で読み込み済みのファイルが並びます。サブディレクトリの CLAUDE.md は、該当ディレクトリのファイルを扱う前は一覧に出ないのが正常です/memoryはメモリファイルの場所の一覧を表示し、選ぶとエディタで開きます。読み込み済みかどうかではなく、どこに何があるかを見るコマンドです
読み込まれないときは、ファイル名が大文字小文字を含めて CLAUDE.md になっているか、CLAUDE.md と .claude/CLAUDE.md の両方に置いていないか、サブディレクトリならまだそのディレクトリに触れていないだけではないか、の順に確認します。
関連する記事
CLAUDE.md に何を書くべきかと分量の目安は親記事の CLAUDE.md の書き方 と CLAUDE.md の長さの目安 を参照してください。パスごとに適用する指示を分けたいなら .claude/rules のパス限定ルール が使えます。コンテキストの節約全般は Claude Code のコンテキスト管理 にまとめています。
まとめ
- 起動時に読まれるのはカレントディレクトリから上の CLAUDE.md と
~/.claude/CLAUDE.md。下位のものはそのディレクトリのファイルを扱うときに読まれる - モノレポではルートに共通事項、各パッケージに固有事項を置き、サブディレクトリはルートと矛盾させない
- 自分だけのメモはルートの
CLAUDE.local.mdに書き、Git 管理から外す。秘密情報は書かない --add-dirとpermissions.additionalDirectoriesはファイルアクセスを付けるだけ。CLAUDE.md を読ませるにはCLAUDE_CODE_ADDITIONAL_DIRECTORIES_CLAUDE_MDを設定し、信頼できるディレクトリに限る- 読み込み状況は
/contextの Memory files で確認する
よくある質問
- サブディレクトリの CLAUDE.md は起動時に全部読み込まれますか?
- いいえ。起動時に読まれるのはカレントディレクトリから上位に向かって見つかる CLAUDE.md です。下位ディレクトリのものは、Claude がそのディレクトリ内のファイルを扱うときに読み込まれます。
- CLAUDE.local.md はどこに置きますか?
- プロジェクトの CLAUDE.md と同じ場所(リポジトリのルート)に置きます。チームと共有しない自分だけのメモ用で、Git 管理から外します。
- --add-dir で追加したディレクトリの CLAUDE.md は自動で読まれますか?
- いいえ。既定では追加ディレクトリのメモリファイルは読み込まれません。環境変数 CLAUDE_CODE_ADDITIONAL_DIRECTORIES_CLAUDE_MD を設定すると読み込まれます。
- どの CLAUDE.md が効いているか確認するには?
- 対話中に /context を実行すると Memory files の一覧に読み込み済みのファイルが並びます。/memory はメモリファイルの場所の一覧と編集に使います。
参考にした一次情報
この記事は公式ドキュメントを基に AI が下書きを作成し、運営者が内容を確認して公開しています。誤りを見つけた場合は お問い合わせからお知らせください。