Claude Code を settings.json で設定する
Claude Code を使い込むほど、「毎回同じことを聞かれる」「このコマンドは自動で通したい」「逆にこれは絶対に止めたい」という要望が出てきます。その大半は、settings.json という設定ファイル 1 つで片づきます。
似た名前で CLAUDE.md がありますが、役割は別です。CLAUDE.md は Claude への「指示書(自然言語のお願い)」、settings.json は Claude Code というツールの「設定(挙動のルール)」。許可の範囲・使うモデル・環境変数・hooks などは、すべて settings.json 側で決めます。
この記事では、settings.json をどこに置くと何に効くのか、いちばん重要な権限設定の書き方、よく使うキー、そして秘密を漏らさない置き場所までを、個人開発者向けに整理します。対象は Claude Code v2.1 系時点です。
settings.json はどこに置くか(4 つの場所と優先順位)
settings.json は、置く場所によって効く範囲が変わります。同じキーが複数の場所にあるときは、下にいくほど強い(上書きする)と覚えてください。
| 場所 | パス | 効く範囲 | git 管理 |
|---|---|---|---|
| ユーザー設定 | ~/.claude/settings.json | このマシンの全プロジェクト | しない |
| プロジェクト設定 | .claude/settings.json | このリポジトリ(チーム共有) | する |
| ローカル設定 | .claude/settings.local.json | このリポジトリの自分だけ | しない(自動で gitignore) |
| 組織管理ポリシー | 管理者が配布するパス | 端末全体(最優先) | 管理者が配布 |
優先順位は、組織ポリシー > 起動時のコマンドライン引数 > ローカル設定 > プロジェクト設定 > ユーザー設定。
使い分けの基本は単純です。自分だけ・全プロジェクト共通の好みはユーザー設定へ。チームで揃えたいルールはプロジェクト設定(.claude/settings.json)へ入れて git に乗せる。自分だけの上書き・秘密を含むものはローカル設定(.claude/settings.local.json)へ。最後のものは git 追跡されないので、そこに置けばリポジトリに漏れません。
いちばん効く設定:permissions
settings.json で最初に整えるべきは、ほぼ間違いなく permissions です。「どの操作を、聞かずに通すか・必ず止めるか・確認するか」を決める部分で、ここが整うと「毎回 Yes を押す」作業が激減します。
{
"permissions": {
"allow": [
"Bash(npm run test:*)",
"Bash(git diff:*)",
"Read(src/**)"
],
"ask": [
"Bash(git push:*)"
],
"deny": [
"Read(.env)",
"Read(.env.*)",
"Bash(rm -rf:*)"
],
"defaultMode": "default"
}
}
allow… 確認なしで通す操作。日常的に何度も走らせるもの(テスト・lint・git diffなど)を入れる。ask… 毎回確認する操作。allowでもdenyでもない「念のため目視したい」もの。deny… 絶対に通さない操作。denyはallowより強いので、事故りたくないものはここに固定する。
ルールの書き方は ツール名(指定子) の形です。
| 書き方 | 意味 |
|---|---|
Bash(npm run lint) | このコマンドだけ(完全一致) |
Bash(npm run test:*) | npm run test で始まるコマンド(前方一致) |
Read(src/**) / Edit(docs/**) | gitignore 形式のパス指定 |
WebFetch(domain:docs.anthropic.com) | このドメインへの取得だけ |
mcp__github / mcp__github__create_issue | MCP サーバー単位・ツール単位 |
defaultMode は、明示ルールに当たらなかったときの既定挙動です。default(都度確認)、acceptEdits(編集は自動承認)、plan(プランモード固定)、bypassPermissions(全部素通り=非推奨)。まずは default のまま allow を育てるのが安全です。プロジェクト外のフォルダも触らせたいときは additionalDirectories で足します。
そのほか、よく使うキー
権限の次に触ることが多いキーをまとめます。
{
"model": "claude-opus-4-8",
"env": { "DISABLE_TELEMETRY": "1" },
"includeCoAuthoredBy": true,
"cleanupPeriodDays": 30,
"statusLine": { "type": "command", "command": "~/.claude/statusline.sh" }
}
model… 既定で使うモデル。env… セッションに渡す環境変数。ただしここに API キーなどの秘密を直書きしない(後述)。includeCoAuthoredBy… Claude のコミットに co-author 行を付けるか。statusLine… 画面下のステータス行を自前コマンドの出力で置き換える。hooks… ツール実行の前後などに自動でコマンドを走らせる仕組み。記述量が多いので hooks の記事 に分けています。
MCP まわりでは、プロジェクトの .mcp.json を信頼するかを enableAllProjectMcpServers や enabledMcpjsonServers で制御できます。詳しくは MCP サーバーを追加する を参照してください。
チームで共有する型と、秘密の置き場所
チームで挙動を揃えたいときは、.claude/settings.json(プロジェクト設定)に共有ルールを書いて git に乗せます。これで、誰がクローンしても同じ許可範囲・同じモデルで Claude Code が立ち上がります。
一方で、秘密(API キー・トークン)は共有設定に絶対書かない。env に書いた値も、.claude/settings.json に入れれば git に乗ってしまいます。秘密が要るときは、
- 値そのものはシェルの環境変数やシークレットマネージャに置き、
apiKeyHelper(キーを取り出すコマンド)経由で参照するか、- 個人用の上書きは
.claude/settings.local.json(git 追跡外)に書く。
万一リポジトリに秘密を落としてしまったら、消すだけでなく**そのキーを再発行(ローテート)**します。履歴に残るからです。
挫折ポイント
- どこに書いたか分からなくなる … 同じキーが複数の場所にあると、優先順位(ローカル > プロジェクト > ユーザー)で上書きされます。「効かない」ときは、まず上位の設定で同じキーを書いていないか疑う。
allowを増やしすぎて事故る … 速さ優先でBash(:*)のような広いルールを入れると、危険なコマンドまで素通りします。広く開けるより、denyで破壊系(rm -rf・強制 push など)を固定するほうが安全。- JSON の構文ミスで設定ごと無視される … 末尾カンマや閉じ忘れがあると読み込まれません。保存後、Claude Code を再起動して効いているか確認する。
bypassPermissionsを常用にしない … 全部素通りは一見ラクですが、確認の壁がなくなります。使うとしても一時的に。.localと共有を取り違える … 自分だけの上書き・秘密はsettings.local.json、チーム共有はsettings.json。逆にすると、秘密が git に乗るか、共有したいルールが共有されません。
まとめ
settings.json は、Claude Code の挙動を「毎回の確認」から「一度決めたルール」へ移すための場所です。まずは permissions.allow に日常コマンドを少しずつ足し、deny に破壊系を固定する ── これだけで操作がかなり静かになります。
チームで揃えたいものは .claude/settings.json に書いて git へ、自分だけ・秘密を含むものは .claude/settings.local.json へ。優先順位(下が強い)と「秘密はリポジトリに書かない」の 2 点さえ外さなければ、設定で大きく事故ることはありません。
設定(settings.json)が「ツールの挙動」を決める場所なら、自然言語の指示書である CLAUDE.md に何を書くべきか、自動化の仕掛けである Claude Code の hooks でできること、外部の道具をつなぐ MCP サーバーの追加 と合わせて読むと、Claude Code を自分用に仕立てる全体像が掴めます。最新のアップデートは Claude Code 更新まとめ で追えます。