settings.jsonで環境を最適化する
Claude Codeの設定ファイルは、影響範囲の異なる3つのスコープで管理されます。 設定が競合した場合は、Enterprise > Project > Userの優先順位で適用されます。
.claude/settings.local.jsonに書きます。私の運用では、ユーザー設定にモデルとテーマを、プロジェクト設定にツール権限とMCPサーバーを、 という使い分けをしています。こうすると、プロジェクトを切り替えても個人の好みは維持しつつ、 プロジェクト固有のルールが自動で適用されます。
settings.jsonで設定できる主要なカテゴリを一覧で紹介します。
// settings.json の全体構造(主要カテゴリ)
{
"model": "sonnet", // デフォルトモデル(sonnet/opus/haiku)
"language": "ja", // 応答言語
"permissions": { ... }, // ツール権限(allow/deny)
"theme": "dark", // テーマ
"cwd": "/path/to/project", // 作業ディレクトリ
"mcpServers": { ... }, // MCPサーバー設定
"hooks": { ... } // フック設定
}sonnet、opus、haikuのほか、sonnet[1m]、opus[1m]のようにコンテキスト長を指定するエイリアスも使えます。jaで日本語になります。permissionsはsettings.jsonの中で最も重要な設定項目です。 どのツールを許可し、どのツールを禁止するかを細かく制御できます。
{
"permissions": {
"allow": [
"Bash(npm run *)", // npm runの全サブコマンドを許可
"Bash(git status)", // git statusのみ許可
"Edit(/src/**)", // srcディレクトリの編集を許可
"Read(/src/**)", // srcディレクトリの読み取りを許可
"mcp__context7__*" // Context7の全ツールを許可
],
"deny": [
"Bash(rm -rf *)", // 再帰削除を拒否
"Read(.env)", // .envの読み取りを拒否
"mcp__dangerous-server__*" // 危険なMCPサーバーを全拒否
],
"defaultMode": "default" // デフォルトのパーミッションモード
}
}パターン構文のポイントは以下のとおりです。
*はワイルドカード。**で再帰マッチ。denyルールは最高優先度です。Enterprise設定でdenyに入れた項目は、 プロジェクト設定やユーザー設定のallowでは上書きできません。 配列設定(allow/deny)はスコープ間で結合・重複排除されます。
Claude Codeは100以上の環境変数に対応しています。 settings.jsonのenvキーで設定するか、シェルの環境変数として渡します。 特に実務で使う頻度の高いものを紹介します。
// settings.json — 環境変数の設定例
{
"env": {
"ANTHROPIC_API_KEY": "sk-ant-...",
"CLAUDE_CODE_MAX_OUTPUT_TOKENS": "16000",
"CLAUDE_CODE_EFFORT_LEVEL": "high",
"MCP_TIMEOUT": "30000"
}
}1を設定すると自動更新を無効化します。企業環境でバージョンを固定したい場合に使います。1を設定するとエージェントチーム機能(実験的)を有効化します。Claudeの応答の詳しさをoutputStyleで制御できます。
thinking(思考プロセス)の表示も設定可能です。 Claudeが内部でどう推論しているかを確認したい場合はthinking表示をオンにします。
Fast Modeは、対話中に/fastコマンドで切り替えられるモードです。 軽量モデル(Haiku)に切り替えて、単純なタスクを高速に処理します。 複雑な判断が不要な定型作業(ファイルの一括リネーム、簡単なフォーマット修正など)で活用できます。
Hooksは、Claude Codeの特定のイベントに対して自動でスクリプトを実行する仕組みです。 settings.jsonで定義します。
{
"hooks": {
"PreToolUse": [
{
"matcher": "Bash",
"hooks": [
{
"type": "command",
"command": "echo \"$TOOL_INPUT\" | jq -r '.command' | grep -qE '^(rm|drop|truncate)' && exit 1 || exit 0"
}
]
}
],
"PostToolUse": [
{
"matcher": "Edit",
"hooks": [
{
"type": "command",
"command": "npx prettier --write \"$FILEPATH\""
}
]
}
],
"Stop": [
{
"hooks": [
{
"type": "command",
"command": "echo 'Claude Codeの処理が完了しました' | terminal-notifier -title 'Claude Code'"
}
]
}
],
"Notification": [
{
"hooks": [
{
"type": "command",
"command": "echo \"$MESSAGE\" >> ~/.claude/notifications.log"
}
]
}
]
}
}matcherでどのツールに対して発火するかを指定します。 省略すると全ツールに対して発火します。
CLAUDE.mdとsettings.jsonはどちらもClaude Codeの動作を制御しますが、 それぞれ得意な領域が異なります。使い分けの基準を整理します。
判断基準はシンプルです。「機械的に強制したいもの」はsettings.json、「AIに理解して判断してほしいもの」はCLAUDE.mdです。 たとえば、.envファイルの読み取り禁止は、CLAUDE.mdにも書きつつsettings.jsonのdenyにも入れる 「二重ガード」が最も安全です。
Claude Codeは頻繁にアップデートされ、新しい設定項目が追加されています。 実務で特に影響の大きい設定を紹介します。
availableModels — 利用可能なモデルを制限します。チームで「このプロジェクトはSonnetのみ使用」と統一したい場合に便利です。autoMemoryDirectory — Auto Memoryの保存先をカスタマイズできます。デフォルトの~/.claude/以外の場所に保存したい場合に使います。showThinkingSummaries — Thinkingブロックの要約表示を制御します。推論過程を確認したい場合はtrueにします。disableSkillShellExecution — Skill内の!`command`構文によるシェル実行を無効化します。セキュリティを重視する環境で使います。worktree.symlinkDirectories — Worktree作成時にnode_modules等の大きなディレクトリをシンボリックリンクで共有し、ディスク使用量を削減します。170以上ある環境変数のうち、日常のワークフローに直接影響するものを厳選して紹介します。 これらはsettings.jsonのenvキーで設定できます。
// settings.json
{
"env": {
"MAX_THINKING_TOKENS": "50000",
"CLAUDE_CODE_MAX_OUTPUT_TOKENS": "30000",
"CLAUDE_CODE_EFFORT_LEVEL": "high",
"BASH_MAX_TIMEOUT_MS": "300000",
"CLAUDE_CODE_DISABLE_AUTO_MEMORY": "1"
}
}MAX_THINKING_TOKENS — 思考トークンの上限。複雑な推論タスクでは増やすと効果的です。CLAUDE_CODE_MAX_OUTPUT_TOKENS — 出力トークンの上限。長いコード生成で途中で切れる場合に増やします。CLAUDE_CODE_EFFORT_LEVEL — デフォルトのeffortレベル。highにすると推論が深くなります。BASH_MAX_TIMEOUT_MS — Bashコマンドのタイムアウト。ビルドやテストが長い場合に延長します。CLAUDE_CODE_DISABLE_AUTO_MEMORY — Auto Memory機能を無効化。メモリの肥大化が気になる場合に。プラグインの管理に関する設定です。 詳しくは「プラグインとマーケットプレイス」ページも参照してください。
plugins.autoInstall — プラグインの自動インストールを有効化plugins.autoUpdate — プラグインの自動更新を有効化plugins.path — プラグインのインストール先ディレクトリextraKnownMarketplaces — 社内マーケットプレイスのURLを追加// settings.json — プラグイン設定例
{
"plugins": {
"autoInstall": true,
"autoUpdate": true
},
"extraKnownMarketplaces": [
"https://marketplace.internal.example.com"
]
}