settings.jsonは、Claude Codeの「性格」を決めるファイルだ。パーミッション、ツール許可、フック、プラグイン。あらゆる挙動をここで制御する。
2つのsettings.json
Claude Codeの設定ファイルは2つの階層に存在する。
グローバル設定: ~/.claude/settings.json
すべてのプロジェクトに適用される個人設定。
{
"permissions": {
"allow": [
"Read",
"Glob",
"Grep",
"WebSearch"
],
"deny": []
},
"hooks": {
"PostToolUse": [
{
"matcher": "Edit",
"command": "prettier --write $FILE_PATH"
}
]
}
}
プロジェクト設定: .claude/settings.json
特定のプロジェクトだけに適用される設定。チームメンバー全員で共有できるようにGitリポジトリにコミットする。
{
"permissions": {
"allow": [
"Bash(npm test)",
"Bash(npm run build)",
"Bash(npm run lint)"
]
}
}
優先度: プロジェクト設定 > グローバル設定
主要な設定項目
permissions — ツール許可
Claude Codeのどのツールを自動承認するかを制御する。
{
"permissions": {
"allow": [
"Read",
"Glob",
"Grep",
"Edit",
"Write",
"Bash(npm test)",
"Bash(npm run build)",
"Bash(git status)",
"Bash(git diff *)",
"Bash(git log *)"
],
"deny": [
"Bash(rm -rf *)",
"Bash(git push --force *)"
]
}
}
パターン記法:
"Read": Readツールをすべて許可"Bash(npm test)":npm testコマンドだけを許可"Bash(git *)": gitで始まるすべてのコマンドを許可- ワイルドカード
*でパターンマッチが可能
Bash許可は慎重に
"Bash" とだけ書くと、すべてのBashコマンドが自動承認される。rm -rf、git push --force なども確認なしに実行されてしまう。Bashは必ずコマンドパターン付きで許可すること。
hooks — 自動化フック
ツール実行の前後に自動的に実行されるコマンド。詳しくはPart 3「Hooks」の章で解説する。
enabledPlugins — プラグイン有効化
インストール済みプラグインのうち、有効にするものを指定する。
{
"enabledPlugins": [
"everything-claude-code"
]
}
実践的な設定パターン
パターン1: 安全重視(初学者向け)
{
"permissions": {
"allow": [
"Read",
"Glob",
"Grep"
]
}
}
読み取り系のツールだけを自動承認。ファイル編集やコマンド実行は毎回確認が入る。
パターン2: 開発効率重視
{
"permissions": {
"allow": [
"Read",
"Glob",
"Grep",
"Edit",
"Write",
"Bash(npm *)",
"Bash(npx *)",
"Bash(git status)",
"Bash(git diff *)",
"Bash(git log *)",
"Bash(git add *)",
"Bash(git commit *)"
],
"deny": [
"Bash(rm -rf *)",
"Bash(git push --force *)",
"Bash(git reset --hard *)"
]
}
}
ファイル操作と安全なGitコマンドを自動承認。破壊的な操作は明示的に拒否。
パターン3: プロジェクト共有設定
.claude/settings.json に書いてGitにコミットし、チーム全体で共有する。
{
"permissions": {
"allow": [
"Bash(npm test)",
"Bash(npm run build)",
"Bash(npm run lint)",
"Bash(npx vitest *)"
]
}
}
プロジェクト固有のコマンドだけを許可。個人の好みはグローバル設定で管理する。
設定の確認方法
現在の設定状態は /status コマンドで確認できる。
> /status
どのツールが許可されているか、どのフックが設定されているか、現在のモデルは何かなどが表示される。
この章のポイント
- settings.jsonはグローバル(~/.claude/)とプロジェクト(.claude/)の2階層で管理される
- permissions.allow でツールの自動承認パターンを設定し、deny で明示的な拒否を設定する
- Bashは必ずコマンドパターン付き(例:
Bash(npm test))で許可する - プロジェクト設定はGitにコミットしてチームで共有できる
/statusコマンドで現在の設定状態を確認できる