Claude Codeの設定をどこに書けばいいか迷っている人向け
Claude Codeの設定をチームに配りたいのか自分だけにとどめたいのか分からなくなったとき。プロジェクトの .claude/ に置けばgitで共有、ホームの ~/.claude/ に置けば個人専用、と置き場所で振り分けるために、まず CLAUDE.md と settings.json をどっちのフォルダに作るか決める。
Claude Codeを使っていると、設定や指示を書く場所が一気に増えます。CLAUDE.mdに書くもの、settings.jsonに書くもの、自分だけの好みを書くもの。どれをどこに置くと「チーム全員で共有される」のか、どれを置くと「自分のパソコンだけにとどまる」のか、最初は本当に迷います。
その地図になるのが .claude フォルダです。置いた場所そのものが「共有か個人か」を決める仕組みになっていて、フォルダの位置を覚えるだけで設定の行き先が読めるようになります。
噛み砕くと
会社の机を想像すると分かりやすいです。チーム共有の棚(誰でも開ける)と、自分のロッカー(自分しか開けない)の2つがある状態だと思ってください。
Claude Codeの設定も同じで、置き場所が2つあります。プロジェクトの中の .claude/ は「チーム共有の棚」で、ここに入れたものはgitに入れればチーム全員に配られます。一方、自分のホーム(パソコンの自分用の場所)にある ~/.claude/ は「自分のロッカー」で、どのプロジェクトを開いても自分にだけ効きます。
同じファイル名でも、どっちの棚に置くかで意味が変わる。ここが最初の山場です。
大事な前提:このフォルダは「2つある」と知らないと迷子になる
多くの人が .claude は1つだけだと思い込みます。実際は、プロジェクトごとの .claude/ と、パソコン全体に効く ~/.claude/ の2階建てです。
公式ドキュメントの定義をそのまま借りると、Claude Codeは指示・設定・skills・subagents・自動メモを「プロジェクトのフォルダ」と「ホームの ~/.claude」の両方から読み込みます。そしてプロジェクト側のファイルをgitに入れればチームと共有でき、~/.claude の中身は全プロジェクトに効く個人専用の設定だと書かれています。
つまり、置く場所=効く範囲。これだけ先に頭に入れておくと、あとの話が全部つながります。
「料理ブログ」を例に、共有と個人を置き分ける手順を見る
ここからは料理ブログのプロジェクトを例にします。チーム3人で運営していて、共通ルールはみんなに配りたいけど、自分の作業を楽にする設定は自分だけに留めたい、というよくある状況です。
ステップ1: プロジェクトのルールを CLAUDE.md に書く
まずプロジェクトの一番上(ルート)に CLAUDE.md を作ります。ここには「レシピ記事は見出しを必ず手順番号つきにする」「公開前に画像のalt文を確認する」みたいな、チーム全員に守ってほしい約束ごとを書きます。
# 料理ブログ 運営ルール
## 記事の決まり
- 手順は番号つきリストにする
- 完成写真には必ずalt文をつける
このファイルはgit共有(committed)扱い。gitに入れればチーム全員のセッションで毎回読み込まれます。
ステップ2: ツールの許可を settings.json で決める
次に .claude/settings.json です。ここはClaude Codeが「実際に守らせる」設定で、どのコマンドを実行してよいか、どのタイミングで自分のスクリプトを走らせるかを書きます。
料理ブログなら「ビルド用のコマンドは確認なしで通す」みたいな許可をここに置きます。これもgit共有なので、チーム全員に同じ許可が配られます。
{
"permissions": {
"allow": ["Bash(npm run build *)"]
}
}
ステップ3: 自分だけの上書きを settings.local.json に逃がす
ここが今回の主役です。私はローカルでDockerも使いたいけど、チームの全員が使うわけではない。こういう「自分だけ足したい許可」は .claude/settings.local.json に書きます。
このファイルはgit管理外(gitignored)に自動でなります。だから自分のパソコンにだけ残って、チームには配られません。中身の書き方は settings.json と同じJSON形式です。しかも settings.local.json は、自分で編集できる設定ファイルの中で一番強い。同じスカラー(1つの値)設定を settings.json と両方に書くと settings.local.json 側が勝ちます。ただし組織が配る managed 設定と、起動時に渡す指定には負けます。
{
"permissions": {
"allow": ["Bash(docker *)"]
}
}
同じ許可の話なのに、共有したいものは settings.json、自分だけのものは settings.local.json。置き分けの感覚がつかめてきます。
ステップ4: ここで初心者がやりがちな勘違い
「.claude/ の中身は全部gitで共有されるんでしょ?」と思い込んで、自分のDocker許可を settings.json に書いてしまう人が多いです。そうするとチーム全員にその許可が配られてしまいます。
共有したくない個人設定は settings.local.json 側。これは自動でgit管理外になるので、git共有(committed)とgit管理外(gitignored)はファイル単位で分かれていると覚えておくと安全です。
ステップ5: 全プロジェクト共通の好みは ~/.claude/ に置く
「料理ブログだけじゃなく、自分が触る全部のプロジェクトで返事は簡潔にしてほしい」みたいな個人の好みは、ホームの ~/.claude/CLAUDE.md に書きます。
ここはどのプロジェクトを開いても効く自分専用の場所で、git共有されることは一切ありません。料理ブログのプロジェクトを離れて別の仕事に移っても、この好みはついてきます。
ステップ6: 自動メモは触らずに置いておく
最後に ~/.claude/projects/<プロジェクト名>/memory/MEMORY.md。ここはClaudeが「このプロジェクトのビルドは45秒くらいかかる」みたいな気づきを自分で書きためていく自動メモです。
自分で作る必要はありません。Claudeが書いて、Claudeが維持します。中身を消したり直したりはできますが、基本は放っておいて大丈夫です。
つまり .claude Directory は何をしてくれるのか
- やってくれる: 置いた場所で「チーム共有か、自分だけか」を自動で振り分ける。プロジェクトの
.claude/なら共有、ホームの~/.claude/なら個人 - やってくれない: ファイルを勝手に作ってはくれない。ほとんどの人が触るのは
CLAUDE.mdとsettings.jsonだけで、rules/ や skills/ は必要になったら自分で足す - 意味が薄い場面: 一人で全プロジェクトを回していて、チームに配る相手がいないとき。共有か個人かの区別の旨味は薄れ、ホームの
~/.claude/にまとめるだけで足りることも多い
共有か個人か:2つの置き場所の対比
2階建ての地図を表にすると、迷ったときの早見表になります。
| 置き場所 | 効く範囲 | git共有されるか | 主な中身 |
|---|---|---|---|
プロジェクトの .claude/ |
このプロジェクトだけ | される(settings.local.json だけ例外で管理外) | CLAUDE.md / settings.json / skills/ / agents/ / rules/ |
ホームの ~/.claude/ |
自分が触る全プロジェクト | 一切されない(個人専用) | 個人版の CLAUDE.md / settings.json / keybindings.json / 自動メモ |
ほかにも rules/(話題ごとの指示)や output-styles/(返事の見せ方)などが両方の場所に置けますが、まずはこの2列の感覚だけ押さえれば十分です。
やりたいこと別:どのファイルに書くか
公式の「Choose the right file」を、料理ブログの場面に当てはめて並べ直しました。
| やりたいこと | 書く場所 | 共有 / 個人 |
|---|---|---|
| プロジェクトの約束ごとを伝える | CLAUDE.md |
共有・個人どちらも可 |
| 特定のコマンドを許可する / 止める | settings.json の permissions |
共有・個人どちらも可 |
| 自分だけの上書きをgitに入れたくない | settings.local.json |
個人(git管理外)+settings.json より優先 |
/名前 で呼ぶ機能を足す |
skills/<名前>/SKILL.md |
共有・個人どちらも可 |
| 専用の作業役を定義する | agents/*.md |
共有・個人どちらも可 |
| 外部ツールにMCPで繋ぐ | .mcp.json |
プロジェクトのみ |
同じ名前でも挙動が違う:CLAUDE.md と settings.json
ここは公式が一番ていねいに書いている、断定を間違えやすい場所です。プロジェクト側とホーム側で同じファイル名が並ぶせいで「合体して読まれる」と思い込みがちですが、2つは挙動が逆です。
settings.json は設定の型しだいで挙動が変わる。permissions.allow のような配列(リスト)の設定は、ホーム側もプロジェクト側も足し合わさって両方効きます。一方 model のようなスカラー(1つの値)の設定は「より具体的な側が勝つ」形で、プロジェクトの指定がホームの指定に勝ちます。料理ブログのモデル指定をプロジェクト側で決めればホーム側の指定は負けますが、許可リストは両方分が合わさる、というわけです。
CLAUDE.md は「両方読まれる」。こちらは上書きでも足し算でもなく、ホームのCLAUDE.mdとプロジェクトのCLAUDE.mdが両方ともそのまま読み込まれて文脈に入ります。指示がぶつかったときだけプロジェクト側が優先されます。
「settings.jsonは型しだい。リストは足し算、1つの値は具体的な側が勝つ。CLAUDE.mdは両方読む」。ここを押さえておけば事故りません。
ちなみに、もっと上の優先順位もあります。組織が配る managed-settings.json はすべてに優先して上書きできない設定で、起動時に渡す --permission-mode や --settings といった指定はそのセッションの settings.json を上書きします。
初心者が踏みやすい落とし穴
.claudeは1つだと思っている。プロジェクトの.claude/(チーム共有)と、ホームの~/.claude/(個人・全プロジェクト)の2つがあります。場所で効く範囲が変わります。.claude/の中は全部gitで共有されると思っている。settings.local.jsonは自動でgit管理外(gitignored)になります。ファイルごとに「共有」「管理外」の別があると覚えてください。- settings.json はプロジェクトとホームが合体して読まれると思っている。
permissions.allowのような配列(リスト)設定は全スコープ分が足し合わさって両方効き、modelのようなスカラー(1つの値)設定は具体的な側が勝ちます。具体的な側とはプロジェクト>ホームの順で、さらに settings.local.json が最優先です。リストと1つの値で挙動が分かれます。CLAUDE.md はまた別で、ホームとプロジェクトの両方がそのまま読み込まれます。 - 全ファイルを自分で作らないといけないと思っている。ほとんどの人が触るのは
CLAUDE.mdとsettings.jsonの2つだけ。rules/ や skills/ や agents/ は必要になったら足せばよく、最初から全部作る必要はありません。 - managed-settings.json も
.claude/の中だと思っている。あれは組織が強制する上書き不可の設定で、.claude/の外(システム側)にあります。 - 自動メモも自分で書くと思っている。
~/.claude/projects/<プロジェクト名>/memory/MEMORY.mdはClaudeが自分で書いて維持します。自分で作る必要はありません。 - Windowsには
~/.claudeが無いと思っている。Windowsでは~/.claudeは%USERPROFILE%\.claudeとして扱われます。CLAUDE_CONFIG_DIRという設定を渡すと、このページの~/.claudeの場所すべてがその下に移ります。 - 個人の好みをプロジェクト側に書いてしまう。「自分だけの好み」は CLAUDE.local.md(自分で作って手動でgit管理外にする)か、ホームの
~/.claude/CLAUDE.mdへ。プロジェクトの CLAUDE.md に書くとチームに配られます。
書き方
あなたのプロジェクト/
├─ CLAUDE.md # git共有:毎セッション読まれる指示
├─ .mcp.json # git共有:チーム共有のMCP接続先
└─ .claude/
├─ settings.json # git共有:許可・hooks・設定値
├─ settings.local.json # git管理外:自分だけの上書き
├─ skills/ agents/ rules/ output-styles/
~/.claude/ ← 個人・全プロジェクト共通(git共有されない)
├─ CLAUDE.md settings.json keybindings.json
└─ projects/<プロジェクト名>/memory/MEMORY.md # 自動メモ
やってみるとこうなる
入力
# 料理ブログのプロジェクトで、チーム共有の許可を書く
# .claude/settings.json(git共有)
{
"permissions": { "allow": ["Bash(npm run build *)"] }
}
# 自分だけ足したいDocker許可は別ファイルへ
# .claude/settings.local.json(git管理外)
{
"permissions": { "allow": ["Bash(docker *)"] }
}
出力例
settings.json はチーム全員に配られ、settings.local.json は自分のパソコンにだけ残ります。permissions.allow のような配列(リスト)の設定は settings.json(共有)と settings.local.json(個人)の許可が足し合わさって両方効き、model のようなスカラー(1つの値)の設定は settings.local.json 側が最終的に勝ちます。CLAUDE.md だけは挙動が別で、ホーム側とプロジェクト側の両方がそのまま読み込まれます。
このページに出てきた言葉
- プロジェクトの .claude/
- プロジェクトの中に作るフォルダ。中身をgitに入れればチーム全員に配られる、チーム共有用の置き場所
- ホームの ~/.claude/
- パソコンの自分用の場所にあるフォルダ。どのプロジェクトを開いても自分にだけ効く、個人専用の置き場所。git共有されない
- git共有(committed)
- そのファイルをgitに入れて、チーム全員に配る状態。公式ではcommittedと表示される
- git管理外(gitignored)
- gitの記録から外して共有しない設定。自分のパソコンにだけ残る。<code>settings.local.json</code> は自動でこれになる
- 上書きの優先順位(precedence)
- 同じ項目を複数の場所で設定したとき、どれが最終的に勝つかの順番。<code>settings.json</code> はプロジェクトがホームを上書きする
- settings.json と CLAUDE.md の違い
- <code>settings.json</code> は項目ごとにプロジェクトがホームを上書き。<code>CLAUDE.md</code> は逆で両方とも読み込まれる
- 自動メモ(auto memory)
- <code>~/.claude/projects/<プロジェクト名>/memory/MEMORY.md</code> にClaudeが自分で書いて維持するメモ。自分で作る必要はない
- managed-settings.json
- 組織が配って強制する、個人では上書きできない設定。<code>.claude/</code> の外(システム側)にある
- CLAUDE_CONFIG_DIR
- 起動時に渡せる設定値。これを指定すると <code>~/.claude</code> の場所すべてがその下に移る。Windowsでは <code>~/.claude</code> は <code>%USERPROFILE%\.claude</code> になる