CLAUDE.md を1つ書いたことはあるけど、複数の置き場所や読み込み順までは意識してない人向け
料理ブログのような1つのプロジェクトで、応答の口調みたいな個人の好みと、画像置き場のようなチーム共有規約と、特定フォルダだけのルールを、それぞれ別ファイルに分けて同時に効かせたい場面で使う。「プロジェクト用を書いたら個人用が消えるのでは」という不安を解消したいときに、置き場所ごとの役割と読み込み順を整理するのに役立つ。
CLAUDE.md は1つだけ、という思い込みで止まっている人が多い場所です。実は置ける場所が4つあって、しかも見つかった分は全部つなげて Claude に渡されます。「個人用に1個、プロジェクト用に1個、フォルダ専用に1個」を同時に効かせられる、という話がこのページの中身です。
そもそも CLAUDE.md って何?という人は、先に CLAUDE.md(クロード・エムディー)のページを見てください。ここは「複数のファイルがどう重なるか」だけに集中します。
噛み砕くと
新しい職場に「全社共通のルールブック」「自分の部署のルール」「自分のデスクのメモ」が別々に貼ってある状態を想像してください。あなたは出社したら3枚とも全部読みます。どれか1枚が他の2枚を消すわけではない。全部足し算で頭に入る。CLAUDE.md の重なり方はこれと同じです。
ここがいちばん大事な勘違いポイントです。「プロジェクト用の CLAUDE.md を書いたら個人用が上書きされて消える」と思っている人が多い。違います。両方そのまま Claude に渡ります。
足し算なんですね。
だからこそ、4つの置き場所を「どれか1つ選ぶ」のではなく「役割で使い分けて同時に置く」のが正解になります。全社共通の縛りは組織管理用に、個人の好みは自分専用に、チーム規約はプロジェクト用に、というふうに。
大事な前提:「上書き」ではなく「全部つなげる」
公式ドキュメントはこう書いています。All discovered files are concatenated into context rather than overriding each other. 訳すと「見つかったファイルは全部つなげて Claude に渡される。お互いを上書きするのではない」。
つまり優先度の高いファイルが低いファイルを「消す」仕組みはありません。全部生きています。
ひとつだけ注意があります。もし2つのファイルで真逆の指示を書くと、公式いわく if two rules contradict each other, Claude may pick one arbitrarily. = Claude がどちらか一方を勝手に選びます。片方が自動で無効になるのではなく「両方読んだ上で、矛盾してたらどっちか選ぶ」挙動です。だから矛盾する指示は最初から書かないのが安全です。
「料理ブログ」を例に、実際にどう重なるかを見る
cooking-blog という料理ブログのプロジェクトを例に、CLAUDE.md を3か所に置いて、起動したときに何が読まれるかを順に追います。頭の中で再現できるよう、置き場所も書きます。
ステップ1: 自分専用の好みを置く(User)
まず全プロジェクト共通の自分の好みを ~/.claude/CLAUDE.md に置きます。~ は自分のホームフォルダのことです。
~/.claude/CLAUDE.md
---
- 応答は日本語で
- コードのインデントは半角スペース2個
ここは料理ブログに限らず、どのプロジェクトを触っても効く個人設定です。
ステップ2: チーム共有のプロジェクト規約を置く(Project)
次にプロジェクトのトップに ~/projects/cooking-blog/CLAUDE.md を置きます。ここにはチーム全員で守るルールを書きます。
~/projects/cooking-blog/CLAUDE.md
---
- レシピは Markdown で書く
- 画像は images/ フォルダに置く
このファイルはバージョン管理に乗せて、変更履歴ごとチームに配る前提です。だから「自分だけの好み」はここに書きません。
ステップ3: フォルダ専用のルールを置く(サブフォルダ)
さらに、レシピを置く recipes フォルダの中だけに効くルールを ~/projects/cooking-blog/recipes/CLAUDE.md に置きます。
~/projects/cooking-blog/recipes/CLAUDE.md
---
- このフォルダは1レシピ1ファイル
- ファイル名は料理名のローマ字
ここで初心者がやりがちな勘違いがあります。「下のフォルダに置いたんだから当然効くだろう」と思いがちですが、このファイルは起動した瞬間には読まれません。後で説明します。
ステップ4: cooking-blog で Claude を起動する
では cooking-blog フォルダに移動して、Claude Code を起動します。
$ cd ~/projects/cooking-blog
$ claude
この瞬間、ステップ1の User とステップ2の Project の CLAUDE.md が連結されて、両方そのまま効きます。「応答は日本語で」も「レシピは Markdown で」も、両方生きています。上書きされていません。
ステップ5: 読まれる順番を知る
連結される順番は決まっています。公式は「広い範囲が先、起動したフォルダに近い方が後」と書いています。原文は content is ordered from the filesystem root down to your working directory. で、一番外側の階層から、起動フォルダへ向かって順に並びます。
各フォルダの中では、CLAUDE.md の後ろに CLAUDE.local.md が足されます。公式の言い方では CLAUDE.local.md is appended after CLAUDE.md です。だから自分専用のメモが、そのフォルダで一番最後に読まれます。
ステップ6: recipes のファイルを触ると初めて効く
ステップ3で置いた recipes フォルダの CLAUDE.md は、起動時にはまだ読まれていません。Claude が recipes フォルダの中のファイルを実際に開いたとき、初めて連結されます。公式の言葉では they are included when Claude reads files in those subdirectories. です。
確認には /memory を使います。今のセッションで何が読み込まれているかを一覧で出してくれます。「書いたルールが効かない」と思ったら、まずこれで読まれているか見るのが早いです。
/memory
/memory(メモリー)のページも合わせてどうぞ。
つまり CLAUDE.md Hierarchy は何をしてくれるのか
- やってくれる: 4つの置き場所に置いた CLAUDE.md を、全部足し算でつなげて読み込む。組織管理・個人・プロジェクト・自分専用と、役割で分けて同時に効かせられる
- やってくれない: 優先度の高いファイルで低いファイルを上書きして消すこと。全部生きているので、矛盾した指示を書くと Claude がどちらか勝手に選ぶ
- 意味が薄い場面: 個人で1人、フォルダも浅い小さなプロジェクト。置き場所を分ける必要がなく、プロジェクトのトップに1個あれば足りる
4つの置き場所と、それぞれの役割
公式が並べている4つを、広い範囲から狭い範囲の順で並べます。広い方が先に読まれて、狭い方が後に読まれます。
1. 組織管理(Managed policy)
会社の情報システム部門が全社員に配る、組織全体の指示です。置き場所はOSごとに決まっています。macOS は /Library/Application Support/ClaudeCode/CLAUDE.md、Windows は C:\Program Files\ClaudeCode\CLAUDE.md、Linux と WSL では etc フォルダの下の claude-code フォルダに置く CLAUDE.md です(階層でいうと etc → claude-code → CLAUDE.md の順)。
これは公式いわく Loads before user and project CLAUDE.md で、個人やプロジェクトより先に読まれます。さらに This file cannot be excluded by individual settings. = 個人の設定では除外できません。会社のセキュリティ方針やコンプライアンス要件を、全員に確実に効かせるための枠です。
2. 個人用(User)
あなた個人の、全プロジェクト共通の好みです。置き場所は ~/.claude/CLAUDE.md。「応答は日本語で」「自分のショートカット」みたいな、どのプロジェクトでも効かせたい設定をここに書きます。
3. プロジェクト用(Project)
チームで共有するプロジェクトの規約です。置き場所は ./CLAUDE.md または ./.claude/CLAUDE.md。プロジェクトの構成、コーディング規約、よくある作業の流れなどを書いて、バージョン管理でチームに配ります。
4. 自分専用のプロジェクト設定(Local)
同じプロジェクトでも「自分だけ」に効かせたい設定です。置き場所は ./CLAUDE.local.md。自分のテスト用URLや、好みのテストデータなどを書きます。これはチームに配りたくないので .gitignore に入れる前提です。
このローカル用は廃止されていません。現役です。公式も For private per-project preferences that shouldn't be checked into version control = バージョン管理に乗せたくない自分専用の設定向け、と現役で案内しています。
使いどころ3シナリオ
シナリオ1: 料理ブログを1人で作っていて、口調だけ全プロジェクト共通にしたい
cooking-blog を1人で運営していて、Claude の応答は全部日本語がいいとします。これを cooking-blog のプロジェクト用 CLAUDE.md に書くと、別のプロジェクトに移った瞬間に効かなくなります。口調みたいな個人の好みは、個人用の ~/.claude/CLAUDE.md に書くのが正解です。次に家計簿アプリを作り始めても、応答は日本語のまま。プロジェクトを増やすたびに同じ設定を書き直さずに済みます。
シナリオ2: チームで料理ブログを作っていて、自分のテスト環境URLだけ隠したい
cooking-blog をチーム3人で開発していて、画像置き場のルールはチーム共有したい。でも自分のローカルのプレビューURLは他人に配りたくない。この場合、チーム規約はプロジェクト用の ~/projects/cooking-blog/CLAUDE.md に書いてバージョン管理で共有し、自分のURLは自分専用の ~/projects/cooking-blog/CLAUDE.local.md に書いて .gitignore に入れます。2つは連結されて自分の手元では両方効くのに、チームには規約だけが配られます。
シナリオ3: 既存プロジェクトを GitHub からコピーしてきたら、知らない CLAUDE.md がいっぱい効いた
大きなモノレポをコピーしてくると、上の階層に他チームの CLAUDE.md がいくつもあって、自分の作業に関係ない指示まで連結されることがあります。このときは claudeMdExcludes という設定で、特定の CLAUDE.md をスキップできます。ただし組織管理の CLAUDE.md だけは除外できません。公式も Managed policy CLAUDE.md files cannot be excluded. とはっきり書いています。
@path で別ファイルを取り込める
CLAUDE.md は @path/to/import という書き方で、別のファイルを取り込めます。長くなった CLAUDE.md を整理して、テーマごとに別ファイルに分けたいときに使います。
# Additional Instructions
- git workflow @docs/git-instructions.md
場所の指定は2通り使えます。「今いる場所からの道順」と「一番上からの完全な道順」の両方です。注意したいのは、前者の基準が「起動フォルダ」ではなく「取り込みを書いたファイルの場所」だということ。公式は Relative paths resolve relative to the file containing the import, not the working directory. と書いています。
取り込んだファイルがさらに別ファイルを取り込む、という入れ子もできます。ただし深さの上限は5回までです。公式の言い方では with a maximum depth of five hops。6段目はたどりません。
そしてここが見落とされがちなんですが、取り込みで分けてもトークンの消費は減りません。公式は Splitting into @path imports helps organization but does not reduce context, since imported files load at launch. = 分割は整理のためで、消費は減らない、とはっきり書いています。読み込まれる中身は結局全部、起動時に context に入るからです。
節約目的だと思って分けると、肩透かしを食らいます。
ちなみに複数の作業コピー(worktree)で個人設定を共有したいときは、ホームフォルダのファイルを取り込むと便利です。@~/.claude/my-project-instructions.md のように書きます。
外部ファイルを初めて取り込むときは承認ダイアログが出ます。ここで断ると、その後は無効のままで、ダイアログは二度と出ません。公式も If you decline, the imports stay disabled and the dialog does not appear again. と書いています。「取り込んだのに効かない」ときは、過去に一度断っていないか疑ってください。
1ファイル200行が目安
サイズの目安も公式に書いてあります。target under 200 lines per CLAUDE.md file. Longer files consume more context and reduce adherence. = 1ファイル200行未満を目標に。長いほどトークンを食って、指示が守られにくくなります。
ここで混同しやすい点を1つ。CLAUDE.md は長さに関係なく全文が読み込まれます。公式の言い方では CLAUDE.md files are loaded in full regardless of length。「200行未満が目安」は推奨であって、200行を超えたら勝手に切られるわけではありません。
これは自動メモ(MEMORY.md)のルールとは別物です。自動メモは最初の200行か25KBだけ読まれますが、CLAUDE.md は全文ロードです。同じ200という数字でも意味が違うので、ごっちゃにしないでください。
初心者が踏みやすい落とし穴
- 「プロジェクト用を書いたら個人用が上書きされて消える」と思っている。消えません。全部つなげて両方効きます。これがこのページの最大の誤解ポイントです。
- 矛盾した指示を別ファイルに書いてしまう。両方読まれた上で、Claude がどちらか勝手に選びます。片方が自動で勝つルールはないので、最初から矛盾させないこと。
- サブフォルダに置いた CLAUDE.md が起動時に効かない。起動フォルダより下のフォルダの CLAUDE.md は、Claude がそのフォルダのファイルを読んだとき初めて効きます。「下に置いたのに効かない」はだいたいこれです。
- 読まれる順を逆に覚えている。上の階層が先、起動フォルダに近い方が後です。自分専用の CLAUDE.local.md は各フォルダで一番最後に読まれます。
- 取り込みで分ければトークンが節約できると思っている。減りません。分けても全部起動時に読み込まれます。整理目的ならアリ、節約目的ならナシ。
- 過去に取り込みの承認ダイアログを断ったのを忘れている。一度断つと無効のまま、ダイアログも二度と出ません。「取り込みが効かない」ときの定番の原因です。
- 200行の意味を自動メモと混同する。CLAUDE.md は長さ無関係で全文ロード、自動メモ(MEMORY.md)は最初の200行か25KBだけ。別ルールです。
- AGENTS.md を置けば読まれると思っている。Claude Code は AGENTS.md を直接読みません。すでにある場合は CLAUDE.md から
@AGENTS.mdで取り込むか、シンボリックリンクで結びます。 - /compact のあとサブフォルダのルールが消えたと焦る。プロジェクトのトップの CLAUDE.md は会話を圧縮しても再読込されて生き残ります。サブフォルダの入れ子の CLAUDE.md は自動では再注入されず、次にそのフォルダのファイルを読んだとき復活します。
書き方
~/.claude/CLAUDE.md(個人用) / ./CLAUDE.md(プロジェクト用) / ./CLAUDE.local.md(自分専用) / 組織管理用(OSごとの決まった場所)
やってみるとこうなる
入力
cd ~/projects/cooking-blog && claude (cooking-blog で起動すると User と Project の CLAUDE.md が連結されて両方効く)
出力例
/memory を叩くと、今のセッションで読み込まれている CLAUDE.md・CLAUDE.local.md・rules ファイルの一覧が表示される。recipes フォルダのファイルを開くまで recipes/CLAUDE.md は一覧に出てこない(起動時には読まれず、そのフォルダのファイルを読んだとき初めて連結されるため)。
このページに出てきた言葉
- 連結(concatenate)
- 複数ファイルの中身を上から順につなげて1つにすること。CLAUDE.md は見つかった分が全部つながって Claude に渡される
- context
- Claude がそのセッションで覚えている内容のかたまり。CLAUDE.md はここに読み込まれる
- ホームフォルダ(~)
- パソコンで自分のユーザー名がついた一番上の自分専用の置き場所。先頭の <code>~</code> でそこを指す
- サブフォルダ
- 起動したフォルダより下にある内側のフォルダ。起動時には読まれず、そのフォルダのファイルを読んだとき初めて CLAUDE.md が効く
- .gitignore
- バージョン管理(GitHub など)に乗せたくないファイル名を書いておく一覧。CLAUDE.local.md はここに入れる前提
- import(@path)
- 別ファイルの中身をその場所に取り込んで一緒に読み込ませる書き方。最大5回まで入れ子にできるが、トークン消費は減らない
- トークン
- Claude が文章を処理するときの文字数のかたまりの単位。読み込む量が多いほど処理が重くなり、指示も守られにくくなる
- モノレポ
- 複数のプロジェクトを1つの巨大なフォルダにまとめて管理するやり方。上の階層に他チームの CLAUDE.md が混ざりやすい