本文へスキップ
Claude Media
Claude Code設定ガイド — settings.jsonの主要フィールド・環境変数・実戦レシピ

Claude Code設定ガイド — settings.jsonの主要フィールド・環境変数・実戦レシピ

Claude Codeの設定フィールド・環境変数・CLIフラグをコード例とともに整理。10の実戦レシピ・3シナリオのプリセットJSON・優先順位フローチャートまで扱います。

読了目安 約141

要点

Claude Codeの設定は、5階層のsettings.json~/.claude.jsonのグローバル設定・環境変数・CLIフラグ・CLAUDE.mdメモリという多層構造で構成されていて、公式docsが列挙するsettings.jsonフィールドだけで80種以上、環境変数は90種以上あります。Managed/User/Project/Local/CLIの優先順位フローチャート、主要フィールド・主要環境変数のコード例付き対応表hooks/mcpServers/permissions/sandbox/statusLine/outputStyleの詳解、動くコード10本の実戦レシピ、個人/チーム/エンタープライズの即貼付可能なプリセットJSON、トラブルシューティング早見表までを扱います。

設定の5階層と優先順位

スコープの全体像

Claude Codeは「誰と共有するか」「どこに書くか」でManaged / User / Project / Local / CLIの5階層に整理されています。

  • Managedmanaged-settings.json・MDM・レジストリ・サーバー配信経由。マシン上の全ユーザーに強制され、個人設定やCLIフラグでも上書き不可
  • User~/.claude/settings.json。自分の全プロジェクトに適用
  • Project<repo>/.claude/settings.json。リポジトリにcommitしてチーム共有
  • Local<repo>/.claude/settings.local.json。自分+そのリポジトリのみ(.gitignore推奨)
  • CLIフラグ / 環境変数 — 起動ごとの一時オーバーライド

優先順位フローチャート

設定の解決順(上が勝つ)
Managed 設定(remote / plist / レジストリ / ファイル)
      ▼ 覆せない
コマンドライン引数(--model, --permission-mode 等)

ローカルプロジェクト設定 (.claude/settings.local.json)

共有プロジェクト設定 (.claude/settings.json)

ユーザー設定 (~/.claude/settings.json)

組み込みデフォルト

Managedティア内ではさらに サーバー管理 > MDM/OSレベル > ファイルベース(managed-settings.d/*.json + managed-settings.json) > HKCUレジストリ の順で1つだけが採用されます(マージではなく選択)。

実例:「どれが効くか」

  • User設定で "model": "claude-sonnet-4-6"
  • Project設定で "model": "claude-opus-4-6"
  • CLIで --model haiku

Managed層が無ければ最終モデルはhaikuになります。CLIがProjectより強く、ProjectがUserより強い、という順序が理解できていれば迷いません。

配列設定はスコープ間でマージされる

配列型の設定(permissions.allowsandbox.filesystem.allowWriteclaudeMdExcludesallowedHttpHookUrls等)は全スコープで連結+重複排除されます。Managedが["/opt/company-tools"]を置き、ユーザーが["~/.kube"]を追加した場合、最終構成には両方が含まれます。上書きではなく追加である点は、Managedで絶対に許したくない挙動をpermissions.denyに置くときに重要です(allowを絞ってもユーザーが追加で広げられるため)。

managed-settings.d/ドロップインディレクトリ

ファイルベースのManaged設定ではmanaged-settings.d/*.jsonがサポートされていて、systemd規則に従いmanaged-settings.json→ドロップイン各ファイル(アルファベット順)の順にディープマージされます。10-telemetry.json20-security.jsonのように数値プレフィックスでマージ順を制御するのが実務パターンです。

アクティブな設定の確認

Claude Code内で/statusを実行すると、Enterprise managed settings (remote) / (plist) / (HKLM) / (file)などどのManagedソースが効いているかまで表示されます。設定ファイルにJSONエラーがあっても/statusで検出できるので、「効かない」ときの最初のデバッグはここです。

settings.jsonの主要フィールド一覧

settings.jsonは階層設定の中心ファイルです。冒頭に$schemaを書くとVS Code/Cursorなどで補完とバリデーションが効きます。

~/.claude/settings.json(最小例)
{
  "$schema": "https://json.schemastore.org/claude-code-settings.json",
  "model": "claude-sonnet-4-6",
  "permissions": {
    "allow": ["Bash(npm run lint)", "Read(~/.zshrc)"],
    "deny": ["Bash(curl *)", "Read(./.env*)", "Read(./secrets/**)"]
  },
  "env": {
    "CLAUDE_CODE_ENABLE_TELEMETRY": "1"
  }
}

全スコープで有効なフィールド一覧

公式docsに掲載されている標準フィールドを用途別に並べると次の通りです。

フィールド用途
agentメインスレッドを名前付きsubagentとして起動し、そのシステムプロンプト・ツール制限・モデルを適用
alwaysThinkingEnabled全セッションで拡張思考をデフォルト有効化
apiKeyHelper/bin/shで実行され認証値を生成するカスタムスクリプト。戻り値はX-Api-KeyAuthorization: Bearerに送信
attributiongit commit/PRの属性をcommit/prで個別指定。空文字列で非表示
autoMemoryDirectory自動メモリの保存先ディレクトリ(~/展開可)。プロジェクト設定からは受け付けない
autoMemoryEnabled自動メモリのON/OFF。デフォルトtrue
autoModeauto mode分類器のenvironment/allow/soft_denyを散文で指定
autoUpdatesChannel更新チャネル。"stable"(約1週間古い)/"latest"(デフォルト)
availableModels/model/--model/ANTHROPIC_MODELで選べるモデルを制限
awaySummaryEnabled離席後のセッション要約表示。CLAUDE_CODE_ENABLE_AWAY_SUMMARYと同義
awsAuthRefresh / awsCredentialExportBedrock認証情報を更新/出力するスクリプト
claudeMdExcludes祖先CLAUDE.mdのうち読み込みをスキップするグロブパターン(配列マージ)
cleanupPeriodDays非アクティブセッションを削除する日数。デフォルト30、最小1
companyAnnouncements起動時に表示するアナウンス(複数指定でランダム表示)
defaultShell!コマンドのシェル。"bash"または"powershell"
disableAllHooks全hooksとカスタムstatuslineを無効化
disableAutoMode"disable"でauto modeを無効にし、Shift+Tabサイクルからも除外
disableDeepLinkRegistrationclaude-cli://プロトコルハンドラー登録を無効化
disabledMcpjsonServers / enabledMcpjsonServers.mcp.jsonからの拒否リスト/承認リスト
disableSkillShellExecutionskills/commandsのインラインシェル実行(!`...`)を無効化
effortLevel"low"/"medium"/"high"/"xhigh"を永続化
enableAllProjectMcpServers.mcp.jsonの全MCPサーバーを自動承認
enabledPluginsplugin-name@marketplace-name単位での有効化マップ
env全セッションに適用する環境変数のマップ
extraKnownMarketplaces追加のプラグインマーケットプレイスの定義
fastModePerSessionOptIn高速モードをセッションごとに/fastで明示的に有効化させる
feedbackSurveyRateセッション品質調査の表示確率(0〜1)。0で抑制
fileSuggestion@補完用のカスタムコマンド(JSON入出力)
forceLoginMethod"claudeai"/"console"でログイン経路を制限
forceLoginOrgUUID特定組織のUUIDに所属することを要求
hooksライフサイクルイベントでのフック実行定義
includeCoAuthoredBy非推奨attributionを利用
includeGitInstructions組み込みのgitワークフロー命令を含めるか。デフォルトtrue
languageClaudeの応答言語(例: "japanese")
minimumVersion自動更新のフロア("2.1.100"等)
modelデフォルトモデル("claude-sonnet-4-6"等)
modelOverridesモデルIDをプロバイダー固有ID(Bedrock ARN等)にマップ
otelHeadersHelperOpenTelemetryヘッダー生成スクリプト
outputStyle出力スタイル("Explanatory"等)
permissionsallow/ask/deny/additionalDirectories/defaultMode/disableBypassPermissionsMode/skipDangerousModePermissionPrompt
plansDirectoryプランファイル保存先。デフォルト~/.claude/plans
prefersReducedMotionUIアニメーション(スピナー・シマー等)の削減
respectGitignore@ファイルピッカーが.gitignoreを尊重するか
sandboxBashサンドボックスの設定ブロック(詳細は後述)
showClearContextOnPlanAcceptプラン受諾画面にコンテキストクリアを表示
showThinkingSummaries拡張思考サマリーの表示
skipWebFetchPreflightWebFetchのドメイン安全チェックをスキップ
spinnerTipsEnabled / spinnerTipsOverride / spinnerVerbsスピナー表示のカスタマイズ
sshConfigsDesktop環境ドロップダウンのSSH接続一覧
statusLineステータスライン生成コマンド
subagentStatusLineサブエージェントパネル行の生成コマンド
tuiターミナルUIレンダラー。"fullscreen"/"default"
useAutoModeDuringPlanプランモードでauto modeセマンティクスを使用するか
viewMode起動時のトランスクリプトビュー。"default"/"verbose"/"focus"
voiceEnabledプッシュトゥトーク音声ディクテーションの有効化
worktree.symlinkDirectories / worktree.sparsePathsworktreeのディスク使用量最適化

Managed設定のみ有効なフィールド

以下はmanaged-settings.jsonに書いた場合だけ効力を持ち、ユーザー/プロジェクト層では無視されます。組織のハード境界を引く役割です。

フィールド用途
allowedChannelPluginsメッセージをプッシュできるチャネルプラグインのホワイトリスト
allowedHttpHookUrlsHTTP hooksの宛先URLホワイトリスト(*ワイルドカード)
allowedMcpServers設定可能なMCPサーバーのホワイトリスト
allowManagedHooksOnlymanaged/SDK/enabledPlugins由来のhooksのみ許可
allowManagedMcpServersOnlymanaged設定のallowedMcpServersのみ尊重
allowManagedPermissionRulesOnlyユーザー/プロジェクト設定での権限ルール定義を禁止
blockedMarketplacesマーケットプレイスのブロックリスト
channelsEnabledTeam/Enterpriseでチャネルを許可
deniedMcpServers明示的にブロックされるMCPサーバーの拒否リスト
forceRemoteSettingsRefreshリモート設定取得成功まで起動をブロック(fail-closed)
httpHookAllowedEnvVarsHTTP hooksがヘッダーに補間できる環境変数名
pluginTrustMessageプラグイン信頼警告への追加メッセージ
sandbox.filesystem.allowManagedReadPathsOnlyallowReadパスをmanaged設定だけに限定
sandbox.network.allowManagedDomainsOnly許可ドメインをmanaged設定だけに限定
strictKnownMarketplacesユーザーが追加可能なマーケットプレイスのホワイトリスト

グローバル設定(~/.claude.json)

settings.jsonではなく~/.claude.jsonにしか保存できない項目群。ここに書くべき設定をsettings.jsonに入れるとスキーマエラーになります。

フィールド用途
autoConnectIde外部ターミナル起動時に実行中のIDEへ自動接続
autoInstallIdeExtensionVS CodeターミナルでIDE拡張を自動インストール
autoScrollEnabledフルスクリーンで新出力に自動追従
editorMode"normal"/"vim"
externalEditorContextCtrl+Gで外部エディターに前応答を渡す
showTurnDurationターン時間表示(例:「Cooked for 1m 6s」)
terminalProgressBarEnabledターミナル進捗バー(ConEmu/Ghostty/iTerm2)
teammateModeエージェントチームの表示モード(auto/in-process/tmux)

MCP設定のローカル/ユーザースコープも~/.claude.jsonに保存されます(プロジェクトスコープは.mcp.json)。

個別フィールドの代表例

長大なフィールド群の中でも特に誤用が多いものを掘り下げます。

apiKeyHelper — スクリプトでAPIキーを動的発行

~/.claude/settings.json
{
  "apiKeyHelper": "~/.config/claude/get-api-key.sh",
  "env": {
    "CLAUDE_CODE_API_KEY_HELPER_TTL_MS": "1800000"
  }
}
~/.config/claude/get-api-key.sh
#!/bin/bash
# 1Password CLI から取得する例
op read "op://Private/Anthropic API/credential"

戻り値はX-Api-KeyヘッダーおよびAuthorization: Bearerヘッダーとして送信されます。TTLを指定すると指定間隔で再取得されるので、短命トークン運用に向きます。

attribution — コミット/PRの署名カスタマイズ

.claude/settings.json
{
  "attribution": {
    "commit": "",
    "pr": ""
  }
}

両方を空文字列にするとClaudeの署名を完全に非表示にできます。組織ポリシーで「AIアシスト明示」が必要な場合はcommit: "Generated with AI assistance"のようにカスタマイズします。

availableModels — モデル選択の制限

.claude/settings.json
{
  "availableModels": ["sonnet", "haiku"]
}

Opusの意図しない利用を抑えたい、プロジェクトごとにモデル方針を固定したい、といったケースに使えます。/model--modelANTHROPIC_MODELいずれからもリストの外は選べなくなります。

claudeMdExcludes — モノレポでのCLAUDE.md除外

.claude/settings.local.json
{
  "claudeMdExcludes": [
    "**/monorepo/CLAUDE.md",
    "/Users/me/monorepo/other-team/.claude/rules/**"
  ]
}

他チームのCLAUDE.mdがツリー上で取得されるときに役立ちます。配列はスコープ間でマージされます。

環境変数の全一覧

環境変数は秘匿情報・その場限りの切り替え・CI/コンテナでの注入に向きます。settings.jsonenvキーで宣言すると全セッションに配布できます(Managedで固定も可能)。

認証・エンドポイント

変数用途
ANTHROPIC_API_KEYX-Api-Key。非対話(-p)では常に優先、対話モードは初回承認
ANTHROPIC_AUTH_TOKENカスタムBearerトークン
ANTHROPIC_BASE_URLAPIエンドポイントを上書き(プロキシ/ゲートウェイ)
ANTHROPIC_BEDROCK_BASE_URL / ANTHROPIC_BEDROCK_MANTLE_BASE_URLBedrock/Mantleの基底URL
ANTHROPIC_VERTEX_BASE_URL / ANTHROPIC_VERTEX_PROJECT_IDVertex AIの基底URL/GCPプロジェクト
ANTHROPIC_FOUNDRY_API_KEY / ANTHROPIC_FOUNDRY_BASE_URL / ANTHROPIC_FOUNDRY_RESOURCEMicrosoft Foundry認証
ANTHROPIC_BETAS追加のanthropic-betaヘッダー(カンマ区切り)
ANTHROPIC_CUSTOM_HEADERSName: Value形式のカスタムヘッダー
AWS_BEARER_TOKEN_BEDROCKBedrockのAPIキー認証
API_TIMEOUT_MSAPIリクエストのタイムアウト(デフォルト600000/10分)
CLAUDE_CODE_OAUTH_TOKENClaude.ai認証用OAuthアクセストークン
CLAUDE_CODE_OAUTH_REFRESH_TOKEN / CLAUDE_CODE_OAUTH_SCOPES自動化環境用のリフレッシュトークンとスコープ
CLAUDE_CODE_CERT_STORETLSのCA証明書ソース(bundled,systemデフォルト)
CLAUDE_CODE_CLIENT_CERT / CLAUDE_CODE_CLIENT_KEY / CLAUDE_CODE_CLIENT_KEY_PASSPHRASEmTLS認証
CLAUDE_CODE_PROXY_RESOLVES_HOSTSプロキシ側でDNS解決させる
HTTP_PROXY / HTTPS_PROXY / NO_PROXY標準プロキシ変数

モデル選択

変数用途
ANTHROPIC_MODEL使用モデル名
ANTHROPIC_SMALL_FAST_MODEL[非推奨]バックグラウンドタスク用Haiku
ANTHROPIC_SMALL_FAST_MODEL_AWS_REGIONBedrock時のHaikuリージョン上書き
ANTHROPIC_DEFAULT_HAIKU_MODEL / _OPUS_MODEL / _SONNET_MODEL既定モデルエイリアスの上書き
ANTHROPIC_DEFAULT_*_MODEL_NAME / _DESCRIPTION / _SUPPORTED_CAPABILITIESピッカーの表示カスタマイズ
ANTHROPIC_CUSTOM_MODEL_OPTION / _NAME / _DESCRIPTION / _SUPPORTED_CAPABILITIESカスタムモデルエントリを/modelに追加
CLAUDE_CODE_USE_BEDROCK / CLAUDE_CODE_USE_VERTEX / CLAUDE_CODE_USE_FOUNDRY / CLAUDE_CODE_USE_MANTLEプロバイダー切り替え
CLAUDE_CODE_SKIP_BEDROCK_AUTH / CLAUDE_CODE_SKIP_VERTEX_AUTH / CLAUDE_CODE_SKIP_FOUNDRY_AUTH / CLAUDE_CODE_SKIP_MANTLE_AUTHLLMゲートウェイ経由で自前認証を使う場合
CLAUDE_CODE_SUBAGENT_MODELsubagent用モデル上書き
CLAUDE_CODE_DISABLE_LEGACY_MODEL_REMAP旧Opus(4.0/4.1)→現行リマップを抑制
VERTEX_REGION_CLAUDE_3_5_HAIKU / _3_5_SONNET / _3_7_SONNET / _4_0_OPUS / _4_0_SONNET / _4_1_OPUS / _4_5_OPUS / _4_5_SONNET / _4_6_OPUS / _4_6_SONNET / _4_7_OPUS / _HAIKU_4_5Vertex AIでのモデル別リージョン

ツール実行・Bash

変数用途
BASH_DEFAULT_TIMEOUT_MSBashのデフォルトタイムアウト(デフォルト120000)
BASH_MAX_TIMEOUT_MSBashの最大タイムアウト(デフォルト600000)
BASH_MAX_OUTPUT_LENGTHBash出力を中央で切り詰める文字数
CLAUDE_BASH_MAINTAIN_PROJECT_WORKING_DIRBash/PowerShellコマンド後に元のcwdに戻す
CLAUDE_CODE_SHELL自動シェル検出の上書き
CLAUDE_CODE_SHELL_PREFIX全Bashコマンドをラップするプレフィックス(ログ/監査用)
CLAUDE_CODE_USE_POWERSHELL_TOOLWindows/PowerShellツールの制御
CLAUDE_CODE_GIT_BASH_PATHWindowsでbash.exeの明示パス
USE_BUILTIN_RIPGREP0でシステムrgを使用
CLAUDE_CODE_GLOB_HIDDEN / CLAUDE_CODE_GLOB_NO_IGNORE / CLAUDE_CODE_GLOB_TIMEOUT_SECONDSGlobツール挙動
CLAUDE_CODE_FILE_READ_MAX_OUTPUT_TOKENSファイル読み取りのトークン制限
CLAUDE_CODE_MAX_TOOL_USE_CONCURRENCY並列ツール/subagent数(デフォルト10)
TASK_MAX_OUTPUT_LENGTHsubagent出力の最大文字数(デフォルト32000)

コンテキスト・思考予算・出力

変数用途
CLAUDE_CODE_MAX_OUTPUT_TOKENS1応答あたりの最大出力トークン
MAX_THINKING_TOKENS拡張思考の予算上限。0で無効化
CLAUDE_CODE_DISABLE_THINKING思考を強制無効化
CLAUDE_CODE_DISABLE_ADAPTIVE_THINKING適応的推論を無効化しMAX_THINKING_TOKENSにフォールバック
CLAUDE_CODE_EFFORT_LEVEL努力レベル(low/medium/high/xhigh/max/auto)
CLAUDE_CODE_MAX_CONTEXT_TOKENSコンテキストウィンドウサイズの上書き(DISABLE_COMPACT必須)
CLAUDE_AUTOCOMPACT_PCT_OVERRIDEオートコンパクションの閾値(%)
CLAUDE_CODE_AUTO_COMPACT_WINDOWコンパクション計算のトークン基準
DISABLE_AUTO_COMPACT自動コンパクションのみ無効化
DISABLE_COMPACT自動+手動/compactを無効化
DISABLE_PROMPT_CACHING / DISABLE_PROMPT_CACHING_HAIKU / _OPUS / _SONNETプロンプトキャッシュ無効化
ENABLE_PROMPT_CACHING_1H1時間キャッシュTTLをリクエスト
FORCE_PROMPT_CACHING_5M5分TTLに強制
CLAUDE_CODE_DISABLE_1M_CONTEXT1Mコンテキストを無効化

MCP・ツール検索

変数用途
MCP_TIMEOUTMCPサーバー起動タイムアウト(デフォルト30000)
MCP_TOOL_TIMEOUTMCPツール実行タイムアウト
MAX_MCP_OUTPUT_TOKENSMCP出力の最大トークン(デフォルト25000)
ENABLE_TOOL_SEARCHtrue/auto/auto:N/false。MCPツールの遅延ロード
MCP_CLIENT_SECRETOAuthクライアントシークレット
MCP_OAUTH_CALLBACK_PORTOAuthコールバック固定ポート
MCP_CONNECTION_NONBLOCKING非対話モードでMCP接続待機をスキップ
MCP_REMOTE_SERVER_CONNECTION_BATCH_SIZE / MCP_SERVER_CONNECTION_BATCH_SIZE起動時の並列接続数
ENABLE_CLAUDEAI_MCP_SERVERSClaude.ai由来MCPサーバーの有効/無効
CLAUDE_AGENT_SDK_MCP_NO_PREFIXSDK作成MCPでmcp__<server>__プレフィックスを省略

テレメトリ・自動更新・運用

変数用途
CLAUDE_CODE_ENABLE_TELEMETRYOTELテレメトリを有効化
DISABLE_TELEMETRYStatsigテレメトリを無効化
DISABLE_ERROR_REPORTINGSentryへの送信停止
DISABLE_FEEDBACK_COMMAND/feedbackを無効化
CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC上記関連をまとめて無効化
DISABLE_AUTOUPDATER自動更新停止
DISABLE_INSTALLATION_CHECKSインストール警告非表示
DISABLE_COST_WARNINGSコスト警告非表示
CLAUDE_CODE_DISABLE_AUTO_MEMORY自動メモリ無効化
CLAUDE_CODE_SKIP_PROMPT_HISTORYトランスクリプト書き込みを完全抑止
CLAUDE_CODE_DISABLE_CLAUDE_MDSすべてのCLAUDE.md読込を禁止
CLAUDE_CODE_ADDITIONAL_DIRECTORIES_CLAUDE_MD--add-dir配下のCLAUDE.mdを読み込む
CLAUDE_CODE_DISABLE_GIT_INSTRUCTIONS組み込みgit命令を除去
CLAUDE_CODE_NEW_INIT/initを対話型マルチフェーズに
CLAUDE_CODE_REMOTE / CLAUDE_CODE_REMOTE_SESSION_IDWeb環境で自動設定
CLAUDE_CODE_DEBUG_LOGS_DIR / CLAUDE_CODE_DEBUG_LOG_LEVELデバッグログ
CLAUDE_CODE_IDE_SKIP_AUTO_INSTALL / CLAUDE_CODE_AUTO_CONNECT_IDE / CLAUDE_CODE_IDE_HOST_OVERRIDE / CLAUDE_CODE_IDE_SKIP_VALID_CHECKIDE連携
CLAUDE_CODE_DISABLE_TERMINAL_TITLEターミナルタイトル自動更新を停止
CLAUDE_CODE_DISABLE_MOUSE / CLAUDE_CODE_DISABLE_VIRTUAL_SCROLL / CLAUDE_CODE_ACCESSIBILITY / CLAUDE_CODE_NO_FLICKER / CLAUDE_CODE_SCROLL_SPEED / CLAUDE_CODE_TMUX_TRUECOLORTUI表示調整
CLAUDE_CONFIG_DIR設定ディレクトリ上書き(複数アカウント運用)
CLAUDE_CODE_PLUGIN_CACHE_DIR / CLAUDE_CODE_PLUGIN_GIT_TIMEOUT_MS / CLAUDE_CODE_PLUGIN_KEEP_MARKETPLACE_ON_FAILURE / CLAUDE_CODE_PLUGIN_SEED_DIR / FORCE_AUTOUPDATE_PLUGINS / CLAUDE_CODE_SYNC_PLUGIN_INSTALL / CLAUDE_CODE_SYNC_PLUGIN_INSTALL_TIMEOUT_MS / CLAUDE_CODE_DISABLE_OFFICIAL_MARKETPLACE_AUTOINSTALL / CLAUDE_CODE_ENABLE_BACKGROUND_PLUGIN_REFRESHプラグイン制御
CLAUDE_CODE_PERFORCE_MODEPerforce書き込み保護
CLAUDE_CODE_SUBPROCESS_ENV_SCRUBサブプロセス環境からAnthropic/クラウド認証情報を除去
CLAUDE_CODE_SCRIPT_CAPSスクリプト呼び出し回数の上限(JSON)
CLAUDE_CODE_EXIT_AFTER_STOP_DELAYアイドル後の自動終了までのms
CLAUDE_CODE_RESUME_INTERRUPTED_TURN中断ターンの自動再開
CLAUDE_CODE_ENABLE_TASKS非対話モードでタスクリスト有効化
CLAUDE_CODE_TASK_LIST_ID共有タスクリストID
CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMSエージェントチーム有効化
CLAUDE_CODE_TEAM_NAMEチームメイト所属名
CLAUDE_CODE_DISABLE_CRONスケジュール済みタスク無効化
CLAUDE_CODE_DISABLE_FAST_MODE / CLAUDE_CODE_DISABLE_BACKGROUND_TASKS / CLAUDE_AUTO_BACKGROUND_TASKS / CLAUDE_CODE_DISABLE_FILE_CHECKPOINTING / CLAUDE_CODE_DISABLE_ATTACHMENTS / CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS / CLAUDE_CODE_ENABLE_FINE_GRAINED_TOOL_STREAMING / CLAUDE_CODE_ENABLE_AWAY_SUMMARY / CLAUDE_CODE_ENABLE_PROMPT_SUGGESTION個別機能トグル
CLAUDE_CODE_SYNTAX_HIGHLIGHTdiff出力の構文強調
CLAUDE_CODE_TMPDIR一時ディレクトリ上書き
CLAUDE_ENV_FILEBashコマンド前に実行するスクリプト(環境永続化)
CLAUDE_REMOTE_CONTROL_SESSION_NAME_PREFIXリモートコントロール名プレフィックス
CLAUDE_ENABLE_BYTE_WATCHDOG / CLAUDE_ENABLE_STREAM_WATCHDOG / CLAUDE_STREAM_IDLE_TIMEOUT_MSストリーミングアイドル監視
CLAUDE_CODE_MAX_RETRIES失敗APIリクエストの再試行数(デフォルト10)
CLAUDE_CODE_DISABLE_NONSTREAMING_FALLBACK非ストリーミングフォールバックを禁止
CLAUDE_CODE_SIMPLE--bare相当の最小起動
CCR_FORCE_BUNDLEclaude --remoteでローカルバンドルを強制
DISABLE_BUG_COMMAND旧名(DISABLE_FEEDBACK_COMMANDと等価)
DISABLE_DOCTOR_COMMAND / DISABLE_EXTRA_USAGE_COMMAND / DISABLE_INSTALL_GITHUB_APP_COMMAND / DISABLE_LOGIN_COMMAND / DISABLE_LOGOUT_COMMAND / DISABLE_UPGRADE_COMMAND各種コマンド非表示
DISABLE_INTERLEAVED_THINKINGインターリーブ思考β無効化
FALLBACK_FOR_ALL_PRIMARY_MODELSOpus以外でも--fallback-model発動
IS_DEMOデモモード(メール/組織名非表示)
SLASH_COMMAND_TOOL_CHAR_BUDGETSkillメタデータの文字予算
MAX_STRUCTURED_OUTPUT_RETRIES--json-schema検証失敗時の再試行数(デフォルト5)
CLAUDECODEClaude Code配下シェルで1に自動設定(検出用)
CLAUDE_AGENT_SDK_DISABLE_BUILTIN_AGENTS組み込みsubagent無効化

OpenTelemetry

変数用途
OTEL_LOG_RAW_API_BODIESMessages API丸ごとをOTELログに含める
OTEL_LOG_TOOL_CONTENT / OTEL_LOG_TOOL_DETAILS / OTEL_LOG_USER_PROMPTSツール/プロンプト情報の出力制御
OTEL_METRICS_INCLUDE_ACCOUNT_UUID / OTEL_METRICS_INCLUDE_SESSION_ID / OTEL_METRICS_INCLUDE_VERSIONメトリクス属性
CLAUDE_CODE_OTEL_FLUSH_TIMEOUT_MS / CLAUDE_CODE_OTEL_SHUTDOWN_TIMEOUT_MS / CLAUDE_CODE_OTEL_HEADERS_HELPER_DEBOUNCE_MSOTELタイムアウト

標準のOTEL_METRICS_EXPORTEROTEL_LOGS_EXPORTEROTEL_EXPORTER_OTLP_ENDPOINTOTEL_EXPORTER_OTLP_PROTOCOLOTEL_EXPORTER_OTLP_HEADERSOTEL_METRIC_EXPORT_INTERVALOTEL_RESOURCE_ATTRIBUTESとそのシグナル固有バリアントも同様にサポートされます。

設計原則

秘匿情報と環境依存値は環境変数、再現したい挙動はsettings.jsonが基本線です。APIキーをsettings.jsonに書くとgit commitで流出する事故が現実に起こるので、direnv/OSキーチェーン/1Password CLI/apiKeyHelperと組み合わせるのが安全です。

CLIフラグで上書きできる設定

claude起動時のフラグはセッション単位で多くの項目を上書きできます。公式docsの全フラグを用途別に並べると次の通りです。

サブコマンド

コマンド用途
claude対話セッション開始
claude "query"初期プロンプト付きで対話開始
claude -p "query"SDK経由で実行して終了
claude -c / claude -c -p "query"最新会話を継続
claude -r "<session>" "query"セッションID/名で再開
claude update最新版に更新
claude auth login / logout / status認証管理(--email/--sso/--console/--text)
claude agents設定済みsubagent一覧
claude auto-mode defaults組み込みauto mode分類器ルール出力
claude mcpMCPサーバー設定
claude pluginプラグイン管理(エイリアスplugins)
claude remote-controlリモートコントロールサーバー起動

モード・モデル・ツール制御

フラグ用途
--modelモデル指定(sonnet/opus/完全名)
--fallback-modelプライマリ過負荷時のフォールバック(printモードのみ)
--effortlow/medium/high/max
--permission-modedefault/acceptEdits/plan/auto/dontAsk/bypassPermissions
--allowedTools / --disallowedTools追加allow/deny。settings.jsonと同構文
--tools組み込みツールの許可セット(""/"default"/"Bash,Edit,Read")
--dangerously-skip-permissions全権限プロンプトスキップ
--allow-dangerously-skip-permissionsShift+TabサイクルにbypassPermissions追加
--enable-auto-modeShift+Tabサイクルでauto mode解除(Team/Enterprise/API)
--bare最小起動(CLAUDE_CODE_SIMPLE相当)
--betasベータヘッダー(APIキーのみ)

ファイル・セッション

フラグ用途
--add-dir追加の作業ディレクトリ
--agentエージェント設定の上書き
--agentsJSONでsubagentを動的定義
--session-id / --resume(-r) / --continue(-c) / --fork-sessionセッション管理
--from-prGitHub PRにリンクされたセッションを再開
--name(-n)セッション表示名
--worktree(-w) / --tmuxgit worktreeで起動
--setting-sources読み込む設定ソース(user,project,local)
--settings追加で読み込む設定JSON
--mcp-config / --strict-mcp-configMCP設定ファイル指定
--plugin-dirプラグインディレクトリ追加

システムプロンプト系(4種)

フラグ挙動
--system-promptデフォルトプロンプト全体を置き換え
--system-prompt-fileファイル内容で置き換え
--append-system-prompt末尾に追加
--append-system-prompt-fileファイル内容を末尾追加

置き換えフラグは相互排他、追加フラグは置き換えフラグと組み合わせられます。破壊的な置き換えが不要なら--append側が安全です。

非対話(print)モード系

フラグ用途
--print(-p)非対話で応答出力
--output-formattext/json/stream-json
--input-formattext/stream-json
--include-hook-eventsフックライフサイクルイベントを出力ストリームに含める(stream-json必須)
--include-partial-messages部分ストリーミングイベントを含める
--replay-user-messagesstdinユーザーメッセージをstdoutに再発行
--max-turnsエージェントターン数上限
--max-budget-usdAPI支出上限(USD)
--json-schemaJSON Schemaに一致する検証済み出力
--no-session-persistenceセッションをディスク保存しない
--permission-prompt-tool権限プロンプトを処理するMCPツール指定

その他

--verbose / --debug / --debug-file / --version / --ide / --no-chrome / --chrome / --init / --init-only / --maintenance / --remote / --remote-control(--rc) / --teleport / --teammate-mode / --disable-slash-commands / --channels / --dangerously-load-development-channels など。

permissionsフィールド詳細

permissionsallow/ask/deny/additionalDirectories/defaultMode/disableBypassPermissionsMode/skipDangerousModePermissionPromptの7フィールドで構成されます。

構文の基本

ルールはToolまたはTool(specifier)形式で、deny → ask → allowの順に評価され、最初にマッチしたものが勝ちます。denyが優先される設計なので、上位スコープのdenyは下位で覆せません。

.claude/settings.json
{
  "permissions": {
    "allow": ["Bash(npm run *)", "Bash(git diff *)", "Read(~/.config/**)"],
    "ask": ["Bash(git push *)"],
    "deny": ["Bash(curl *)", "Read(./.env*)", "Read(./secrets/**)"],
    "additionalDirectories": ["../shared-lib/"],
    "defaultMode": "acceptEdits",
    "disableBypassPermissionsMode": "disable"
  }
}

ツール別パターン

Bash

  • *ワイルドカードが強力: Bash(npm run *)npm runで始まる全てにマッチ
  • Bash(git * main)git checkout maingit push origin mainにマッチ
  • シェルオペレータ(&&/||/;/|/改行)は独立評価: Bash(safe-cmd *)ではsafe-cmd && other-cmdは許可されない
  • timeout / time / nice / nohup / stdbuf / 引数なしxargsは前置ラッパーとしてstripされた後にルールが適用される
  • 一方、devbox run / npx / docker execなどの開発環境ランナーはstripされないBash(devbox run *)は後ろの任意コマンドを通してしまうので、内部コマンドごとに明示的ルールを書くのが安全
  • 読み取り専用コマンド(ls/cat/grep/find/wc/diff/cd/読み取り系git等)は全モードで承認不要

Read / Edit(gitignore風パスパターン)

パターン意味
//pathファイルシステムルートからの絶対パス
~/pathホームディレクトリ基準
/pathプロジェクトルートからの相対パス
path / ./pathカレントディレクトリからの相対

Editは書き込み系全ビルトイン、ReadGrep/Globなど読み取り系全般にベストエフォート適用されます。

重要: Read/Editのdenyはbashサブプロセスには効きませんRead(./.env)を拒否してもcat .envは通ります。OSレベルで遮断するにはsandbox.filesystem.denyReadを併用します。詳細はClaude Codeセキュリティガイドでも扱っています。

WebFetch / MCP / Agent

  • WebFetch(domain:example.com) — ドメイン指定
  • mcp__<server> / mcp__<server>__* / mcp__<server>__<tool> — MCPサーバー/ツール単位
  • Agent(AgentName) — 特定のsubagent

権限モード(Permission Modes)

モード挙動典型シーン
default各ツール初回使用時に確認慎重に進める通常利用
acceptEdits編集系(mkdir/touch/mv/cp含む)を作業ディレクトリ内で自動承認、Bashは都度個人開発の本体作業
planファイル分析のみ。変更・コマンド実行は不可未知のリポジトリで方針検討
auto分類器モデルでブロック/許可を自動判定(研究プレビュー)信頼境界が明示された環境
dontAsk事前承認済み以外は自動拒否明示的な許可集合だけを許す運用
bypassPermissions保護ディレクトリ(.git/.claude/.vscode/.idea/.husky)以外の確認をスキップコンテナ・VMなど隔離環境

bypassPermissionsは閉じたサンドボックス以外では使わないのが実務の安全ラインです。組織として強制するには、managed設定でpermissions.disableBypassPermissionsMode: "disable"を入れます。

additionalDirectoriesの勘所

追加ディレクトリはファイルアクセスを拡張するだけで、そこの.claude/設定は大半読み込まれません。例外は.claude/skills/(ライブリロード付き)、enabledPlugins/extraKnownMarketplaces、そしてCLAUDE_CODE_ADDITIONAL_DIRECTORIES_CLAUDE_MD=1を設定した場合のCLAUDE.md.claude/rules/です。subagents・commands・hooksを共有したいなら、ユーザーレベル設定かプラグインに寄せるのが正攻法です。

sandboxフィールド詳細

BashサンドボックスはOSレベルでの分離を提供し、権限ルール(Claude側のツールアクセス)とは別の防御層として機能します。macOS・Linux・WSL2で有効化できます。

主要フィールド

フィールド用途
sandbox.enabledbashサンドボックス有効化
sandbox.failIfUnavailableサンドボックス起動失敗で終了(managedでハードゲートに)
sandbox.autoAllowBashIfSandboxedサンドボックス内なら自動承認
sandbox.excludedCommandsサンドボックス外で実行するコマンド
sandbox.allowUnsandboxedCommandsdangerouslyDisableSandboxエスケープハッチの可否
sandbox.filesystem.allowWrite書き込み可能な追加パス(スコープ間マージ)
sandbox.filesystem.denyWrite書き込み不可のパス
sandbox.filesystem.denyRead読み取り不可のパス
sandbox.filesystem.allowReaddenyRead領域内で再許可するパス
sandbox.filesystem.allowManagedReadPathsOnly(Managed) allowReadをmanagedだけに限定
sandbox.network.allowUnixSockets (macOS) / allowAllUnixSocketsUnixソケット
sandbox.network.allowLocalBinding (macOS)localhostバインド許可
sandbox.network.allowMachLookup (macOS)XPC/Machサービス(プレフィックス*対応)
sandbox.network.allowedDomains / deniedDomains外向きドメイン制御(*ワイルドカード)
sandbox.network.allowManagedDomainsOnly(Managed) allowedDomainsをmanagedだけに限定
sandbox.network.httpProxyPort / socksProxyPort独自プロキシのポート
sandbox.enableWeakerNestedSandboxDocker非特権環境用(Linux/WSL2)
sandbox.enableWeakerNetworkIsolation (macOS)システムTLS信頼サービスを許可

設定例

.claude/settings.json
{
  "sandbox": {
    "enabled": true,
    "autoAllowBashIfSandboxed": true,
    "excludedCommands": ["docker *"],
    "filesystem": {
      "allowWrite": ["/tmp/build", "~/.kube"],
      "denyRead": ["~/.aws/credentials"]
    },
    "network": {
      "allowedDomains": ["github.com", "*.npmjs.org", "registry.yarnpkg.com"],
      "deniedDomains": ["uploads.github.com"],
      "allowLocalBinding": true
    }
  }
}

パスは/tmp/buildのような絶対パス、~/.kubeのようなホーム基準、./outputのようなプロジェクト相対(./または接頭辞なし)が使えます。//pathの旧記法も絶対パスとして機能します。

hooksフィールド詳細

hooksはイベント → matcher → ハンドラー配列の3段ネスト構造で、Claudeに何かをさせるのではなくharnessが外部コマンド/HTTPを実行する仕組みです。

全イベント

カテゴリ代表イベント
セッションSessionStart / SessionEnd / InstructionsLoaded
入力UserPromptSubmit / UserPromptExpansion
ツール実行PreToolUse(ブロック可) / PostToolUse / PostToolUseFailure / PermissionRequest / PermissionDenied
エージェントSubagentStart / SubagentStop / TaskCreated / TaskCompleted / TeammateIdle
応答制御Stop / StopFailure / Notification
環境CwdChanged / FileChanged / ConfigChange
worktreeWorktreeCreate(パス返却必須) / WorktreeRemove
コンパクトPreCompact(ブロック可) / PostCompact
MCPElicitation / ElicitationResult

ハンドラータイプ

typecommand/http/prompt/agentの4種です。

.claude/settings.json(基本形)
{
  "hooks": {
    "PostToolUse": [
      {
        "matcher": "Write|Edit",
        "hooks": [
          {
            "type": "command",
            "command": "\"$CLAUDE_PROJECT_DIR\"/.claude/hooks/lint.sh",
            "timeout": 30,
            "statusMessage": "Linting..."
          }
        ]
      }
    ]
  }
}

終了コード: 0=成功(JSON出力をパース)、2=ブロッキングエラー(stderrがフィードバック)、その他=非ブロッキングエラー(stderrは通知)。PreToolUsePermissionRequestUserPromptSubmitStopPreCompactなどがブロック可能です。

HTTPフックの環境変数補間

PreToolUseでのHTTP検証
{
  "hooks": {
    "PreToolUse": [
      {
        "matcher": "mcp__.*",
        "hooks": [
          {
            "type": "http",
            "url": "http://localhost:8080/validate",
            "headers": { "Authorization": "Bearer $AUTH_TOKEN" },
            "allowedEnvVars": ["AUTH_TOKEN"],
            "timeout": 30
          }
        ]
      }
    ]
  }
}

allowedEnvVarsに列挙した環境変数のみが$VARで補間できます。管理者がallowedHttpHookUrls/httpHookAllowedEnvVarsを設定すると、各フックの許容範囲はそれらとの交差に絞られます。

詳しい運用はHooksセットアップ入門で扱っています。

mcpServersフィールド詳細

MCPサーバーはstdiossehttpの3トランスポートで設定できます(SSEは非推奨・HTTP推奨)。

3トランスポートの最小例

.mcp.json(プロジェクト共有)
{
  "mcpServers": {
    "github": {
      "type": "http",
      "url": "https://api.githubcopilot.com/mcp/"
    },
    "airtable": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "airtable-mcp-server"],
      "env": { "AIRTABLE_API_KEY": "${AIRTABLE_API_KEY}" }
    },
    "legacy": {
      "type": "sse",
      "url": "https://mcp.example.com/sse"
    }
  }
}

スコープと保存先

スコープ保存場所共有
local(既定)~/.claude.json(プロジェクトパスの下)×
project<repo>/.mcp.json○(git commit)
user~/.claude.json全プロジェクトの自分のみ

claude mcp add --scope <scope>か直接ファイル編集で登録します。.mcp.jsonでは${VAR} / ${VAR:-default}の環境変数展開がサポートされ、チームで共有しつつマシン固有の値を外出しできます。claude mcp add-from-claude-desktopでClaude Desktopからの移行もできます。

headersHelperによる動的認証

OAuth以外の認証(Kerberos/短期トークン/社内SSO等)にはheadersHelperを使います。起動/再接続ごとにスクリプトを実行し、stdoutに{"Authorization": "Bearer xxx"}のようなJSONを書かせるとヘッダーとしてマージされます。

.mcp.json
{
  "mcpServers": {
    "internal-api": {
      "type": "http",
      "url": "https://mcp.internal.example.com",
      "headersHelper": "/opt/bin/get-mcp-auth-headers.sh"
    }
  }
}

環境変数CLAUDE_CODE_MCP_SERVER_NAMECLAUDE_CODE_MCP_SERVER_URLがスクリプトに渡されるので、1つのヘルパーで複数サーバーを捌けます。

管理ポリシーでの制御

組織ではmanaged-mcp.jsonによる排他的制御(ユーザー追加不可)か、allowedMcpServers/deniedMcpServers許可/拒否リストで制御します。後者はserverName / serverCommand(配列完全一致) / serverUrl(*ワイルドカード)の3方式でフィルタ可能です。詳しい手順はMCP実践ガイドでまとめています。

outputStyleでClaudeの振る舞いを切り替える

出力スタイルはClaude Codeのシステムプロンプトそのものを差し替える仕組みです。CLAUDE.md--append-system-promptがシステムプロンプトの「後」に追加するのに対し、出力スタイルはソフトウェアエンジニアリング固有の組み込み命令を丸ごと置き換えます。

組み込みスタイル

スタイル用途
Defaultソフトウェアエンジニアリング向けの既定
Explanatory教育的な「Insights」付きで実装理由を説明
LearningTODO(human)マーカーで学習者に実装を委ねる協調モード

カスタム出力スタイル

~/.claude/output-styles/<name>.md(ユーザー)または.claude/output-styles/<name>.md(プロジェクト)にfrontmatter付きマークダウンを置きます。

.claude/output-styles/reviewer.md
---
name: Reviewer
description: コードレビュー専用、実装はせず指摘のみ
keep-coding-instructions: false
---
 
あなたはシニアエンジニアとしてコードレビューを行います。
実装ではなく、問題点・改善提案・質問のみを出力してください。

keep-coding-instructions: trueにすると、組み込みのコーディング命令(テスト検証など)を残したまま追記する形になります。falseにするとコーディング命令を丸ごとオフにしてレビュアー専用/ライター専用のエージェントに変身させられます。

statusLineの動的カスタマイズ

ステータスラインはシェルスクリプトの出力をそのまま表示します。stdinにJSONセッションデータが流れ込み、stdoutに書いたテキストが描画されます。

~/.claude/settings.json
{
  "statusLine": {
    "type": "command",
    "command": "~/.claude/statusline.sh",
    "padding": 2,
    "refreshInterval": 5
  }
}

受け取れる主要フィールド(抜粋)

model.display_name / workspace.current_dir / workspace.project_dir / workspace.git_worktree / context_window.used_percentage / context_window.current_usage / cost.total_cost_usd / cost.total_duration_ms / rate_limits.five_hour.used_percentage / rate_limits.seven_day.used_percentage / session_id / session_name / version / output_style.name / vim.mode / agent.name / worktree.* / exceeds_200k_tokensなど30種以上。

コンテキスト使用率の正確な値はused_percentageで、total_input_tokensはセッション全体の累積(コンテキストウィンドウを超え得る)。用途を分ける必要があります。

更新タイミング

新しいアシスタントメッセージ後 / 権限モード変更時 / vimモード切替時にスクリプトが実行され、300msでデバウンスされます。アイドル中も更新したい場合はrefreshIntervalで秒単位のタイマー更新を追加します。

subagentStatusLineを設定すれば、エージェントパネルの各行もカスタム描画に差し替えられます。

CLAUDE.mdメモリ統合

CLAUDE.mdはharnessが決める「実行環境」とは別に、Claude本体の振る舞いを整えるマークダウンです。各セッションの開始時にシステムプロンプト直後のユーザーメッセージとして投入されます。

階層と読み込み順

スコープパス用途
管理ポリシーmacOS: /Library/Application Support/ClaudeCode/CLAUDE.md / Linux: /etc/claude-code/CLAUDE.md / Windows: C:\Program Files\ClaudeCode\CLAUDE.md組織全体で強制(個別設定で除外不可)
プロジェクト./CLAUDE.mdまたは./.claude/CLAUDE.mdチーム共有のプロジェクト規約
ユーザー~/.claude/CLAUDE.md全プロジェクト共通の個人ルール
ローカル./CLAUDE.local.md.gitignore推奨の個人メモ

ワーキングディレクトリから親ディレクトリへ遡り途中の全てのCLAUDE.mdCLAUDE.local.mdがコンテキストに追加されます。サブディレクトリ内のCLAUDE.mdはオンデマンド読み込みで、そのディレクトリのファイルを読むときに初めて展開されます。

@file参照と再帰ロード

@path/to/file記法で他ファイルをインポートできます。相対パスはインポート元ファイル基準、絶対パスも可。最大5ホップまで再帰で展開されます。モノレポの共有規約をサブリポジトリに取り込む構成や、~/.claude/配下の個人ルールを@~/.claude/my-rules.mdで引き込む構成が効きます。

AGENTS.mdとの併用

Claude CodeはAGENTS.mdを直接読みませんが、CLAUDE.mdの先頭に@AGENTS.mdと書けば両方のエージェント向け命令を一元管理できます。本プロジェクトのCLAUDE.mdもこのパターンです。

ベストプラクティス

CLAUDE.md1ファイル200行以下が推奨です。長くなりすぎるとコンテキストを消費し、遵守度も下がります。分割するには@インポートか.claude/rules/<topic>.mdを使います。pathsフィールド付きの条件ルールにすると、一致するファイルを読むときだけロードされるため、モノレポで特に有効です。

.claude/rules/api.md
---
paths:
  - "src/api/**/*.ts"
  - "lib/**/*.ts"
---
 
# API開発ルール
 
- 全てのエンドポイントは入力検証を含める
- 標準エラー応答形式を使用する

10の実務パターンはCLAUDE.md 10パターンにまとめています。

実戦レシピ10選

公式docsが「各フィールドの仕様」までで止まっているところを埋める、運用面での組み合わせレシピです。全て動くコード例+解説+落とし穴をセットで。

レシピ1: PostToolUseで自動フォーマット

編集のたびにprettierを走らせて差分ノイズを抑えます。

.claude/settings.json
{
  "hooks": {
    "PostToolUse": [
      {
        "matcher": "Write|Edit",
        "hooks": [
          {
            "type": "command",
            "command": "pnpm exec prettier --write --ignore-unknown \"$CLAUDE_PROJECT_DIR\"",
            "timeout": 30
          }
        ]
      }
    ]
  }
}

落とし穴: timeoutを明示しないとデフォルト600秒でブロックされ得ます。また、フォーマッター自体がエラーで終了コード2を返すとツール実行が止まるので、ラッパースクリプトで|| trueを噛ませるのも手です。

レシピ2: Bash許可リストでサンドボックス的運用

~/.claude/settings.json(User scope)
{
  "permissions": {
    "defaultMode": "acceptEdits",
    "additionalDirectories": ["~/work/shared-lib"],
    "allow": [
      "Bash(pnpm *)",
      "Bash(npm run *)",
      "Bash(git diff *)",
      "Bash(git log *)",
      "Bash(git status*)",
      "Bash(gh pr list*)"
    ],
    "ask": ["Bash(git push*)", "Bash(gh pr create*)"],
    "deny": ["Bash(rm -rf *)", "Bash(curl *)", "Bash(sudo *)"]
  }
}

落とし穴: Bash(git * main)のようなワイルドカードはgit reset --hard mainなどにもマッチするので、危険コマンドはdenyに個別追加しておくのが安全です。

レシピ3: Bedrockを使うときの最小設定

~/.claude/settings.json
{
  "env": {
    "CLAUDE_CODE_USE_BEDROCK": "1",
    "AWS_REGION": "us-east-1",
    "ANTHROPIC_MODEL": "us.anthropic.claude-sonnet-4-6-20250929-v1:0",
    "ANTHROPIC_SMALL_FAST_MODEL": "us.anthropic.claude-haiku-4-5-20251001-v1:0"
  },
  "awsAuthRefresh": "aws sso login --profile my-profile"
}

落とし穴: AWS SSO運用ではawsAuthRefreshを書いておくと、セッション途中で認証切れしたときに自動再ログインしてくれます。CLAUDE_CODE_SKIP_BEDROCK_AUTH=1はLLMゲートウェイ経由時のみ使います。

レシピ4: チーム共通設定をプロジェクトで配布

.claude/settings.json(git管理対象)
{
  "$schema": "https://json.schemastore.org/claude-code-settings.json",
  "model": "claude-sonnet-4-6",
  "availableModels": ["sonnet", "opus"],
  "includeGitInstructions": false,
  "permissions": {
    "defaultMode": "default",
    "allow": [
      "Bash(pnpm run *)",
      "Bash(pnpm exec *)",
      "Bash(pnpm test*)",
      "Read(./package.json)",
      "Read(./tsconfig.json)"
    ],
    "ask": ["Bash(git push*)"],
    "deny": ["Read(./.env*)", "Read(./secrets/**)", "Bash(curl *)"]
  },
  "hooks": {
    "PostToolUse": [
      {
        "matcher": "Write|Edit",
        "hooks": [
          { "type": "command", "command": "pnpm exec biome check --write --unsafe \"$CLAUDE_PROJECT_DIR\"", "timeout": 30 }
        ]
      }
    ]
  },
  "statusLine": {
    "type": "command",
    "command": "~/.claude/statusline.sh"
  }
}

落とし穴: apiKeyHelperenvのAPIキーは絶対に.claude/settings.jsonに書かない(git commitされるため)。個人差のある設定は~/.claude/settings.json.claude/settings.local.jsonに寄せます。

レシピ5: Managed policyでbypassPermissionsを禁止

/Library/Application Support/ClaudeCode/managed-settings.json
{
  "permissions": {
    "disableBypassPermissionsMode": "disable",
    "disableAutoMode": "disable"
  },
  "allowManagedPermissionRulesOnly": true,
  "disableSkillShellExecution": true,
  "sandbox": {
    "enabled": true,
    "failIfUnavailable": true,
    "filesystem": {
      "allowManagedReadPathsOnly": true
    },
    "network": {
      "allowManagedDomainsOnly": true,
      "allowedDomains": ["github.com", "*.npmjs.org", "api.anthropic.com"]
    }
  },
  "forceLoginMethod": "claudeai",
  "forceLoginOrgUUID": "00000000-0000-0000-0000-000000000000",
  "minimumVersion": "2.1.100"
}

落とし穴: allowManagedPermissionRulesOnly: trueを入れるとユーザー/プロジェクト側のallow/ask/deny全て無視されます。許可したいコマンドはmanaged側で列挙する必要があります。

レシピ6: MCPサーバーにenv経由で秘密情報を渡す

.mcp.json(git commitされる)
{
  "mcpServers": {
    "airtable": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "airtable-mcp-server"],
      "env": {
        "AIRTABLE_API_KEY": "${AIRTABLE_API_KEY}",
        "AIRTABLE_BASE_ID": "${AIRTABLE_BASE_ID:-default_base}"
      }
    },
    "internal-sso": {
      "type": "http",
      "url": "https://mcp.internal.example.com",
      "headersHelper": "/opt/bin/get-internal-token.sh"
    }
  }
}
~/.envrc(direnv)
export AIRTABLE_API_KEY="$(op read 'op://Work/Airtable/credential')"
export AIRTABLE_BASE_ID="appXXXXX"

落とし穴: ${VAR}展開が失敗するとサーバー起動自体が失敗します。デフォルト値が欲しいときは${VAR:-default}、必須にしたいときはデフォルトなしで書きます。

レシピ7: cost alertをhooks.Notification+独自スクリプトで

~/.claude/settings.json
{
  "hooks": {
    "Notification": [
      {
        "hooks": [
          {
            "type": "command",
            "command": "~/.claude/hooks/cost-alert.sh"
          }
        ]
      }
    ]
  }
}
~/.claude/hooks/cost-alert.sh
#!/usr/bin/env bash
set -euo pipefail
input=$(cat)
# 通知が権限プロンプトのときだけSlackへ
type=$(echo "$input" | jq -r '.notification_type // ""')
if [ "$type" = "permission_prompt" ]; then
  curl -s -X POST "$SLACK_WEBHOOK_URL" \
    -H 'Content-Type: application/json' \
    -d "$(jq -n --arg text "Claude Code: 権限プロンプト待ち (session=$(echo "$input" | jq -r .session_id))" '{text: $text}')"
fi
exit 0

落とし穴: Notificationイベントはブロック不可。終了コード2を返しても通知は出ます。非0で終了するとstderrがユーザーに表示されるので、失敗してもサイレントにしたい場合はexit 0で締めます。

レシピ8: statusLineでGit branch+コスト表示

~/.claude/statusline.sh
#!/bin/bash
input=$(cat)
MODEL=$(echo "$input" | jq -r '.model.display_name')
DIR=$(echo "$input" | jq -r '.workspace.current_dir')
COST=$(echo "$input" | jq -r '.cost.total_cost_usd // 0')
PCT=$(echo "$input" | jq -r '.context_window.used_percentage // 0' | cut -d. -f1)
 
BRANCH=""
if git -C "$DIR" rev-parse --git-dir > /dev/null 2>&1; then
  BRANCH=" | 🌿 $(git -C "$DIR" branch --show-current 2>/dev/null)"
fi
 
printf '[%s] 📁 %s%s | 💰 $%.2f | %d%%\n' \
  "$MODEL" "${DIR##*/}" "$BRANCH" "$COST" "$PCT"
~/.claude/settings.json
{
  "statusLine": {
    "type": "command",
    "command": "~/.claude/statusline.sh",
    "refreshInterval": 5
  }
}

落とし穴: gitコマンドが遅いと描画がブロックされます。モノレポではsession_idを使ったキャッシュを挟むと快適です(公式docsの「高コストな操作をキャッシュする」パターン)。

レシピ9: outputStyleでレビュアー役を切り替え

.claude/output-styles/pr-reviewer.md
---
name: PR Reviewer
description: コードレビュー専用(実装禁止)
keep-coding-instructions: false
---
 
あなたはシニアエンジニアです。実装変更は一切行わず、以下を出力してください:
 
1. 変更点のサマリー
2. リスクの高い箇所(セキュリティ/パフォーマンス/破壊的変更)
3. 改善提案(優先度付き)
4. 質問/確認事項
 
敬体(ですます調)で書いてください。
.claude/settings.json
{
  "outputStyle": "PR Reviewer"
}

落とし穴: keep-coding-instructions: falseはテスト検証などの組み込み命令も切るので、実装させる意図ならtrueにします。

レシピ10: CLAUDE.md@file参照で肥大化させない

CLAUDE.md
# プロジェクト共通ルール
 
@AGENTS.md
@.claude/rules/coding-style.md
@.claude/rules/git-workflow.md
 
# 補足(Claude Code専用)
 
- 変更前に `pnpm run typecheck` を通すこと
- `src/api/` 配下は `.claude/rules/api.md` を参照
.claude/rules/api.md
---
paths:
  - "src/api/**/*.ts"
---
 
# API開発ルール
 
- 入力検証は zod で実装
- エラーレスポンスは `{ error: { code, message } }` 形式

落とし穴: paths付きのルールは一致ファイルを読むまでロードされません。常に必要なルールはpathsなしのルールかCLAUDE.md直書きにします。再帰深度は5ホップまで。

3シナリオ別の即貼付プリセットJSON

個人開発・チーム開発・エンタープライズの3シナリオで、そのまま貼り付けて運用開始できる完全版のJSONを示します。

個人開発プリセット: ~/.claude/settings.json

スピード重視。acceptEditsで走り抜けつつ、危険操作だけ明示的にガードします。

~/.claude/settings.json
{
  "$schema": "https://json.schemastore.org/claude-code-settings.json",
  "model": "claude-sonnet-4-6",
  "outputStyle": "Default",
  "language": "japanese",
  "includeGitInstructions": true,
  "attribution": {
    "commit": "",
    "pr": ""
  },
  "permissions": {
    "defaultMode": "acceptEdits",
    "additionalDirectories": ["~/work/shared"],
    "allow": [
      "Bash(pnpm *)",
      "Bash(npm *)",
      "Bash(bun *)",
      "Bash(git diff *)",
      "Bash(git log *)",
      "Bash(git status*)",
      "Bash(git branch*)",
      "Bash(gh repo view*)",
      "Bash(gh pr list*)",
      "Bash(gh issue list*)",
      "Read(~/.config/**)"
    ],
    "ask": [
      "Bash(git push*)",
      "Bash(gh pr create*)",
      "Bash(gh pr merge*)"
    ],
    "deny": [
      "Bash(rm -rf *)",
      "Bash(curl *)",
      "Bash(wget *)",
      "Bash(sudo *)",
      "Bash(git push --force*)",
      "Bash(git push -f*)",
      "Read(./.env*)",
      "Read(./secrets/**)"
    ]
  },
  "hooks": {
    "PostToolUse": [
      {
        "matcher": "Write|Edit",
        "hooks": [
          {
            "type": "command",
            "command": "pnpm exec prettier --write --ignore-unknown \"$CLAUDE_PROJECT_DIR\" 2>/dev/null || true",
            "timeout": 30
          }
        ]
      }
    ]
  },
  "statusLine": {
    "type": "command",
    "command": "~/.claude/statusline.sh",
    "refreshInterval": 5
  },
  "env": {
    "CLAUDE_CODE_ENABLE_TELEMETRY": "0",
    "BASH_DEFAULT_TIMEOUT_MS": "180000",
    "MAX_MCP_OUTPUT_TOKENS": "50000"
  }
}

選定理由: APIキーはenvに直書きせずdirenvやOSキーチェーンから注入。acceptEditsで割り込みを減らし、git push系だけaskに残すことで「不可逆操作はワンクリック確認」を保ちます。attributionを空にして個人リポジトリの署名を消しています。

チーム開発プリセット: .claude/settings.json(project)

clone直後に権限・モデル・hook・statusLineが揃った状態を作ります。個人差は~/.claude/側に逃がします。

.claude/settings.json
{
  "$schema": "https://json.schemastore.org/claude-code-settings.json",
  "model": "claude-sonnet-4-6",
  "availableModels": ["sonnet", "opus"],
  "includeGitInstructions": false,
  "permissions": {
    "defaultMode": "default",
    "allow": [
      "Bash(pnpm install)",
      "Bash(pnpm run *)",
      "Bash(pnpm exec *)",
      "Bash(pnpm test*)",
      "Bash(pnpm typecheck*)",
      "Bash(git diff *)",
      "Bash(git log *)",
      "Bash(git status*)",
      "Bash(git branch*)"
    ],
    "ask": [
      "Bash(git push*)",
      "Bash(gh pr create*)",
      "Bash(gh pr merge*)",
      "Bash(pnpm publish*)"
    ],
    "deny": [
      "Bash(rm -rf *)",
      "Bash(curl *)",
      "Bash(sudo *)",
      "Bash(git push --force*)",
      "Read(./.env*)",
      "Read(./secrets/**)",
      "Read(./config/credentials.json)",
      "Edit(./.github/workflows/**)"
    ]
  },
  "hooks": {
    "PreToolUse": [
      {
        "matcher": "Bash",
        "hooks": [
          {
            "type": "command",
            "if": "Bash(pnpm publish*)",
            "command": "\"$CLAUDE_PROJECT_DIR\"/.claude/hooks/pre-publish-check.sh",
            "timeout": 60
          }
        ]
      }
    ],
    "PostToolUse": [
      {
        "matcher": "Write|Edit",
        "hooks": [
          {
            "type": "command",
            "command": "pnpm exec biome check --write --unsafe \"$CLAUDE_PROJECT_DIR\" 2>/dev/null || true",
            "timeout": 30
          }
        ]
      }
    ],
    "SessionStart": [
      {
        "hooks": [
          {
            "type": "command",
            "command": "\"$CLAUDE_PROJECT_DIR\"/.claude/hooks/setup-env.sh"
          }
        ]
      }
    ]
  },
  "statusLine": {
    "type": "command",
    "command": "\"$CLAUDE_PROJECT_DIR\"/.claude/scripts/statusline.sh",
    "padding": 1,
    "refreshInterval": 10
  },
  "enableAllProjectMcpServers": false,
  "enabledMcpjsonServers": ["github", "internal-docs"],
  "attribution": {
    "commit": "",
    "pr": ""
  },
  "claudeMdExcludes": [
    "**/node_modules/**/CLAUDE.md"
  ]
}

選定理由: defaultMode: "default"で新メンバーが意図せず破壊しない。includeGitInstructions: falseで独自のgitワークフロー(commit prefix規約等)をCLAUDE.mdで定義する前提。availableModelsでHaikuを除外し、品質のばらつきを抑えます。enabledMcpjsonServersで安全なサーバーのみ承認。

エンタープライズプリセット: managed-settings.json

監査・DLP・コスト管理が前提。managed層をハード境界として使います。

/Library/Application Support/ClaudeCode/managed-settings.json
{
  "$schema": "https://json.schemastore.org/claude-code-settings.json",
  "minimumVersion": "2.1.100",
  "forceLoginMethod": "claudeai",
  "forceLoginOrgUUID": "00000000-0000-0000-0000-000000000000",
  "forceRemoteSettingsRefresh": true,
  "availableModels": ["sonnet", "opus"],
  "model": "claude-sonnet-4-6",
  "permissions": {
    "defaultMode": "default",
    "disableBypassPermissionsMode": "disable",
    "disableAutoMode": "disable",
    "skipDangerousModePermissionPrompt": false
  },
  "allowManagedPermissionRulesOnly": true,
  "allowManagedHooksOnly": true,
  "allowManagedMcpServersOnly": true,
  "allowedMcpServers": [
    { "serverName": "github" },
    { "serverUrl": "https://mcp.internal.example.com/*" }
  ],
  "deniedMcpServers": [
    { "serverName": "filesystem" }
  ],
  "allowedHttpHookUrls": [
    "https://audit.internal.example.com/*",
    "https://hooks.internal.example.com/*"
  ],
  "httpHookAllowedEnvVars": ["AUDIT_TOKEN"],
  "sandbox": {
    "enabled": true,
    "failIfUnavailable": true,
    "autoAllowBashIfSandboxed": false,
    "allowUnsandboxedCommands": false,
    "excludedCommands": ["docker *"],
    "filesystem": {
      "allowManagedReadPathsOnly": true,
      "allowRead": ["."],
      "denyRead": [
        "~/.aws/credentials",
        "~/.ssh/**",
        "~/.config/gh/**"
      ],
      "allowWrite": ["/tmp/build"]
    },
    "network": {
      "allowManagedDomainsOnly": true,
      "allowedDomains": [
        "api.anthropic.com",
        "github.com",
        "*.githubusercontent.com",
        "registry.npmjs.org",
        "*.internal.example.com"
      ],
      "deniedDomains": [
        "pastebin.com",
        "transfer.sh"
      ],
      "allowLocalBinding": false
    }
  },
  "strictKnownMarketplaces": [
    { "source": "github", "repo": "example-corp/approved-plugins" }
  ],
  "blockedMarketplaces": [
    { "source": "github", "repo": "untrusted/plugins" }
  ],
  "channelsEnabled": false,
  "allowedChannelPlugins": [],
  "disableSkillShellExecution": true,
  "env": {
    "CLAUDE_CODE_USE_BEDROCK": "1",
    "AWS_REGION": "us-east-1",
    "CLAUDE_CODE_ENABLE_TELEMETRY": "1",
    "OTEL_METRICS_EXPORTER": "otlp",
    "OTEL_LOGS_EXPORTER": "otlp",
    "OTEL_EXPORTER_OTLP_ENDPOINT": "https://otlp.internal.example.com",
    "CLAUDE_CODE_DISABLE_GIT_INSTRUCTIONS": "0",
    "CLAUDE_CODE_SUBPROCESS_ENV_SCRUB": "1",
    "DISABLE_INSTALL_GITHUB_APP_COMMAND": "1"
  },
  "companyAnnouncements": [
    "本環境のClaude Codeは監査ログが有効です。秘密情報の投入は禁止されています。"
  ]
}

選定理由: allowManagedPermissionRulesOnly + allowManagedHooksOnly + allowManagedMcpServersOnlyでユーザーが追加で広げる余地を全封forceRemoteSettingsRefreshでリモートポリシー取得失敗時はfail-closedで起動拒否。CLAUDE_CODE_SUBPROCESS_ENV_SCRUB=1でBash/Hooks/MCPの子プロセスからクラウド認証情報を除去し、プロンプトインジェクション経由のシークレット流出経路を塞いでいます。CLAUDE_CODE_USE_BEDROCKでAPIキーをユーザーに持たせずプロバイダーで統制。

トラブルシューティング早見表

症状調べる場所対処
設定が反映されない/statusアクティブソース(User/Project/Local/Managed)を確認。配列はマージされるので重複に注意
権限ルールが効かない/status + deny→ask→allowの順序より特異な上位スコープにdenyがあると下位では覆せない。ManagedでallowManagedPermissionRulesOnly: trueが有効になっていないか確認
hooksが走らないdisableAllHooks / allowManagedHooksOnlymatcherの正規表現、イベント名の綴り、フックコマンドの終了コードを確認。InstructionsLoaded hookでロード状況をログ出力するのも有効
MCPが繋がらない/mcp / claude mcp get <name>stdio/sse/httpの指定ミス、.mcp.jsonでの${VAR}展開失敗、プロジェクトスコープの承認未完了(enableAllProjectMcpServers/enabledMcpjsonServersを確認)
モデルが勝手に変わるavailableModels + CLAUDE_CODE_DISABLE_LEGACY_MODEL_REMAPManaged側でmodelが固定されていないか、環境変数ANTHROPIC_MODELが上書きしていないかを確認
Readのdenyが効かないbash経由のcatを試すRead/Editのdenyはbashサブプロセスに効かない。sandbox.filesystem.denyReadを併用
statusLineが表示されないスクリプトを手動実行実行権限・stdout出力・disableAllHooksがtrueになっていないかを確認。debugはclaude --debug
CLAUDE.mdが読まれない/memoryワーキングディレクトリからの親ディレクトリ辿りでファイル場所を確認。claudeMdExcludes/CLAUDE_CODE_DISABLE_CLAUDE_MDSを確認
思考トークンが膨れるMAX_THINKING_TOKENS + CLAUDE_CODE_DISABLE_ADAPTIVE_THINKING適応的推論モデルでは予算が無視される場合がある。/effort lowまたはCLAUDE_CODE_DISABLE_THINKING=1
自動更新を止めたいDISABLE_AUTOUPDATER + minimumVersionautoUpdatesChannel: "stable"で約1週間の遅延運用も可
セッションが再開できない--no-session-persistenceCLAUDE_CODE_SKIP_PROMPT_HISTORYを確認前セッションで保存が抑止されていた可能性。cleanupPeriodDaysの削除にも注意

セキュリティ・リスクチェック

設定を組むときにハマりやすい落とし穴を、要件別に短くまとめます。

  • 秘匿情報の置き場所: APIキー・トークンはsettings.jsonに直書きせず、env経由+keychain/1Password CLI/direnv/apiKeyHelperで注入。.mcp.json${VAR}展開で外出しする
  • Read/Editのdenyはbashには効かない: .envを守りたければpermissions.denyに加え、sandbox.filesystem.denyReadやOSパーミッションを併用
  • Bashパターン制約は脆い: curlのドメイン制限をBash(curl http://github.com/ *)で書いてもリダイレクトや変数展開で抜ける。URL制御はWebFetch(domain:...)+sandbox.network.allowedDomainsで実施
  • bypassPermissionsの保護範囲: .git/.claude/.vscode/.idea/.huskyは確認を残すが、それ以外は素通りする。VM・コンテナ以外での常用は避ける
  • auto modeallow/soft_deny上書き挙動: 両フィールドを設定するとデフォルトリスト全体が置き換わる。必ずclaude auto-mode defaultsで組み込みルールを出力してから編集する
  • managedとユーザーの配列マージ: 配列はマージされるので、ユーザーがallowに追加することで組織のsoft_denyが例外扱いになるケースがある。回避不能な禁止はpermissions.denyで書く
  • MCPの.mcp.json承認ゲート: プロジェクトスコープのMCPサーバーは初回プロンプトで承認が必要。CIで回すときはenableAllProjectMcpServersenabledMcpjsonServersの明示指定を併用
  • HTTP hooksの環境変数補間: allowedEnvVarsを必ず指定し、managed側でhttpHookAllowedEnvVarsallowedHttpHookUrlsを固定する
  • CLAUDE_CODE_SUBPROCESS_ENV_SCRUB: エンタープライズではデフォルトON推奨。Linuxではps/pgrep/killがホストを見えなくなる副作用があるので、監視ツールはホスト側で動かす
  • strictKnownMarketplaces: 空配列[]で完全ロックダウン。承認プロセスが固まっていない段階では、ポリシー側は厳しめ・extraKnownMarketplacesで事前登録する運用が現実的

より深いセキュリティ設計はClaude Codeセキュリティガイドでも扱っています。

まとめ

Claude Codeの設定は項目数こそ多いものの、5階層(Managed / CLI / Local / Project / User)の優先順位とマージ規則を押さえれば「どこに書くか」は機械的に決まります。

  • settings.jsonharnessの挙動(権限・モデル・hooks・MCP・statusLine・outputStyle・sandbox)を固定
  • 環境変数は秘匿情報と一時切り替えに限定。90種以上あるので用途別の索引としても使える
  • CLAUDE.mdClaude本体の振る舞いを整えるメモリ。@filepathsで分割しコンテキストを節約
  • CLIフラグはセッション単位の上書きで、スクリプト・CIの主役
  • 権限モードとoutputStyleはプリセット的な切り替え
  • Managed層は組織のハード境界allowManaged*Onlyで「ユーザーが広げられない」境界を作る

個人用の~/.claude/settings.jsonCLAUDE.mdを整え、次にプロジェクトごとに.claude/settings.jsonで固定し、組織ではmanaged層でハード境界を引く、という順で育てていくと破綻しにくい構成になります。上記3シナリオプリセットを叩き台にしつつ、自チームの運用ルールに合わせて削り足してみてください。

この記事を共有:XLinkedIn