コンテンツにスキップ
LinkedInX

Settings JSON 設計 — 権限・環境変数・フック設定

読了 5分 + 実践 25分

対象読者: Claude Code の基本操作(Level 3〜4 相当)を理解しており、チーム共有可能なハーネスを構築したい方。
前提知識:
  • `.claude/` フォルダの役割を把握していること
  • JSON の基本構文を読み書きできること

Claude Code の動作は .claude/settings.json で細かく制御できます。権限・環境変数・フックを正しく設定することで、チームで安全にハーネスを運用できます。このページでは設定ファイルの構造から実践的な設計指針まで順を追って解説します。


settings.json と settings.local.json の違い

Section titled “settings.json と settings.local.json の違い”

Claude Code の設定は 2 つのファイルに分けて管理します。

ファイル用途Git 管理
.claude/settings.jsonチーム共有の設定コミットする
.claude/settings.local.json個人専用の設定・上書き.gitignore で除外する

settings.json はリポジトリにコミットし、チームメンバー全員が同じ権限・フック設定で動作させます。一方 settings.local.json は個人の API キーや実験的な設定を置く場所で、Git には含めません。

settings.json は以下の構造を持ちます。

{
  "permissions": {
    "allow": [
      "Bash(npm run dev)",
      "Bash(npm run harness:*)",
      "Read",
      "Write",
      "Edit"
    ],
    "deny": [
      "Bash(npm run build)"
    ]
  },
  "env": {
    "NODE_ENV": "development"
  },
  "hooks": {
    "PreToolUse": [],
    "PostToolUse": [],
    "Stop": []
  },
  "mcpServers": {
    "github": {}
  }
}

各セクションの役割は次のとおりです。

  • permissions: Claude が実行できるツール・コマンドの許可リスト(allow)と禁止リスト(deny)
  • env: Claude のセッション中に有効になる環境変数
  • hooks: ツール実行の前後・停止時に走るスクリプト
  • mcpServers: Model Context Protocol(MCP)サーバーの接続設定

パターンは 3 種類の形式で書けます。

形式意味
ツール名のみ"Read"Read ツール全体を許可
コマンド指定"Bash(npm run dev)"特定のコマンドだけを許可
glob パターン"Bash(npm run harness:*)"harness: で始まるコマンドすべてを許可

allow に登録したコマンドは、Claude が実行する際に権限プロンプト(確認ダイアログ)が表示されずに自動で実行されます。deny に登録したコマンドは、Claude が実行しようとしても常にブロックされます。


allow リストは「必要なものだけ」に絞ります。"Bash" 全体を許可すると、Claude がどんなシェルコマンドでも実行できてしまいます。プロジェクトで使う具体的なコマンドだけを列挙することで、意図しない操作を防げます。

// 避けるべき設定: Bash 全体を許可してしまう
"allow": ["Bash", "Read", "Write"]

// 推奨: 使うコマンドだけを明示する
"allow": ["Bash(npm run dev)", "Bash(npm run harness:*)", "Read", "Write", "Edit"]

npm run build はホスティングパイプラインと連携している場合、本番デプロイを発火させます。明示的に deny に登録することで、Claude が誤って実行することを防ぎます。

"deny": ["Bash(npm run build)"]

settings.local.json を .gitignore に追加する

Section titled “settings.local.json を .gitignore に追加する”

個人の ANTHROPIC_API_KEY や実験的な設定が settings.json に混入しないよう、プロジェクトの .gitignore に以下を追記します。

.claude/settings.local.json

環境変数は env セクションに集約する

Section titled “環境変数は env セクションに集約する”

コードや設定ファイルに環境変数の値をハードコードするのではなく、env セクションに一元管理します。

"env": {
  "NODE_ENV": "development",
  "LOG_LEVEL": "info"
}

Step 1: 現在の settings.json を確認する

Section titled “Step 1: 現在の settings.json を確認する”

プロジェクトルートで次のコマンドを実行し、現在の設定内容を確認します。

cat .claude/settings.json

permissionsallowdeny に何が登録されているかを読み取ります。

✅ 確認: deny"Bash(npm run build)" が含まれていることを確認します。含まれていない場合は次のステップで追加します。


Step 2: npm run harness:check を allow に追加する

Section titled “Step 2: npm run harness:check を allow に追加する”

allow"Bash(npm run harness:check)" が含まれていない場合は追加します。settings.jsonpermissions.allow 配列に次の行を加えます。

"allow": [
  "Bash(npm run dev)",
  "Bash(npm run harness:check)",
  "Bash(npm run harness:*)",
  "Read",
  "Write",
  "Edit"
]

✅ 確認: JSON の構文エラーがないことを確認します。配列の最後の要素にカンマが付いていないかチェックします。


Step 3: settings.local.json を作成する

Section titled “Step 3: settings.local.json を作成する”

個人用の設定ファイルをプロジェクトルートに作成します。実際の API キーは書かず、プレースホルダーで構造を確認します。

touch .claude/settings.local.json

ファイルの内容として次の構造を参考にします。

{
  "env": {
    "ANTHROPIC_API_KEY": "YOUR_API_KEY_HERE"
  }
}

次に .gitignore に除外設定が追加されているかを確認します。

grep "settings.local.json" .gitignore

✅ 確認: .gitignore.claude/settings.local.json が記載されていることを確認します。記載がない場合は追記します。


settings.json を変更した後は Claude Code を再起動して設定を反映します。Claude Code を一度終了し、再度起動してから次のコマンドを実行します。

npm run harness:check

✅ 確認: Claude が権限プロンプトなしに npm run harness:check を実行できることを確認します。


このページで学んだ内容を整理します。

  • settings.json はチーム共有、settings.local.json は個人専用として分割管理する
  • allow は使うコマンドだけを具体的に指定し、npm run build は必ず deny に含める
  • 環境変数は env セクションに集約し、実際の値は settings.local.json に書く
  • settings.local.json.gitignore で Git 管理から除外する

Q: allow に登録していないコマンドは実行できませんか?

A: 実行はできますが、Claude が実行しようとするたびに権限プロンプトが表示されます。allow はプロンプトを表示せず自動実行させるコマンドのリストです。deny に登録したコマンドはプロンプトが表示されず、常にブロックされます。

Q: settings.local.json が存在しない場合はどうなりますか?

A: settings.json の設定だけが適用されます。settings.local.json はオプションのファイルです。

Q: glob パターンはどの程度柔軟に書けますか?

A: * は単一のパス区切りを含まない任意の文字列にマッチします。"Bash(npm run harness:*)"npm run harness:checknpm run harness:sync に一致します。ただし "Bash(*)" のように過度に広いパターンは避けてください。

Q: hooks セクションで何ができますか?

A: PreToolUse はツール実行直前、PostToolUse は実行直後、Stop はセッション終了時に任意のスクリプトを走らせられます。例えばファイル更新後に自動でフォーマッターを走らせる、といった用途に使います。

このページの外部仕様・背景情報は、参考文献を参照してください。[1][2]

  1. Anthropic, Claude Code documentation
  2. Anthropic, Claude API documentation
クイズ