Settings.json: Claude Code の中央管制
.claude/settings.json (プロジェクト用) と ~/.claude/settings.json (グローバル) で
Claude Code のあらゆる挙動を設定できます。
階層と優先順位
~/.claude/settings.json # ユーザーグローバル
<repo>/.claude/settings.json # プロジェクト共有 (git にコミット)
<repo>/.claude/settings.local.json # プロジェクト個人 (gitignore 推奨)
下の階層が上書き優先。API キーやトークンは local に書くのが安全。
主なトップレベル項目
{
"model": "claude-sonnet-4-6",
"permissions": { ... },
"hooks": { ... },
"mcpServers": { ... },
"env": {
"EDITOR": "code",
"PAGER": "less"
},
"statusLine": { ... },
"plugins": [ ... ]
}
Permissions の書き方
ツールごとに allow / ask / deny をルールで指定できます。
{
"permissions": {
"allow": [
"Read(*)",
"Glob(*)",
"Grep(*)",
"Bash(npm test)",
"Bash(pytest *)",
"Bash(git status)",
"Bash(git diff *)"
],
"ask": [
"Bash(git push *)"
],
"deny": [
"Bash(rm -rf /*)",
"Bash(curl https://*)",
"Edit(.env)",
"Edit(secrets/*)"
]
}
}
マッチャ構文
Read(*)... 任意の引数で許可Bash(pytest *)... 引数のプレフィックスマッチEdit(.env)... 完全一致
移行戦略
- 最初は
askを多めに → 慣れたらallowに移す - 危険操作は 常に deny に固定 (
rm -rf,git push --force,.env編集)
Statusline をカスタマイズ
{
"statusLine": {
"type": "command",
"command": "echo "$(git branch --show-current) | tokens=${CLAUDE_TOKENS_USED:-0}""
}
}
ブランチ名や残トークンなどを常時表示できます。
env で環境変数を固定
セッション内で常時有効な環境変数。秘匿情報は 絶対に書かない こと (commit 漏れ事故を防ぐ)。
Plugin
カスタムスキル + コマンド + MCP を 1 パッケージで配布できる仕組み。
claude plugin install user/repo
設定の確認
/config # 設定 GUI
/permissions # 権限ルール表示・編集
/hooks # 有効な hook 一覧
/mcp # 登録済み MCP 一覧
よくある失敗
- ❌
settings.jsonに API キーを書いて commit - ❌
allowでBash(*)を許可してしまう (危険) - ❌
denyを使わず権限制御を諦める - ✅
settings.jsonは チームで共有する固定ルール,settings.local.jsonで個別設定
試す
設定の改善案を Claude に提案させましょう。
次の `.claude/settings.json` の安全性を評価してください。問題点と改善案を箇条書きで。
```json
{
"permissions": {
"allow": ["Bash(*)", "Edit(*)"],
"deny": []
}
}
```チーム標準 settings.json テンプレ (コピペ用)
新規プロジェクトに置く デフォルト として:
{
"model": "claude-sonnet-4-6",
"permissions": {
"allow": [
"Read(*)",
"Glob(*)",
"Grep(*)",
"Edit(src/**)",
"Edit(tests/**)",
"Edit(docs/**)",
"Write(src/**)",
"Write(tests/**)",
"Bash(ls*)",
"Bash(pwd)",
"Bash(cat*)",
"Bash(git status)",
"Bash(git diff*)",
"Bash(git log*)",
"Bash(git branch*)",
"Bash(pytest*)",
"Bash(ruff*)",
"Bash(mypy*)",
"Bash(npm test*)",
"Bash(npm run*)",
"Bash(uv run*)"
],
"ask": [
"Bash(git add*)",
"Bash(git commit*)",
"Bash(pip install*)",
"Bash(npm install*)",
"Bash(docker*)",
"Edit(*.yml)",
"Edit(*.yaml)",
"Edit(Dockerfile*)",
"Edit(.github/**)"
],
"deny": [
"Bash(rm -rf*)",
"Bash(git push --force*)",
"Bash(git push -f*)",
"Bash(git reset --hard*)",
"Bash(curl*|*bash*)",
"Bash(wget*|*sh*)",
"Read(.env)",
"Read(.env.*)",
"Read(**/*.pem)",
"Read(**/*.key)",
"Edit(.env)",
"Edit(.env.*)",
"Edit(secrets/**)",
"Write(.env)"
]
},
"env": {
"CLAUDE_PROJECT_NAME": "my-app"
}
}
→ 読み取りはほぼ自由 / 編集は対象ディレクトリだけ / 危険コマンドと秘密ファイルは絶対 deny。 新人がリポジトリを clone してすぐ Claude Code を使い始めても安全。
個人 (settings.local.json) のテンプレ
.gitignore に settings.local.json を必ず追加してから:
{
"env": {
"ANTHROPIC_API_KEY": "sk-ant-...",
"GITHUB_TOKEN": "ghp_..."
},
"permissions": {
"allow": [
"Bash(open*)",
"Bash(code*)"
]
}
}
→ 個人の API キー・好みの追加コマンドはここに。チーム共有 settings.json と統合される。