Claude Code設定ガイド — settings.jsonの主要フィールド・環境変数・実戦レシピ
Claude Codeの設定フィールド・環境変数・CLIフラグをコード例とともに整理。10の実戦レシピ・3シナリオのプリセットJSON・優先順位フローチャートまで扱います。
要点
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階層に整理されています。
- Managed —
managed-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.allow・sandbox.filesystem.allowWrite・claudeMdExcludes・allowedHttpHookUrls等)は全スコープで連結+重複排除されます。Managedが["/opt/company-tools"]を置き、ユーザーが["~/.kube"]を追加した場合、最終構成には両方が含まれます。上書きではなく追加である点は、Managedで絶対に許したくない挙動をpermissions.denyに置くときに重要です(allowを絞ってもユーザーが追加で広げられるため)。
managed-settings.d/ドロップインディレクトリ
ファイルベースのManaged設定ではmanaged-settings.d/*.jsonがサポートされていて、systemd規則に従いmanaged-settings.json→ドロップイン各ファイル(アルファベット順)の順にディープマージされます。10-telemetry.json・20-security.jsonのように数値プレフィックスでマージ順を制御するのが実務パターンです。
アクティブな設定の確認
Claude Code内で/statusを実行すると、Enterprise managed settings (remote) / (plist) / (HKLM) / (file)などどのManagedソースが効いているかまで表示されます。設定ファイルにJSONエラーがあっても/statusで検出できるので、「効かない」ときの最初のデバッグはここです。
settings.jsonの主要フィールド一覧
settings.jsonは階層設定の中心ファイルです。冒頭に$schemaを書くとVS Code/Cursorなどで補完とバリデーションが効きます。
{
"$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-KeyとAuthorization: Bearerに送信 |
attribution | git commit/PRの属性をcommit/prで個別指定。空文字列で非表示 |
autoMemoryDirectory | 自動メモリの保存先ディレクトリ(~/展開可)。プロジェクト設定からは受け付けない |
autoMemoryEnabled | 自動メモリのON/OFF。デフォルトtrue |
autoMode | auto mode分類器のenvironment/allow/soft_denyを散文で指定 |
autoUpdatesChannel | 更新チャネル。"stable"(約1週間古い)/"latest"(デフォルト) |
availableModels | /model/--model/ANTHROPIC_MODELで選べるモデルを制限 |
awaySummaryEnabled | 離席後のセッション要約表示。CLAUDE_CODE_ENABLE_AWAY_SUMMARYと同義 |
awsAuthRefresh / awsCredentialExport | Bedrock認証情報を更新/出力するスクリプト |
claudeMdExcludes | 祖先CLAUDE.mdのうち読み込みをスキップするグロブパターン(配列マージ) |
cleanupPeriodDays | 非アクティブセッションを削除する日数。デフォルト30、最小1 |
companyAnnouncements | 起動時に表示するアナウンス(複数指定でランダム表示) |
defaultShell | !コマンドのシェル。"bash"または"powershell" |
disableAllHooks | 全hooksとカスタムstatuslineを無効化 |
disableAutoMode | "disable"でauto modeを無効にし、Shift+Tabサイクルからも除外 |
disableDeepLinkRegistration | claude-cli://プロトコルハンドラー登録を無効化 |
disabledMcpjsonServers / enabledMcpjsonServers | .mcp.jsonからの拒否リスト/承認リスト |
disableSkillShellExecution | skills/commandsのインラインシェル実行(!`...`)を無効化 |
effortLevel | "low"/"medium"/"high"/"xhigh"を永続化 |
enableAllProjectMcpServers | .mcp.jsonの全MCPサーバーを自動承認 |
enabledPlugins | plugin-name@marketplace-name単位での有効化マップ |
env | 全セッションに適用する環境変数のマップ |
extraKnownMarketplaces | 追加のプラグインマーケットプレイスの定義 |
fastModePerSessionOptIn | 高速モードをセッションごとに/fastで明示的に有効化させる |
feedbackSurveyRate | セッション品質調査の表示確率(0〜1)。0で抑制 |
fileSuggestion | @補完用のカスタムコマンド(JSON入出力) |
forceLoginMethod | "claudeai"/"console"でログイン経路を制限 |
forceLoginOrgUUID | 特定組織のUUIDに所属することを要求 |
hooks | ライフサイクルイベントでのフック実行定義 |
includeCoAuthoredBy | 非推奨。attributionを利用 |
includeGitInstructions | 組み込みのgitワークフロー命令を含めるか。デフォルトtrue |
language | Claudeの応答言語(例: "japanese") |
minimumVersion | 自動更新のフロア("2.1.100"等) |
model | デフォルトモデル("claude-sonnet-4-6"等) |
modelOverrides | モデルIDをプロバイダー固有ID(Bedrock ARN等)にマップ |
otelHeadersHelper | OpenTelemetryヘッダー生成スクリプト |
outputStyle | 出力スタイル("Explanatory"等) |
permissions | allow/ask/deny/additionalDirectories/defaultMode/disableBypassPermissionsMode/skipDangerousModePermissionPrompt |
plansDirectory | プランファイル保存先。デフォルト~/.claude/plans |
prefersReducedMotion | UIアニメーション(スピナー・シマー等)の削減 |
respectGitignore | @ファイルピッカーが.gitignoreを尊重するか |
sandbox | Bashサンドボックスの設定ブロック(詳細は後述) |
showClearContextOnPlanAccept | プラン受諾画面にコンテキストクリアを表示 |
showThinkingSummaries | 拡張思考サマリーの表示 |
skipWebFetchPreflight | WebFetchのドメイン安全チェックをスキップ |
spinnerTipsEnabled / spinnerTipsOverride / spinnerVerbs | スピナー表示のカスタマイズ |
sshConfigs | Desktop環境ドロップダウンのSSH接続一覧 |
statusLine | ステータスライン生成コマンド |
subagentStatusLine | サブエージェントパネル行の生成コマンド |
tui | ターミナルUIレンダラー。"fullscreen"/"default" |
useAutoModeDuringPlan | プランモードでauto modeセマンティクスを使用するか |
viewMode | 起動時のトランスクリプトビュー。"default"/"verbose"/"focus" |
voiceEnabled | プッシュトゥトーク音声ディクテーションの有効化 |
worktree.symlinkDirectories / worktree.sparsePaths | worktreeのディスク使用量最適化 |
Managed設定のみ有効なフィールド
以下はmanaged-settings.jsonに書いた場合だけ効力を持ち、ユーザー/プロジェクト層では無視されます。組織のハード境界を引く役割です。
| フィールド | 用途 |
|---|---|
allowedChannelPlugins | メッセージをプッシュできるチャネルプラグインのホワイトリスト |
allowedHttpHookUrls | HTTP hooksの宛先URLホワイトリスト(*ワイルドカード) |
allowedMcpServers | 設定可能なMCPサーバーのホワイトリスト |
allowManagedHooksOnly | managed/SDK/enabledPlugins由来のhooksのみ許可 |
allowManagedMcpServersOnly | managed設定のallowedMcpServersのみ尊重 |
allowManagedPermissionRulesOnly | ユーザー/プロジェクト設定での権限ルール定義を禁止 |
blockedMarketplaces | マーケットプレイスのブロックリスト |
channelsEnabled | Team/Enterpriseでチャネルを許可 |
deniedMcpServers | 明示的にブロックされるMCPサーバーの拒否リスト |
forceRemoteSettingsRefresh | リモート設定取得成功まで起動をブロック(fail-closed) |
httpHookAllowedEnvVars | HTTP hooksがヘッダーに補間できる環境変数名 |
pluginTrustMessage | プラグイン信頼警告への追加メッセージ |
sandbox.filesystem.allowManagedReadPathsOnly | allowReadパスをmanaged設定だけに限定 |
sandbox.network.allowManagedDomainsOnly | 許可ドメインをmanaged設定だけに限定 |
strictKnownMarketplaces | ユーザーが追加可能なマーケットプレイスのホワイトリスト |
グローバル設定(~/.claude.json)
settings.jsonではなく~/.claude.jsonにしか保存できない項目群。ここに書くべき設定をsettings.jsonに入れるとスキーマエラーになります。
| フィールド | 用途 |
|---|---|
autoConnectIde | 外部ターミナル起動時に実行中のIDEへ自動接続 |
autoInstallIdeExtension | VS CodeターミナルでIDE拡張を自動インストール |
autoScrollEnabled | フルスクリーンで新出力に自動追従 |
editorMode | "normal"/"vim" |
externalEditorContext | Ctrl+Gで外部エディターに前応答を渡す |
showTurnDuration | ターン時間表示(例:「Cooked for 1m 6s」) |
terminalProgressBarEnabled | ターミナル進捗バー(ConEmu/Ghostty/iTerm2) |
teammateMode | エージェントチームの表示モード(auto/in-process/tmux) |
MCP設定のローカル/ユーザースコープも~/.claude.jsonに保存されます(プロジェクトスコープは.mcp.json)。
個別フィールドの代表例
長大なフィールド群の中でも特に誤用が多いものを掘り下げます。
apiKeyHelper — スクリプトでAPIキーを動的発行
{
"apiKeyHelper": "~/.config/claude/get-api-key.sh",
"env": {
"CLAUDE_CODE_API_KEY_HELPER_TTL_MS": "1800000"
}
}#!/bin/bash
# 1Password CLI から取得する例
op read "op://Private/Anthropic API/credential"戻り値はX-Api-KeyヘッダーおよびAuthorization: Bearerヘッダーとして送信されます。TTLを指定すると指定間隔で再取得されるので、短命トークン運用に向きます。
attribution — コミット/PRの署名カスタマイズ
{
"attribution": {
"commit": "",
"pr": ""
}
}両方を空文字列にするとClaudeの署名を完全に非表示にできます。組織ポリシーで「AIアシスト明示」が必要な場合はcommit: "Generated with AI assistance"のようにカスタマイズします。
availableModels — モデル選択の制限
{
"availableModels": ["sonnet", "haiku"]
}Opusの意図しない利用を抑えたい、プロジェクトごとにモデル方針を固定したい、といったケースに使えます。/model・--model・ANTHROPIC_MODELいずれからもリストの外は選べなくなります。
claudeMdExcludes — モノレポでのCLAUDE.md除外
{
"claudeMdExcludes": [
"**/monorepo/CLAUDE.md",
"/Users/me/monorepo/other-team/.claude/rules/**"
]
}他チームのCLAUDE.mdがツリー上で取得されるときに役立ちます。配列はスコープ間でマージされます。
環境変数の全一覧
環境変数は秘匿情報・その場限りの切り替え・CI/コンテナでの注入に向きます。settings.jsonのenvキーで宣言すると全セッションに配布できます(Managedで固定も可能)。
認証・エンドポイント
| 変数 | 用途 |
|---|---|
ANTHROPIC_API_KEY | X-Api-Key。非対話(-p)では常に優先、対話モードは初回承認 |
ANTHROPIC_AUTH_TOKEN | カスタムBearerトークン |
ANTHROPIC_BASE_URL | APIエンドポイントを上書き(プロキシ/ゲートウェイ) |
ANTHROPIC_BEDROCK_BASE_URL / ANTHROPIC_BEDROCK_MANTLE_BASE_URL | Bedrock/Mantleの基底URL |
ANTHROPIC_VERTEX_BASE_URL / ANTHROPIC_VERTEX_PROJECT_ID | Vertex AIの基底URL/GCPプロジェクト |
ANTHROPIC_FOUNDRY_API_KEY / ANTHROPIC_FOUNDRY_BASE_URL / ANTHROPIC_FOUNDRY_RESOURCE | Microsoft Foundry認証 |
ANTHROPIC_BETAS | 追加のanthropic-betaヘッダー(カンマ区切り) |
ANTHROPIC_CUSTOM_HEADERS | Name: Value形式のカスタムヘッダー |
AWS_BEARER_TOKEN_BEDROCK | BedrockのAPIキー認証 |
API_TIMEOUT_MS | APIリクエストのタイムアウト(デフォルト600000/10分) |
CLAUDE_CODE_OAUTH_TOKEN | Claude.ai認証用OAuthアクセストークン |
CLAUDE_CODE_OAUTH_REFRESH_TOKEN / CLAUDE_CODE_OAUTH_SCOPES | 自動化環境用のリフレッシュトークンとスコープ |
CLAUDE_CODE_CERT_STORE | TLSのCA証明書ソース(bundled,systemデフォルト) |
CLAUDE_CODE_CLIENT_CERT / CLAUDE_CODE_CLIENT_KEY / CLAUDE_CODE_CLIENT_KEY_PASSPHRASE | mTLS認証 |
CLAUDE_CODE_PROXY_RESOLVES_HOSTS | プロキシ側でDNS解決させる |
HTTP_PROXY / HTTPS_PROXY / NO_PROXY | 標準プロキシ変数 |
モデル選択
| 変数 | 用途 |
|---|---|
ANTHROPIC_MODEL | 使用モデル名 |
ANTHROPIC_SMALL_FAST_MODEL | [非推奨]バックグラウンドタスク用Haiku |
ANTHROPIC_SMALL_FAST_MODEL_AWS_REGION | Bedrock時の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_AUTH | LLMゲートウェイ経由で自前認証を使う場合 |
CLAUDE_CODE_SUBAGENT_MODEL | subagent用モデル上書き |
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_5 | Vertex AIでのモデル別リージョン |
ツール実行・Bash
| 変数 | 用途 |
|---|---|
BASH_DEFAULT_TIMEOUT_MS | Bashのデフォルトタイムアウト(デフォルト120000) |
BASH_MAX_TIMEOUT_MS | Bashの最大タイムアウト(デフォルト600000) |
BASH_MAX_OUTPUT_LENGTH | Bash出力を中央で切り詰める文字数 |
CLAUDE_BASH_MAINTAIN_PROJECT_WORKING_DIR | Bash/PowerShellコマンド後に元のcwdに戻す |
CLAUDE_CODE_SHELL | 自動シェル検出の上書き |
CLAUDE_CODE_SHELL_PREFIX | 全Bashコマンドをラップするプレフィックス(ログ/監査用) |
CLAUDE_CODE_USE_POWERSHELL_TOOL | Windows/PowerShellツールの制御 |
CLAUDE_CODE_GIT_BASH_PATH | Windowsでbash.exeの明示パス |
USE_BUILTIN_RIPGREP | 0でシステムrgを使用 |
CLAUDE_CODE_GLOB_HIDDEN / CLAUDE_CODE_GLOB_NO_IGNORE / CLAUDE_CODE_GLOB_TIMEOUT_SECONDS | Globツール挙動 |
CLAUDE_CODE_FILE_READ_MAX_OUTPUT_TOKENS | ファイル読み取りのトークン制限 |
CLAUDE_CODE_MAX_TOOL_USE_CONCURRENCY | 並列ツール/subagent数(デフォルト10) |
TASK_MAX_OUTPUT_LENGTH | subagent出力の最大文字数(デフォルト32000) |
コンテキスト・思考予算・出力
| 変数 | 用途 |
|---|---|
CLAUDE_CODE_MAX_OUTPUT_TOKENS | 1応答あたりの最大出力トークン |
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_1H | 1時間キャッシュTTLをリクエスト |
FORCE_PROMPT_CACHING_5M | 5分TTLに強制 |
CLAUDE_CODE_DISABLE_1M_CONTEXT | 1Mコンテキストを無効化 |
MCP・ツール検索
| 変数 | 用途 |
|---|---|
MCP_TIMEOUT | MCPサーバー起動タイムアウト(デフォルト30000) |
MCP_TOOL_TIMEOUT | MCPツール実行タイムアウト |
MAX_MCP_OUTPUT_TOKENS | MCP出力の最大トークン(デフォルト25000) |
ENABLE_TOOL_SEARCH | true/auto/auto:N/false。MCPツールの遅延ロード |
MCP_CLIENT_SECRET | OAuthクライアントシークレット |
MCP_OAUTH_CALLBACK_PORT | OAuthコールバック固定ポート |
MCP_CONNECTION_NONBLOCKING | 非対話モードでMCP接続待機をスキップ |
MCP_REMOTE_SERVER_CONNECTION_BATCH_SIZE / MCP_SERVER_CONNECTION_BATCH_SIZE | 起動時の並列接続数 |
ENABLE_CLAUDEAI_MCP_SERVERS | Claude.ai由来MCPサーバーの有効/無効 |
CLAUDE_AGENT_SDK_MCP_NO_PREFIX | SDK作成MCPでmcp__<server>__プレフィックスを省略 |
テレメトリ・自動更新・運用
| 変数 | 用途 |
|---|---|
CLAUDE_CODE_ENABLE_TELEMETRY | OTELテレメトリを有効化 |
DISABLE_TELEMETRY | Statsigテレメトリを無効化 |
DISABLE_ERROR_REPORTING | Sentryへの送信停止 |
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_ID | Web環境で自動設定 |
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_CHECK | IDE連携 |
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_TRUECOLOR | TUI表示調整 |
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_MODE | Perforce書き込み保護 |
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_HIGHLIGHT | diff出力の構文強調 |
CLAUDE_CODE_TMPDIR | 一時ディレクトリ上書き |
CLAUDE_ENV_FILE | Bashコマンド前に実行するスクリプト(環境永続化) |
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_BUNDLE | claude --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_MODELS | Opus以外でも--fallback-model発動 |
IS_DEMO | デモモード(メール/組織名非表示) |
SLASH_COMMAND_TOOL_CHAR_BUDGET | Skillメタデータの文字予算 |
MAX_STRUCTURED_OUTPUT_RETRIES | --json-schema検証失敗時の再試行数(デフォルト5) |
CLAUDECODE | Claude Code配下シェルで1に自動設定(検出用) |
CLAUDE_AGENT_SDK_DISABLE_BUILTIN_AGENTS | 組み込みsubagent無効化 |
OpenTelemetry
| 変数 | 用途 |
|---|---|
OTEL_LOG_RAW_API_BODIES | Messages 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_MS | OTELタイムアウト |
標準のOTEL_METRICS_EXPORTER・OTEL_LOGS_EXPORTER・OTEL_EXPORTER_OTLP_ENDPOINT・OTEL_EXPORTER_OTLP_PROTOCOL・OTEL_EXPORTER_OTLP_HEADERS・OTEL_METRIC_EXPORT_INTERVAL・OTEL_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 mcp | MCPサーバー設定 |
claude plugin | プラグイン管理(エイリアスplugins) |
claude remote-control | リモートコントロールサーバー起動 |
モード・モデル・ツール制御
| フラグ | 用途 |
|---|---|
--model | モデル指定(sonnet/opus/完全名) |
--fallback-model | プライマリ過負荷時のフォールバック(printモードのみ) |
--effort | low/medium/high/max |
--permission-mode | default/acceptEdits/plan/auto/dontAsk/bypassPermissions |
--allowedTools / --disallowedTools | 追加allow/deny。settings.jsonと同構文 |
--tools | 組み込みツールの許可セット(""/"default"/"Bash,Edit,Read") |
--dangerously-skip-permissions | 全権限プロンプトスキップ |
--allow-dangerously-skip-permissions | Shift+TabサイクルにbypassPermissions追加 |
--enable-auto-mode | Shift+Tabサイクルでauto mode解除(Team/Enterprise/API) |
--bare | 最小起動(CLAUDE_CODE_SIMPLE相当) |
--betas | ベータヘッダー(APIキーのみ) |
ファイル・セッション
| フラグ | 用途 |
|---|---|
--add-dir | 追加の作業ディレクトリ |
--agent | エージェント設定の上書き |
--agents | JSONでsubagentを動的定義 |
--session-id / --resume(-r) / --continue(-c) / --fork-session | セッション管理 |
--from-pr | GitHub PRにリンクされたセッションを再開 |
--name(-n) | セッション表示名 |
--worktree(-w) / --tmux | git worktreeで起動 |
--setting-sources | 読み込む設定ソース(user,project,local) |
--settings | 追加で読み込む設定JSON |
--mcp-config / --strict-mcp-config | MCP設定ファイル指定 |
--plugin-dir | プラグインディレクトリ追加 |
システムプロンプト系(4種)
| フラグ | 挙動 |
|---|---|
--system-prompt | デフォルトプロンプト全体を置き換え |
--system-prompt-file | ファイル内容で置き換え |
--append-system-prompt | 末尾に追加 |
--append-system-prompt-file | ファイル内容を末尾追加 |
置き換えフラグは相互排他、追加フラグは置き換えフラグと組み合わせられます。破壊的な置き換えが不要なら--append側が安全です。
非対話(print)モード系
| フラグ | 用途 |
|---|---|
--print(-p) | 非対話で応答出力 |
--output-format | text/json/stream-json |
--input-format | text/stream-json |
--include-hook-events | フックライフサイクルイベントを出力ストリームに含める(stream-json必須) |
--include-partial-messages | 部分ストリーミングイベントを含める |
--replay-user-messages | stdinユーザーメッセージをstdoutに再発行 |
--max-turns | エージェントターン数上限 |
--max-budget-usd | API支出上限(USD) |
--json-schema | JSON 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フィールド詳細
permissionsはallow/ask/deny/additionalDirectories/defaultMode/disableBypassPermissionsMode/skipDangerousModePermissionPromptの7フィールドで構成されます。
構文の基本
ルールはToolまたはTool(specifier)形式で、deny → ask → allowの順に評価され、最初にマッチしたものが勝ちます。denyが優先される設計なので、上位スコープのdenyは下位で覆せません。
{
"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 mainやgit 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は書き込み系全ビルトイン、ReadはGrep/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.enabled | bashサンドボックス有効化 |
sandbox.failIfUnavailable | サンドボックス起動失敗で終了(managedでハードゲートに) |
sandbox.autoAllowBashIfSandboxed | サンドボックス内なら自動承認 |
sandbox.excludedCommands | サンドボックス外で実行するコマンド |
sandbox.allowUnsandboxedCommands | dangerouslyDisableSandboxエスケープハッチの可否 |
sandbox.filesystem.allowWrite | 書き込み可能な追加パス(スコープ間マージ) |
sandbox.filesystem.denyWrite | 書き込み不可のパス |
sandbox.filesystem.denyRead | 読み取り不可のパス |
sandbox.filesystem.allowRead | denyRead領域内で再許可するパス |
sandbox.filesystem.allowManagedReadPathsOnly | (Managed) allowReadをmanagedだけに限定 |
sandbox.network.allowUnixSockets (macOS) / allowAllUnixSockets | Unixソケット |
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.enableWeakerNestedSandbox | Docker非特権環境用(Linux/WSL2) |
sandbox.enableWeakerNetworkIsolation (macOS) | システムTLS信頼サービスを許可 |
設定例
{
"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 |
| worktree | WorktreeCreate(パス返却必須) / WorktreeRemove |
| コンパクト | PreCompact(ブロック可) / PostCompact |
| MCP | Elicitation / ElicitationResult |
ハンドラータイプ
typeはcommand/http/prompt/agentの4種です。
{
"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は通知)。PreToolUse・PermissionRequest・UserPromptSubmit・Stop・PreCompactなどがブロック可能です。
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サーバーはstdio・sse・httpの3トランスポートで設定できます(SSEは非推奨・HTTP推奨)。
3トランスポートの最小例
{
"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を書かせるとヘッダーとしてマージされます。
{
"mcpServers": {
"internal-api": {
"type": "http",
"url": "https://mcp.internal.example.com",
"headersHelper": "/opt/bin/get-mcp-auth-headers.sh"
}
}
}環境変数CLAUDE_CODE_MCP_SERVER_NAME・CLAUDE_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」付きで実装理由を説明 |
Learning | TODO(human)マーカーで学習者に実装を委ねる協調モード |
カスタム出力スタイル
~/.claude/output-styles/<name>.md(ユーザー)または.claude/output-styles/<name>.md(プロジェクト)にfrontmatter付きマークダウンを置きます。
---
name: Reviewer
description: コードレビュー専用、実装はせず指摘のみ
keep-coding-instructions: false
---
あなたはシニアエンジニアとしてコードレビューを行います。
実装ではなく、問題点・改善提案・質問のみを出力してください。keep-coding-instructions: trueにすると、組み込みのコーディング命令(テスト検証など)を残したまま追記する形になります。falseにするとコーディング命令を丸ごとオフにしてレビュアー専用/ライター専用のエージェントに変身させられます。
statusLineの動的カスタマイズ
ステータスラインはシェルスクリプトの出力をそのまま表示します。stdinにJSONセッションデータが流れ込み、stdoutに書いたテキストが描画されます。
{
"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.md・CLAUDE.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.mdは1ファイル200行以下が推奨です。長くなりすぎるとコンテキストを消費し、遵守度も下がります。分割するには@インポートか.claude/rules/<topic>.mdを使います。pathsフィールド付きの条件ルールにすると、一致するファイルを読むときだけロードされるため、モノレポで特に有効です。
---
paths:
- "src/api/**/*.ts"
- "lib/**/*.ts"
---
# API開発ルール
- 全てのエンドポイントは入力検証を含める
- 標準エラー応答形式を使用する10の実務パターンはCLAUDE.md 10パターンにまとめています。
実戦レシピ10選
公式docsが「各フィールドの仕様」までで止まっているところを埋める、運用面での組み合わせレシピです。全て動くコード例+解説+落とし穴をセットで。
レシピ1: PostToolUseで自動フォーマット
編集のたびにprettierを走らせて差分ノイズを抑えます。
{
"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許可リストでサンドボックス的運用
{
"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を使うときの最小設定
{
"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: チーム共通設定をプロジェクトで配布
{
"$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"
}
}落とし穴: apiKeyHelperやenvのAPIキーは絶対に.claude/settings.jsonに書かない(git commitされるため)。個人差のある設定は~/.claude/settings.jsonか.claude/settings.local.jsonに寄せます。
レシピ5: Managed policyでbypassPermissionsを禁止
{
"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経由で秘密情報を渡す
{
"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"
}
}
}export AIRTABLE_API_KEY="$(op read 'op://Work/Airtable/credential')"
export AIRTABLE_BASE_ID="appXXXXX"落とし穴: ${VAR}展開が失敗するとサーバー起動自体が失敗します。デフォルト値が欲しいときは${VAR:-default}、必須にしたいときはデフォルトなしで書きます。
レシピ7: cost alertをhooks.Notification+独自スクリプトで
{
"hooks": {
"Notification": [
{
"hooks": [
{
"type": "command",
"command": "~/.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+コスト表示
#!/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"{
"statusLine": {
"type": "command",
"command": "~/.claude/statusline.sh",
"refreshInterval": 5
}
}落とし穴: gitコマンドが遅いと描画がブロックされます。モノレポではsession_idを使ったキャッシュを挟むと快適です(公式docsの「高コストな操作をキャッシュする」パターン)。
レシピ9: outputStyleでレビュアー役を切り替え
---
name: PR Reviewer
description: コードレビュー専用(実装禁止)
keep-coding-instructions: false
---
あなたはシニアエンジニアです。実装変更は一切行わず、以下を出力してください:
1. 変更点のサマリー
2. リスクの高い箇所(セキュリティ/パフォーマンス/破壊的変更)
3. 改善提案(優先度付き)
4. 質問/確認事項
敬体(ですます調)で書いてください。{
"outputStyle": "PR Reviewer"
}落とし穴: keep-coding-instructions: falseはテスト検証などの組み込み命令も切るので、実装させる意図ならtrueにします。
レシピ10: CLAUDE.mdを@file参照で肥大化させない
# プロジェクト共通ルール
@AGENTS.md
@.claude/rules/coding-style.md
@.claude/rules/git-workflow.md
# 補足(Claude Code専用)
- 変更前に `pnpm run typecheck` を通すこと
- `src/api/` 配下は `.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で走り抜けつつ、危険操作だけ明示的にガードします。
{
"$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/側に逃がします。
{
"$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層をハード境界として使います。
{
"$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 / allowManagedHooksOnly | matcherの正規表現、イベント名の綴り、フックコマンドの終了コードを確認。InstructionsLoaded hookでロード状況をログ出力するのも有効 |
| MCPが繋がらない | /mcp / claude mcp get <name> | stdio/sse/httpの指定ミス、.mcp.jsonでの${VAR}展開失敗、プロジェクトスコープの承認未完了(enableAllProjectMcpServers/enabledMcpjsonServersを確認) |
| モデルが勝手に変わる | availableModels + CLAUDE_CODE_DISABLE_LEGACY_MODEL_REMAP | Managed側で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 + minimumVersion | autoUpdatesChannel: "stable"で約1週間の遅延運用も可 |
| セッションが再開できない | --no-session-persistenceやCLAUDE_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 modeのallow/soft_deny上書き挙動: 両フィールドを設定するとデフォルトリスト全体が置き換わる。必ずclaude auto-mode defaultsで組み込みルールを出力してから編集する- managedとユーザーの配列マージ: 配列はマージされるので、ユーザーが
allowに追加することで組織のsoft_denyが例外扱いになるケースがある。回避不能な禁止はpermissions.denyで書く - MCPの
.mcp.json承認ゲート: プロジェクトスコープのMCPサーバーは初回プロンプトで承認が必要。CIで回すときはenableAllProjectMcpServersかenabledMcpjsonServersの明示指定を併用 - HTTP hooksの環境変数補間:
allowedEnvVarsを必ず指定し、managed側でhttpHookAllowedEnvVarsとallowedHttpHookUrlsを固定する CLAUDE_CODE_SUBPROCESS_ENV_SCRUB: エンタープライズではデフォルトON推奨。Linuxではps/pgrep/killがホストを見えなくなる副作用があるので、監視ツールはホスト側で動かすstrictKnownMarketplaces: 空配列[]で完全ロックダウン。承認プロセスが固まっていない段階では、ポリシー側は厳しめ・extraKnownMarketplacesで事前登録する運用が現実的
より深いセキュリティ設計はClaude Codeセキュリティガイドでも扱っています。
まとめ
Claude Codeの設定は項目数こそ多いものの、5階層(Managed / CLI / Local / Project / User)の優先順位とマージ規則を押さえれば「どこに書くか」は機械的に決まります。
settings.jsonはharnessの挙動(権限・モデル・hooks・MCP・statusLine・outputStyle・sandbox)を固定- 環境変数は秘匿情報と一時切り替えに限定。90種以上あるので用途別の索引としても使える
CLAUDE.mdはClaude本体の振る舞いを整えるメモリ。@fileとpathsで分割しコンテキストを節約- CLIフラグはセッション単位の上書きで、スクリプト・CIの主役
- 権限モードとoutputStyleはプリセット的な切り替え
- Managed層は組織のハード境界。
allowManaged*Onlyで「ユーザーが広げられない」境界を作る
個人用の~/.claude/settings.jsonとCLAUDE.mdを整え、次にプロジェクトごとに.claude/settings.jsonで固定し、組織ではmanaged層でハード境界を引く、という順で育てていくと破綻しにくい構成になります。上記3シナリオプリセットを叩き台にしつつ、自チームの運用ルールに合わせて削り足してみてください。
関連する記事
Claude Code をもっと見る →Claude Codeのメモリ三層構造 — CLAUDE.md / Settings / Skillsの使い分けと組み合わせ
Claude Code Hooks実例カタログ — 9つのユースケース別レシピと避けたい落とし穴
Claude Codeとは — Anthropicのエージェント型AIコーディングCLIの完全ガイド(2026年4月最新版)
Claude Codeセキュリティ・権限ガイド — 個人 / チーム / 企業の3レイヤー別に実装推奨値を提示
Claude CodeのCLAUDE.mdを実用に引き上げる10のパターン
CursorからClaude Codeへの移行ガイド — 設定の引き継ぎから「Tab補完がない」問題までの実務手順
Claude Code v1.0後半(v1.0.70 〜 v1.0.126)総まとめ — v2.0移行前夜の地ならしを読む
Claude Code Hooksの設定方法 — 初めて書く人の完全手順