たとえ話にします。 CLAUDE.md が「社員への口頭の指示書」だとすると、settings.json は「システムの設定画面」です。 CLAUDE.md はAIが読んで考えますが、settings.json はClaude Code本体が読んで、そのまま動きを変えます。
| 誰が読む | 何を書く | |
|---|---|---|
| CLAUDE.md | AI(読んで考える) | 仕事のやり方・決まり |
| settings.json | Claude Code本体(そのまま実行) | 許可・フック・環境変数など |
CLAUDE.md は毎回読まれる決まり。ただしAIへのお願いなので、絶対に外せない事は deny(No.04)かフック(No.06)で仕組みにする。つまり、「お願い」はCLAUDE.md、「必ずこうする」は設定ファイル、と覚えると迷いません。
| 場所 | 効く範囲 | チームへの共有 |
|---|---|---|
~/.claude/settings.json(ユーザー) |
自分の全作業場 | されない |
.claude/settings.json(作業場用) |
その作業場だけ | される(コミット=変更を履歴に記録して共有できる形にすれば) |
.claude/settings.local.json(ローカル) |
その作業場の、自分だけ | されない |
選び方は「自分だけか、この作業場だけか」。毎日どこでも使う物はユーザー、その作業場に限る物は作業場用、自分の例外はローカルです。
同じ項目が複数あると、近い方が勝ちます。強い順に、ローカル → 作業場用 → ユーザーです(この上に、会社が配る「管理設定」と、起動時に渡す指定があります)。
ただし許可の一覧(permissions.allow など)のようなリストは、上書きではなく合体します。足し算になるので、片方を消さずに追加できます。
○ よくある勘違い:「作業場用の設定が自分の設定を消す」→ ×。リストは合体します
○ 関係する単元:No.04 許可と安全装置(許可はここに書かれます)
主に、許可(permissions)・フック(hooks、No.06)・環境変数(env。プログラムに渡す設定値)・使うモデルなどです。書き方はJSON({ } の中に「項目名: 値」を並べる書き方)で、1つ見るだけで十分です。
{
"permissions": { "allow": ["Bash(git status)"] },
"env": { "TZ": "Asia/Tokyo" }
}
「許可」と「環境変数」が1つずつ入っている例です。
あなたの環境では ~/.claude/settings.json にフックなどが入っていて、作業場の .claude/ にも設定があります。まず開いて、どの項目がどこにあるかを眺めるのが最短です。鍵(APIキー。外のサービスを使うための合言葉のような文字列)のような秘密は、作業場の共有ファイルに書きません。
許可の確認で「今後は聞かない」を選ぶと、Claude Code自身が .claude/settings.local.json に許可を書き足します。自分では書いていないのに設定が増えているのは、これです。
自分だけ=ユーザー、この作業場だけ=作業場用、この作業場の自分の例外=ローカル。近い物が勝つ。
問1 「どの作業場でも、毎日自分が使うフックを入れたい」。どこに書く?
問2 ユーザー設定と作業場用の設定で、同じ項目に違う値が書いてあります。どちらが使われる?
出典:Claude Code 公式ドキュメント「Settings files and precedence」(https://code.claude.com/docs/en/settings 、旧 docs.claude.com から移転)/手元の ~/.claude/settings.json の構成