Claude Code settings.json 完全リファレンス 2026|4 階層・permissions・env・hooks の主要フィールド
結論を 1 行で
settings.json は「Claude Code の振る舞いを technical に enforce する」設定の集約場所。 CLAUDE.md(指示・behavioral guidance)と Skill(playbook)の役割を埋める「強制レイヤー」。
Claude Code 公式 docs (settings) より:
"Settings rules are enforced by the client regardless of what Claude decides to do. CLAUDE.md instructions shape Claude's behavior but are not a hard enforcement layer."
つまり「Claude が何を判断しても settings は client 側で強制される」。 4 階層と主要フィールドを押さえれば 8 割カバーできる。
この記事の前提
- 環境: Claude Code v2.x
- 形式: リファレンス型記事(必要時に該当セクションだけ参照する想定)
- 読者の状況: settings.json を散発的に編集してきたが、全フィールドの体系的理解がない
- 筆者の検証環境: monorepo に user / project / local の 3 階層を併用、permissions を多層的に設定
この記事でわかること:
- settings.json の 4 階層と優先順
- permissions の allow / deny / ask の使い分け
- env / hooks / sandbox / model / MCP / auto memory の主要フィールド
- settings.json と CLAUDE.md / Skill / Hook の役割分担
- 個人開発モノレポ向けの最小設計
読者のよくある詰まり
- どの settings ファイルが優先されるか分からない
- permissions の allow / deny / ask が散在して整理つかない
- managed / project / local / user の 4 階層を意識していない
- env / hooks / sandbox がそれぞれ何のためか整理ついていない
- 副作用ある操作(git push / curl / .env 読み取り)の予防策が場当たり的
settings.json の役割と他機能との分担
| 機能 | 役割 | 強制力 |
|---|---|---|
| CLAUDE.md | behavioral guidance(指示) | なし(参考) |
| Skill | playbook(手順書) | なし(参考) |
| settings.json | technical enforcement(強制) | あり |
| Hook | event-driven 自動実行 | あり |
公式:
"Use settings for technical enforcement and CLAUDE.md for behavioral guidance"
設計指針:
- 行動を強制したい → settings.json(permissions / sandbox / hooks)
- 指示として伝えたい → CLAUDE.md
- 手順書として呼び出したい → Skill
- イベントで自動発火したい → hooks(settings.json で定義 or
.claude/hooks/)
4 階層と優先順
配置場所
| 階層 | パス | 共有 | 用途 |
|---|---|---|---|
| Managed | macOS: /Library/Application Support/ClaudeCode/Linux/WSL: /etc/claude-code/Windows: C:\Program Files\ClaudeCode\ | 組織配布 | 企業のセキュリティ・コンプライアンス |
| Project | .claude/settings.json | git 管理 | チーム共有のプロジェクト設定 |
| Local | .claude/settings.local.json | gitignore | 個人のプロジェクト設定 |
| User | ~/.claude/settings.json | 全プロジェクト | 個人グローバル設定 |
優先順
Managed(最高) > CLI flag > Local > Project > User(最低)
- 配列フィールド(
permissions.allow等)は マージ(連結 + 重複排除)。1 階層が他を上書きするのではなく、全階層が合算される - スカラーフィールド(
model等)は優先度の高い階層が勝つ - Managed は 個人設定で上書き不可(組織管理のため)
状態確認
/status
アクティブな設定ソース、エラー、有効な permission 等が一覧表示される。意図と違う動作の時は最初にこれ。
permissions(最重要セクション)
副作用ある操作の予防はここで決まる。
構造
{
"permissions": {
"allow": [
"Bash(npm run lint)",
"Bash(npm run test *)",
"Read(~/.zshrc)"
],
"deny": [
"Bash(curl *)",
"Read(./.env)",
"Read(./.env.*)",
"Read(./secrets/**)"
],
"ask": [
"Bash(git push *)"
],
"defaultMode": "acceptEdits",
"additionalDirectories": ["../docs/"],
"disableBypassPermissionsMode": "disable"
}
}
サブフィールド
| キー | 型 | 説明 |
|---|---|---|
allow | array | 許可するツール操作パターン(ユーザー確認なし) |
deny | array | 拒否するツール操作パターン(実行ブロック) |
ask | array | 都度確認画面を出す |
defaultMode | string | default / acceptEdits / plan / auto / dontAsk / bypassPermissions |
additionalDirectories | array | アクセス可能な追加ディレクトリ |
disableBypassPermissionsMode | string | "disable" で bypass モード無効化 |
allow / deny / ask の使い分け
| ケース | 配置先 | 理由 |
|---|---|---|
| 自分のスクリプト / 読み取り系 / よく使うコマンド | allow | 安全 + 確認の手間が無駄 |
curl 任意URL / .env 読み取り / rm -rf | deny | 事故・漏洩リスクが高い |
git push / 重い処理 / 不可逆操作 | ask | 副作用あるが正当な使用もある |
deny の最低限テンプレ(事故予防)
{
"permissions": {
"deny": [
"Bash(curl http*)",
"Bash(wget *)",
"Read(./.env)",
"Read(./.env.*)",
"Read(./secrets/**)",
"Read(**/*credentials*)",
"Bash(rm -rf *)"
]
}
}
これだけで「秘密情報の意図しない読み取り」「外部 URL への意図しないリクエスト」「破壊的削除」の 3 大事故をかなり予防できる。
env(環境変数)
{
"env": {
"CLAUDE_CODE_ENABLE_TELEMETRY": "1",
"OTEL_METRICS_EXPORTER": "otlp",
"MY_PROJECT_VAR": "value"
}
}
- Claude Code の session に渡される環境変数
- secret はここに書かない(git 管理に入る可能性)→ Local 階層 or 外部から注入
- よく使う設定:
CLAUDE_CODE_ENABLE_TELEMETRY/OTEL_*/ プロジェクト固有の設定
hooks(イベントベース実行)
{
"hooks": {
"session:start": {
"type": "http",
"url": "https://hooks.example.com/start",
"method": "POST"
}
},
"disableAllHooks": false,
"allowManagedHooksOnly": false,
"allowedHttpHookUrls": ["https://hooks.example.com/*"],
"httpHookAllowedEnvVars": ["MY_TOKEN", "HOOK_SECRET"]
}
| キー | 用途 |
|---|---|
hooks | イベント名 → 実行設定(http / shell) |
disableAllHooks | 全 hook 無効化(緊急時) |
allowManagedHooksOnly | Managed 配布の hook のみ実行 |
allowedHttpHookUrls | http hook の URL allow list |
httpHookAllowedEnvVars | hook に渡せる env var の allow list |
主要イベント: session:start / PreToolUse / PostToolUse / Stop / InstructionsLoaded 等。詳細は公式 docs の hooks セクション参照。
sandbox(操作制限)
{
"sandbox": {
"enabled": true,
"failIfUnavailable": true,
"filesystem": {
"allowWrite": ["/tmp/build", "~/.kube"],
"denyWrite": ["/etc"],
"denyRead": ["~/.aws/credentials"],
"allowRead": ["."]
},
"network": {
"allowedDomains": ["github.com", "*.npmjs.org"],
"deniedDomains": ["uploads.github.com"],
"allowUnixSockets": ["~/.ssh/agent-socket"],
"allowLocalBinding": true
},
"excludedCommands": ["docker *"],
"autoAllowBashIfSandboxed": true
}
}
permissions より低レイヤーで OS 操作を制限する。permissions と組み合わせて多層防御。
model / effort
{
"model": "claude-sonnet-4-6",
"availableModels": ["sonnet", "haiku"],
"effortLevel": "high",
"alwaysThinkingEnabled": true,
"language": "japanese"
}
| キー | 用途 |
|---|---|
model | デフォルトモデル |
availableModels | ユーザーが選択可能なモデル |
effortLevel | low / medium / high / xhigh |
alwaysThinkingEnabled | 拡張思考をデフォルト有効化 |
language | 応答言語 |
MCP 関連
{
"enableAllProjectMcpServers": false,
"enabledMcpjsonServers": ["github", "supabase"],
"disabledMcpjsonServers": ["legacy-tool"]
}
| キー | 用途 |
|---|---|
enableAllProjectMcpServers | .mcp.json の全サーバーを自動承認 |
enabledMcpjsonServers | 承認する特定サーバー |
disabledMcpjsonServers | 拒否する特定サーバー |
allowedMcpServers (Managed) | ユーザーが追加可能な MCP の allow list |
deniedMcpServers (Managed) | ブロックする MCP |
auto memory
{
"autoMemoryEnabled": true,
"autoMemoryDirectory": "~/.claude/projects/<project>/memory/",
"cleanupPeriodDays": 30
}
| キー | 用途 |
|---|---|
autoMemoryEnabled | auto memory のオンオフ(v2.1.59 以降) |
autoMemoryDirectory | 保存ディレクトリ(policy / local / user で設定可、project では設定不可) |
cleanupPeriodDays | セッション削除日数 |
CLAUDE.md / プラグイン関連
{
"claudeMdExcludes": [
"**/monorepo/CLAUDE.md",
"/home/user/monorepo/other-team/.claude/rules/**"
],
"enabledPlugins": {
"formatter@acme-tools": true
},
"extraKnownMarketplaces": {
"acme-tools": {
"source": { "source": "github", "repo": "acme-corp/claude-plugins" }
}
}
}
| キー | 用途 |
|---|---|
claudeMdExcludes | 特定 CLAUDE.md ファイルの除外(monorepo 等) |
enabledPlugins | 有効化するプラグイン(plugin@marketplace) |
extraKnownMarketplaces | 追加マーケットプレイス |
strictKnownMarketplaces (Managed) | 組織が承認したマーケットプレイスのみ許可 |
認証・ログイン(Managed 主体)
| フィールド | 用途 |
|---|---|
forceLoginMethod | "claudeai" or "console" |
forceLoginOrgUUID | 特定組織へのログイン強制 |
apiKeyHelper | API キー生成スクリプト(環境変数注入) |
attribution(git commit / PR テンプレ)
{
"attribution": {
"commit": "🤖 Generated with Claude Code\n\nCo-Authored-By: Claude Sonnet <noreply@anthropic.com>",
"pr": "🤖 Generated with Claude Code"
},
"includeGitInstructions": true
}
commit メッセージ末尾と PR description のテンプレートを設定。チームで統一する時に使う。
UI 表示
| キー | 型 | デフォルト |
|---|---|---|
editorMode | "normal" / "vim" | "normal" |
viewMode | "default" / "verbose" / "focus" | "default" |
tui | "default" / "fullscreen" | - |
autoScrollEnabled | boolean | true |
showTurnDuration | boolean | true |
spinnerTipsEnabled | boolean | true |
個人開発モノレポ向けの最小設計
~/.claude/settings.json(user グローバル)
{
"permissions": {
"allow": [
"Bash(git status)",
"Bash(git diff *)",
"Bash(npm test *)",
"Bash(npm run lint)",
"Read(~/.zshrc)"
],
"deny": [
"Bash(curl http*)",
"Read(./.env)",
"Read(./.env.*)",
"Read(./secrets/**)"
],
"ask": [
"Bash(git push *)",
"Bash(rm -rf *)"
]
},
"env": {
"CLAUDE_CODE_ENABLE_TELEMETRY": "0"
},
"model": "claude-sonnet-4-6"
}
<project>/.claude/settings.json(プロジェクト共有、git 管理)
{
"permissions": {
"allow": [
"Bash(npm run dev)",
"Bash(npm run build)",
"Bash(supabase db *)"
]
},
"enableAllProjectMcpServers": false,
"enabledMcpjsonServers": ["github", "supabase"]
}
<project>/.claude/settings.local.json(個人専用、gitignore)
{
"permissions": {
"allow": [
"Bash(node scripts/my-personal-helper.mjs)"
]
}
}
設計のコツ
- 「全プロジェクト共通の安全策」は user に
- 「プロジェクト固有の build / test / MCP」は project に
- 「個人の特殊運用」は local に
- Managed は組織配布があれば組織側で管理(個人は触れない)
ハマりどころ 4 つ
1. allow と deny が衝突する場合の挙動
deny が勝つ。明示的に deny しているものは allow に書いても通らない。「実行を許してはいけない」コマンドは deny に集約。
2. CLI flag が Local より優先
claude --no-sandbox のような CLI flag は CLI > Local > Project > User で勝つ。一時的に上書きしたい時は CLI で、永続化したい時は階層に書く。
3. settings.local.json を git にコミットしてしまう
.claude/settings.local.json は個人専用なので .gitignore への追加を推奨:
.claude/settings.local.json
4. Managed 配布があるのに気づかず設定が効かない
組織配布の Managed settings がある場合、permissions allow を増やしても deny が勝つことがある。/status で「Enterprise managed settings」が出ているか確認。
今日やること(3 つ以内)
/statusで現状確認: アクティブな設定ソース、4 階層のどれが効いているか把握- deny の最低限テンプレ追加:
curl http*/Read(./.env)/Read(./.env.*)を user の deny に - 設定の階層を整理: 「全プロジェクト共通」を user に、「プロジェクト固有」を project に、「個人専用」を local に振り分け
関連記事
Claude Code完全ガイド2026
料金・使い方・他ツールとの使い分けを実運用者が解説
AGENTS.md vs CLAUDE.md|Claude Code 設定ファイルの違いと使い分け 2026
同 Cluster C1:CLAUDE.md / AGENTS.md の判断軸
Claude Code SKILL vs MCP server|役割・使い分け・判断フロー 2026
同 Cluster C2:Skill と MCP の役割分担
Claude Code Skill 設計完全ガイド 2026
同 Cluster C3:Skill の設計思想と落とし穴
【第4回】Claude Code Hooks 完全ガイド
保存時自動整形 / コミット前チェックの実装
【第11回】Claude Code Hooks で事故を防ぐ
git secrets / 本番 DB 保護の実装
Claude Crew Lab Free — 毎月の実験記録をメールで
Claude Code × 個人開発のリアルな事故・発見・SaaS アイデアを毎月第1月曜にお届け。登録で「収益化チェックリスト 15 項目」を無料プレゼント。
個人開発の実験ログを月1回、無料で
失敗 / 実数字 / 仮説 / 次に試すこと。売れた話だけでなく売れなかった理由も共有します。
まとめ
- settings.json は technical enforcement の集約場所、CLAUDE.md(指示)/ Skill(手順書)の隙間を埋める
- 4 階層は Managed > CLI > Local > Project > User、配列はマージ、スカラーは優先度の高い階層が勝つ
- permissions の allow / deny / ask が最重要、deny で事故予防
- env / hooks / sandbox / model / MCP / auto memory が主要フィールド
- 個人開発モノレポは user に共通安全策、project に build/test/MCP、local に個人特殊運用 の 3 階層分担
- 困ったら
/statusで現状確認
settings.json をリファレンスとして手元に置いて、必要な時に該当セクションだけ見返す。AGENTS.md / CLAUDE.md(指示)+ Skill(手順書)+ settings.json(強制)+ Hook(自動実行)の 4 つで Claude Code の運用基盤が完成する。
Stripe ペイウォール完全ガイド — 個人開発で最初の 1 売上を作るプレイブック
設定基盤が固まったら、次は売上を出す段階へ。Stripe 自前ペイウォールの実装テンプレと最初の 1 売上までの全ステップを公開。
この記事が役に立ったらシェア