Claude Codeの仕組み講座(講師のためのエンジニア水準)
区分4 安全と設定★★settings.json は、許可ルール(No.13)、フック(No.10)、使うモデル、環境変数(プログラムに渡す設定値)などを書く設定ファイルです。
書き方は JSON という形式({ } の中に「項目名: 値」を並べる)です。
CLAUDE.md との違いを、先に押さえます。
| 読む主体 | 性質 | |
|---|---|---|
| CLAUDE.md | AI(読んで考える) | お願い |
| settings.json | Claude Code 本体(そのまま実行する) | 鍵・設定 |
たとえ話にします。 CLAUDE.md が口頭の指示書、settings.json がシステムの設定画面です。
この講座では、いま開いているフォルダを「作業場」と呼びます。公式の説明では「プロジェクト」です。 設定は、誰に効くかで置き場所を分けます。この「効く範囲」を、この講座では「範囲」と呼びます(公式の言葉はスコープです)。
| 階層 | 場所 | 誰に効くか |
|---|---|---|
| 管理(組織) | 管理者が配る設定(managed-settings.json、端末管理=会社が社員のパソコンをまとめて管理する仕組み、claude.ai の管理画面) |
組織の全員 |
| ユーザー | ~/.claude/settings.json |
自分の、全部の作業場 |
| 作業場(共有) | .claude/settings.json |
その作業場に関わる全員(git に入れて共有する) |
| ローカル | .claude/settings.local.json |
自分の、その作業場だけ |
選び方の考え方は、「誰に効かせたいか」です。
git は、ファイルの変更履歴を管理する道具で、共有するフォルダは git で管理します(公式の言葉ではリポジトリ)。
ローカルの設定ファイルは、Claude Code が git の共有の対象外にしてくれます。手で作った場合は、.gitignore(git に共有させないファイルを書いておくファイル)に自分で書き足します。
「今後は聞かない」を選ぶと、Claude Code 自身がローカルの設定ファイルに allow ルールを書き足すので、自分で書いていないのに設定が増えていることがあります。
同じ項目が複数の階層にある時は、強い階層の値が使われます。 強い順は、次のとおりです。
claude --settings で、その会話だけ)つまり、「近い物が勝つ」で、一番上は組織です。 管理設定は、ユーザーや作業場の設定、起動時の指定でも上書きできません。
同じ名前の物が複数の範囲にある時の強さの順番は、機能ごとに違います。 講師が混乱しやすいので、ここに1つの表にまとめます(強い順)。
| 機能 | 強い順 | 気をつける点 |
|---|---|---|
| 設定 | 管理 → 起動時の指定 → ローカル → 作業場 → ユーザー | 作業場が自分より強い |
| スキル | 管理(組織) → 自分(ユーザー) → 作業場 | 設定とは逆で、自分が作業場より強い |
| サブエージェント | 管理 → 起動時の指定 → 作業場 → ユーザー → プラグイン | 設定と同じく、作業場が自分より強い |
| MCP(道具を出すサーバーの接続) | ローカル → 作業場 → ユーザー → プラグイン → claude.ai のコネクタ | 管理者が決めた物は、これらより上 |
| フック(決まった場面で自動で動く処理) | 範囲の順ではなく、許可の判定の中で決まる。フックの deny は他より優先、allow は deny のルールを越えられない(No.10) | 詳しくは No.10 |
| プラグイン | 名前に「プラグイン名:」が付くので、同名でも競合しない | スキルとサブエージェントは、プラグインのものも両方使える |
なぜこの順になっているかは、公式には書かれていません。「機能ごとに決まっている」と覚えてください。
特に紛らわしいのが「ローカル」です。
設定の「ローカル」は、作業場の中の .claude/settings.local.json です。MCP の「ローカル」は、自分のホームフォルダにある ~/.claude.json に、その作業場の分として保存されます。名前は同じでも、別の物です。
環境変数は、この階層の一員ではありません。項目ごとに、どちらが先かが決まっています。
たとえば、シェルで設定した ANTHROPIC_MODEL は、どの設定ファイルの model よりも先に使われます。一方、ANTHROPIC_DEFAULT_MODEL は、どのファイルにも model が無い時だけ使われます(どちらも使うモデルを決める環境変数です)。
許可の一覧(permissions.allow など)のようなリストの項目は、上書きでなく合体します。
各ファイルが、他のファイルの項目を消さずに足せます。
ここで、No.13 の知識がつながります。 deny は、どの階層にあっても、allow より先に調べられます。 ユーザーが allow した物を、作業場が deny すれば止まります。 その逆(ユーザーの deny を、作業場の allow で解除する)はできません。
つまり、「単純な値は強い階層が勝つ」「リストは合体し、deny は最強」と分けて覚えます。
管理設定が最上位ですが、「より厳しい値なら、下の階層の指定も採用する」項目が少しだけあります。
たとえば、作業場の外のファイルを読めなくする設定(permissions.blockReadsOutsideWorkingDirectories)は、どの階層で true にしても有効になります。
これは安全側に倒すための例外で、細かい一覧は公式を引けば足ります。
○ 数字・項目名は2026年10月時点の公式。設定の項目は版で増えます
○ よくある勘違い:「作業場の設定が、自分のユーザー設定を消す」→ ×。リストは合体します。単純な値だけが、強い階層で上書きされます
○ 関係する単元:No.13 許可ルール、No.10 フック
/status:読み込まれた設定の置き場所の一覧(Setting sources の行)が出ます。管理設定が効いているかも、ここで分かります/permissions:許可ルールの全体と、各ルールがどの設定ファイルから来ているかが出ます。「なぜ止まったか」「なぜ通ったか」の調査の入口です/config:テーマなどの個人の設定を、画面から選んで変えます。変えた内容は、ユーザー設定ファイルに保存されます。全部の項目が出るわけではありませんclaude doctor:読み込めなかった項目(書き間違い)の一覧が出ます/status は「どのファイルを読んだか」までで、設定の項目ごとの出所までは示しません(許可ルールの出所は /permissions で見えます)。
設定ファイルは厳密な JSON です。
// のコメントや、最後の項目の後ろのカンマは、書き間違いとして扱われます。起動時に「Settings Error」が出ます。
つまずきやすい点が3つあります。
.claude/settings.json の許可ルールは、初めて開いた時の「信頼しますか」の確認を済ませてから有効になります。deny は、制限するだけなので確認を待たずに効きますdefaultMode: "auto")は、作業場の設定ファイル(共有もローカルも)に書いても効かない。公式にそう決められていて、理由は書かれていません。ユーザー設定に書きますやり方は、AIに頼めば足ります。
頼み方の例:「この作業場の .claude/settings.json に、npm test(テストを動かすコマンド)を許可するルールを足して」。
書き換える前に、どの階層(誰に効かせたいか)かを一緒に決めるのがコツです。
講師としては、自分の ~/.claude/settings.json を1回開いて読んでおくと、説得力が出ます。
鍵(APIキーなど、外のサービスを使うための合言葉)のような秘密は、共有される作業場のファイルには書きません。
○ 受講生によく聞かれる質問:「チームと自分の設定が食い違った。どっちが勝つ?」
→ 値なら、作業場(共有)よりローカルが強いので、自分だけの上書きはローカルに書けます。許可の一覧なら合体します。ただし deny は最強です
○ 受講生によく聞かれる質問:「設定を変えたのに、効いていない」
→ /status で読み込み元を確認し、claude doctor で書き間違いを探します。より強い階層(特に管理)で決まっていることもあります
○ 受講生によく聞かれる質問:「許可を聞かなくなったのは、いつから?」
→ 「今後は聞かない」を選ぶと、ローカルの設定ファイルに allow が増えます。/permissions で出所が見えます
○ 講義で使えるたとえ:会社の規程集。就業規則(管理)、部署の決まり(作業場)、自分のメモ(ローカル)、本人の標準(ユーザー)。会社の規程が一番上
○ 関係する単元:No.13 許可の判定順
誰に効かせたいかで置き場所を選ぶ。強さは、管理 → 起動時 → ローカル → 作業場 → ユーザー。リストは合体し、deny は最強。見るのは /status と /permissions。
問1 「自分の全部の作業場で、毎日使うフックを入れたい」。どこに書きますか?
問2 ユーザー設定と作業場(共有)の設定で、モデルの指定が違っています。どちらが使われますか?
問3 ユーザー設定で Bash(npm *) を allow にし、作業場の設定で Bash(npm publish *) を deny にしました。npm publish は?
問4 「なぜこの操作は聞かれずに通ったのか」を調べたいです。最初に見るのは?
出典:Claude Code 公式ドキュメント「Settings files and precedence」(https://code.claude.com/docs/en/settings)「Configure permissions」(https://code.claude.com/docs/en/permissions)「Choose a permission mode」(https://code.claude.com/docs/en/permission-modes)。強さの比較表は「Skills」(https://code.claude.com/docs/en/skills)「Subagents」(https://code.claude.com/docs/en/sub-agents)「MCP」(https://code.claude.com/docs/en/mcp)。2026年10月13日に確認