同じ設定を2か所に書いたとき、どれが勝つか
同じキーを2か所に書いたとき、どちらが効くか。
上書きされると思っていると外すものが2つあります。 リストは合成されることと、下の段が勝つキーがあることです。
段は5つ
上から順に。上の段が、同じキーを下の段より優先します。
| どこ | 何 | |
|---|---|---|
| 1 | 管理設定 | 組織が配る managed-settings.json / MDM / サーバ管理設定 |
| 2 | コマンドライン | --settings などの起動時のフラグ。そのセッションだけ |
| 3 | .claude/settings.local.json |
そのプロジェクトの、あなた個人の設定 |
| 4 | .claude/settings.json |
そのプロジェクトの、チームで共有する設定 |
| 5 | ~/.claude/settings.json |
全プロジェクトに効く、あなた個人の設定 |
3 が 4 より上なのが要点です。
チームの共有設定で決められた値は、settings.local.json で自分だけ戻せます。
チームの設定を書き換えずに済みます。
管理設定には勝てません。--settings でも勝てませんし、
--model も組織が許したモデルの中からしか選べません。
リストは上書きされない。合成される
permissions.allow のようなリストのキーは、
複数のファイルに書くと、どれか1つが選ばれるのではなく足し算になります。
// ~/.claude/settings.json
"permissions": { "allow": ["Bash(npm run *)"] }
// .claude/settings.json(チームの共有設定)
"permissions": { "allow": ["Bash(git commit *)"] }
// → 実際に効くのは両方
これは「消せない」ということでもあります。
下の段のファイルから、上の段が足したエントリを取り除くことはできません。
外したいなら deny を使うか、そのファイルを直します。
例外が4つ
モデル関係の4キーは合成されません。
| キー | どうなるか |
|---|---|
fallbackModel |
順序に意味があるので、定義した最上位のファイルの値をそのまま採る |
modelPicker |
行を混ぜない。管理設定 / --settings / ユーザ設定の最上位から採り、プロジェクトとローカルでは無視 |
availableModels |
管理設定が定義していればそのまま適用し、下の追加は無視。管理設定どうしでも合成しない |
modelSettings |
モデル1つずつ解決する(effortLevel と一緒に) |
環境変数は段ではない
環境変数はこの5段に入りません。 キーごとに、どちらが読まれるかが決まっています。
ANTHROPIC_MODEL |
どのファイルの model よりも優先 |
ANTHROPIC_DEFAULT_MODEL |
どのファイルも model を設定していないときだけ |
同じ「モデルを決める変数」でも、片方は勝ち、片方は譲ります。 対になっているキーごとに確かめてください。
設定ファイルの中に書いた env ブロックは、ふつうのキーとして5段に従います。
下の段が管理設定に勝つキーが7つある
安全に関わるキーでは、より厳しい値を下の段から拾います。
| キー | 拾われる値 |
|---|---|
disableClaudeAiConnectors |
どの段からでも true |
enableArtifact |
どの段からでも false(disableArtifact: true も同様) |
isolatePeerMachines |
どの段からでも true |
remoteControlAtStartup |
.claude/settings.json か settings.local.json からの false |
crossSessionInbound |
accept < hold < refuse のより厳しい側(プロジェクト / ローカルから) |
useAutoModeDuringPlan |
管理設定 / --settings / ユーザ設定 / ローカルからの false |
syncClaudeAiSkills |
同上 |
方向が1つではありません。 ゆるめる方向には効かないので、
remoteControlAtStartup にプロジェクトから true を書いても無視されます。
useAutoModeDuringPlan と syncClaudeAiSkills は、
共有の .claude/settings.json からの false だけ無視されます(ローカルからは効く)。
enableArtifact は戻せません。 一度どこかで false になったら、
管理設定からでも Artifact は戻りません。
効かないときに見るところ
/status # どのファイルが読まれたか
claude doctor # 解決後の設定と、スキップされたルール
原因は3つに分かれます。
- 上の段が同じキーを設定している — 上の表のとおり
- そのファイルからは設定できない値 —
permissions.defaultModeのautoとbypassPermissionsは、プロジェクトとローカルからは効きません (v2.1.257 より前は、どのファイルからでもbypassPermissionsが効いていた) - そのキーが、そのファイルのスコープ外 — 223個中71個がこれに当たります
3つ目の全一覧はこちらです。
https://quintetkit.github.io/reference/claude-code-settings-scope.html
検査する
「そのファイルからは効かないキー」は機械で見つけられます。
npx @quintetkit/ccheck
warn .claude/settings.json:12
`defaultMode: bypassPermissions` does not take effect from project or local settings.
why: https://code.claude.com/docs/en/settings-reference
優先順位そのものは検査していません。 どのファイルが読まれるかは実行時に決まり、 手元のファイルだけでは分からないからです。分からないものは判定しません。
出典
https://code.claude.com/docs/en/settings
2026-09-04 に取得したスナップショットを元にしています。