← エージェント 統合 →

08 設定ファイル — 全設定の解説


graph BT L1["Layer 1: グローバル
~/.claude/CLAUDE.md
全プロジェクト共通"] L2["Layer 2: プロジェクト
repo/CLAUDE.md
プロジェクト固有"] L3["Layer 3: ディレクトリ
repo/dir/CLAUDE.md
特定ディレクトリ"] L3 -->|"上書き"| L2 L2 -->|"上書き"| L1 style L3 fill:#e8f5e9 style L2 fill:#fff3e0 style L1 fill:#e3f2fd

設定の3層構造

Claude Codeの設定は 3つのレイヤー で構成される。上のレイヤーほど優先度が高い。

Layer 3: ディレクトリ固有
  <repo>/<dir>/CLAUDE.md
    ↓ (上書き)
Layer 2: プロジェクト固有
  <repo>/CLAUDE.md
    ↓ (上書き)
Layer 1: グローバル(全プロジェクト共通)
  ~/.claude/CLAUDE.md

CLAUDE.md

Layer 1: グローバルCLAUDE.md

全プロジェクトで共通するルールを記述。

グローバルCLAUDE.mdに含まれるもの:

補足: デスクトップアプリのUI言語について
Routines画面などのアプリ組み込みUIはCLAUDE.mdでは制御できない(アプリ側の仕様)。
制御できるのはAIが生成するテキスト(セッションタイトル・返答など)のみ。

Layer 2: プロジェクトCLAUDE.md

プロジェクト固有のルールを記述。

Layer 3: ディレクトリCLAUDE.md

特定ディレクトリのルール。必要な場合のみ使用。


settings.json

グローバル設定: ~/.claude/settings.json

Claude Codeの動作を制御するメイン設定ファイル。

主要セクション:

{
  "permissions": {
    "allow": ["Bash(npm test)", "Read"],
    "deny": ["Bash(rm -rf)"]
  },
  "hooks": {
    "PreToolUse": [...],
    "PostToolUse": [...],
    "PostToolUseFailure": [...],
    "SessionStart": [...],
    "Stop": [...],
    "Notification": [...]
  },
  "mcpServers": {
    "brave-search": { ... },
    "playwright": { ... },
    "context7": { ... },
    "discord": { ... },
    "mermaid": { ... }
  },
  "env": {
    "ANTHROPIC_API_KEY": "(直接書かない — ~/.secrets.envから注入)"
  },
  "model": "opus",
  "effortLevel": "medium",
  "worktree": { "baseRef": "fresh" },
  "statusLine": { "type": "command", "command": "..." },
  "autoDream": { "enabled": true, "intervalHours": 24 }
}

フックの種類と用途

フック タイミング 主な用途
PreToolUse ツール実行前 危険コマンドのブロック・安全確認
PostToolUse ツール実行後 実行結果のログ記録・SSOT記録トリガー・設定ファイル同期
PostToolUseFailure ツール実行失敗時 失敗時のログ記録(atuin連携等)
SessionStart セッション開始時 環境変数の注入(~/.secrets.env)・SSOT日記読込・バックログ7日経過タスク自動確認・セッション数サマリー表示・設定ファイル同期・INDEX自動更新・SKILL_CATALOG自動生成(generate-skill-catalog.py)プロキシ互換性自動チェック(check-proxy-compat.sh)
Stop セッション終了時 セッションログの保存・ハンドオフ生成・ガイド更新キューの記録・スキル同期・クリーンアップ
Notification 通知時 エラー・ブロック時のDiscord通知

SessionStartフックの構成(起動シーケンス)

SessionStart で複数のフックが決まった順序で連鎖する:

{
  "SessionStart": [
    { "command": "sync-secrets-to-settings.sh" },   // 1. ~/.secrets.env → settings.json 注入
    { "command": "load-obsidian-log.sh" },          // 2. SSOT日記・バックログをコンテキストへ
    { "command": "sync-settings-to-example.sh" },   // 3. settings.json → settings.example.json(マスク)
    { "command": "skill-guard.sh" },                // 4. プラグインSKILL.md と skills-custom/ 復元
    { "command": "startup-banner.sh" }              // 5. ターミナルにバナー表示(GLMモデル等)
  ]
}

詳細: 01_基礎概念.md#セッション管理

check-proxy-compat.sh の状態遷移:

状態         条件                                    動作
─────────────────────────────────────────────────────────────────
ok           HTTP 200 かつ tool_use 応答あり          exit 0(次回から同版なら省略)
fail         HTTP 200 だが tool_use 不在              黄色バナー表示・exit 0
fail         HTTP 200以外                            黄色バナー表示・exit 0
proxy_down   プロキシ systemctl active でない          黄色バナー表示・exit 0
skipped      token未設定                              exit 0(無音・推奨A反映)
skip         依存コマンド不在                         exit 0(無音)

その他の設定項目

項目 説明
model デフォルトモデル(opus, sonnet, haiku)。glm-5.2運用では各階層に割当
effortLevel 推論の深さ(low, medium, high)。/effort で変更可能
worktree.baseRef worktreeのベース参照(fresh = 最新のorigin/default, head = 現在のHEAD)
statusLine ターミナルのステータスバーに表示する内容(コマンド実行結果を表示)。以下に詳細説明あり
autoDream 自律思考モード(定期的にバックグラウンドで推論を実行)
enabledPlugins 有効なプラグインの一覧
language 出力言語(japanese 等)
theme テーマ(dark, light
statusLine の詳細

画面下部にLLM名・コスト・作業量・コンテキスト残量・会話サイズを表示する。glm-rate-proxy の実動作状態を反映し、peak時間帯のフォールバックもバッジで示す。

表示項目 説明
LLMバッジ + モデル名 🟡[GLM](通常)/ 🟠[peak→minimax](peak帯フォールバック中)+ モデル名。glm-rate-proxy の /proxy/status から実状態を取得
$X.XX セッション累計コスト(cost.total_cost_usd
+N -N 行追加/削除(作業量の目安)
Ctx XX% (XXk/窓) コンテキスト窓使用率。85%赤 / 70%黄 / 他緑
Req XX.XMB/32 会話サイズ(トランスクリプト)= 32MB APIリクエスト上限の目安。30MB赤 / 27MB黄 / 他緑。30MB超えで /clear 推奨

注意: コンテキスト使用率が高くなったら早めに /compact すること。100%に達すると /compact 自体も失敗し、新セッションが必要になる。会話サイズ(Req)は32MB API上限に縛られるため context窓とは別管理。

env(環境変数の注入)

env セクションで Claude Code プロセスに環境変数を追加できる。APIキーは ~/.secrets.env で管理するため、ここには非機密の制御変数のみ記載する(シークレットは SessionStart フックで自動注入)。

代表的な制御変数(非機密):

変数名 値例 用途
API_TIMEOUT_MS 1200000 Claude API呼び出しタイムアウト(20分)
MCP_TOOL_TIMEOUT 300000 MCPツール実行タイムアウト(既定60秒→5分に延長)
DISABLE_AUTO_COMPACT 1 auto-compact無効化(パターンB運用・手動/compact可)
CLAUDE_CODE_AUTO_COMPACT_WINDOW 1000000 窓サイズ指定(※200K cap注意・下記注記)
CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC 1 不要な通信(テレメトリ等)の抑制

glm-rate-proxy経由のルーティング変数ANTHROPIC_AUTH_TOKEN / ANTHROPIC_BASE_URL / ANTHROPIC_DEFAULT_OPUS_MODEL 等)→ 13_glm-rate-proxy で詳述。

auto-compact制御の罠(パターンB運用): glm-5.2等のカスタムモデルは Claude Code で 200K認識される。CLAUDE_CODE_AUTO_COMPACT_WINDOW=1000000 を設定しても200Kに cap されるため無意味(statusLine表示と本体判定がズレて「1% until auto-compact」が異常早発動)。auto-compact を止めるには DISABLE_AUTO_COMPACT=1。glm-5.2 を真に1M認識させるには DISABLE_COMPACT=1 + CLAUDE_CODE_MAX_CONTEXT_TOKENS=1000000(ただし手動/compactも不可)。→ AUTO_COMPACT_WINDOW訂正・パターンB運用移行

MCP_TOOL_TIMEOUT を設定する理由: GLM-5.2等の思考型モデルは長い生成に60秒以上かかることがある。未設定だと MCP error -32001 (Request timed out) が連続発生する。glm-mcp-server.py は直列処理なので1件目のタイムアウトが2件目を巻き込む連鎖に注意。値はミリ秒単位(300000 = 5分)。→ GLM MCPタイムアウト修正

WSL CLI版でglm MCPをdisabledにする理由: WSL CLI版ではCLI本体がGLMで動作するためglm MCPは二重呼び出しになり不要。command/url を省略すると「設定不備」警告が出るため、disabled: true を設定して警告を抑制。Desktop App版では false に戻すだけで再利用可。

プロジェクト設定: <repo>/.claude/settings.json

プロジェクト固有の設定。

~/.claude.json(追加設定ファイル)

2ファイル問題: ~/.claude.json~/.claude/settings.json の両方が存在し、マージされてロードされる。

現場の知見: settings.json だけ手動編集してMCPサーバーを削除しても、~/.claude.json に定義が残っていれば次回起動時に復元される。削除は必ず claude mcp remove で。→ 11_現場の知見


シークレット管理

APIキー等の機密情報は ~/.secrets.env に一元管理。

# ~/.secrets.env の例
MINIMAX_API_KEY=sk-xxx...
BRAVE_API_KEY=BSExxx...
GITHUB_TOKEN=ghp_xxx...

セキュリティルール

ルール 説明
会話にキー値を書かない キー名(MINIMAX_API_KEY)はOK、値はNG
設定ファイルに直書きしない settings.jsonのenvセクションに値を書かない
SessionStartフックで注入 source ~/.secrets.env で環境変数に注入
確認時はマスク必須 grep -E "^[A-Z_]+=" <file> | sed "s/=.*/=<REDACTED>/"

settings.jsonとの関係

SessionStartフック sync-secrets-to-settings.sh が起動のたびに ~/.secrets.env の値を settings.json へ自動注入する。

settings.example.json の自動同期

SessionStartフック sync-settings-to-example.shsettings.json からシークレット値をマスクして settings.example.json を生成する。

# バックアップ運用
settings.example.json  ← 値マスク済み。SSOTへのバックアップはこちらのみ
settings.json          ← 実体。バックアップ・出力・表示は禁止

⚠️ settings.json / .secrets.env の値を会話・ファイルに出力することは禁止。

危険コマンドのブロック

PreToolUseフック(check-command-safety.py)が以下を自動ブロック:

settings.json を安全に編集するには(python構造操作)

settings.json 等の機密ファイルは Read がブロックされるため、値を見ずに構造だけ操作して書き戻すのが安全な編集方法。Edit ツールは Read 前提で動かないため、Python で構造のみ触る:

import json, shutil
p = "/home/<USER>/.claude/settings.json"
shutil.copy(p, p + ".tmp-bak")          # バックアップ
d = json.load(open(p))
d["hooks"]["SessionStart"][0]["hooks"].append(
    {"type": "command", "command": "/home/<USER>/.claude/scripts/session/foo.sh"}
)
with open(p, "w") as f:
    json.dump(d, f, indent=2, ensure_ascii=False)  # 元フォーマット(indent=2)保持

設定変更の方法

方法 対象
/config モデル・テーマ等 対話的UI
update-config スキル settings.json全般 /update-config
手動編集 settings.json 直接ファイル編集
claude mcp add/remove MCPサーバー CLIコマンド

.gitignore ベストプラクティス(設定リポジトリ向け)

claude-config のような設定・hook・スクリプト類を管理するリポジトリでは、Auto sync / PostToolUse hook が編集系のバックアップファイルを巻き込んで commit する事故が過去に発生している(*.bak 129行混入の事例あり)。

最低限入れておく除外パターン:

# バックアップファイル(エディタ・merge・rebase 由来)
*.bak
*.orig
*~

# 既存パターン
backups/
backup-*/

教訓:hook は .gitignore を読んでくれない。.bak を作ったら .bak のまま commit される。「作らない」ではなく「無視する」設計にすること。


Windows Desktop vs WSL CLI — 設定の違い

WSL2環境では Windows DesktopアプリWSL CLI の2つのClaude Codeが共存する。設定ファイル・管理系統・ツール定義のシリアライズに重要な違いがある。

💡 WSL CLI版(2026-07-02統合): 2026-06-30に「cc-musicプロファイル分離」で minimax-official/video を日常settings.jsonから除外していたが、32MB真因=glm-rate-proxy client_max_size 未設定と判明(9ac5f24fd解決)したため分離撤回。現在は minimax-official/video は日常 mcpServers で常時読込(画像/動画/音楽生成を即呼び可能)。cc-music エイリアス・cc-music-mcp.json・PreToolUse hookブロックは完全撤去(バックアップは 01_DECISIONS/claude-code/設定ファイル/ に温存)。未使用agents 8プラグイン無効化は継続。

  • 効果: 日常側 約7,060tok削減(実測確認済・minimax分離分。agents 1,926tokは想定過大で実際は微小・8プラグインはagents非提供型だった)・32MBエラー(画像起因)は運用規約で予防。
  • cc/usr/bin/cc(C compiler)でClaude起動エイリアスではない。日常起動は claude 直。

設定ファイルの場所一覧

種別 場所 役割
WSL settings.json ~/.claude/settings.json MCP・権限・フック(WSL側メイン)
WSL .claude.json ~/.claude.json 追加設定(settings.jsonと統合)
Windows settings.json C:\Users\<user>\.claude\settings.json Windows側MCP設定
Windows .claude.json C:\Users\<user>\.claude.json Windows側状態(キャッシュ・ユーザー情報等)
Desktop config C:\Users\<user>\AppData\Roaming\Claude\claude_desktop_config.json 従来のDesktop設定
Desktop Extensions C:\Users\<user>\AppData\Local\Packages\Claude_pzs8sxrjxfjjc\LocalCache\Roaming\Claude\Claude Extensions\ 拡張機能(独立管理)

注意: Desktop Extensionsの場所はWindows Storeアプリパッケージの内部にあり、通常の設定フォルダからは見えない。MCP serverやplugin設定とは完全に別の管理系統

設定の独立性

WSL側とWindows側の設定は独立している:

ツール定義のシリアライズ差異(重要)

項目 WSL CLI Windows Desktop
MCP tools消費 ~16-34k tokens ~213-224k tokens
倍率 1倍 6.2倍
原因 標準シリアライズ Desktop内部のシリアライズ差異
ユーザー制御 settings.jsonで制御可能 制御不可(v2.1.142時点)

Windows Desktopアプリは、同一のMCP構成でもCLIより6倍以上のトークンを消費する。2026年5月時点では、6回の異なる設定変更(MCP server削除・profiles無効化・plugin cache削除・marketplace削除・plugin個別無効化・Extensions削除)で検証済み。Desktop Extensionsの削除のみ-10.6kの効果があったが、残り213kはアプリ内部で固定。

Desktop Extensions

Desktopアプリ専用の拡張機能。Windows Storeアプリパッケージ内に配置される。

Claude Extensions/
  ├── ant.dir.ant.anthropic.filesystem/  (11ツール)
  ├── grafana/                           (71ツール) ※不要なら削除
  ├── pdf-filler/                        (37ツール) ※不要なら削除
  ├── desktopcommander/                  (26ツール) ※不要なら削除
  ├── growthbook/                        (18ツール) ※不要なら削除
  ├── figma/                             (7ツール)  ※不要なら削除
  └── apify/                             (?ツール)  ※不要なら削除

OAuth認証トークンの蓄積問題

Desktopアプリはセッション開始のたびに新しいOAuth認証トークンを作成し、旧トークンを削除しない。長期間使用すると100+個のトークンが蓄積される。

推奨運用(2026年5月時点)

用途 推奨環境 理由
日常開発 WSL CLI コンテキスト27%で正常動作
Desktopアプリ 軽作業のみ 213k消費で会話制限に抵触する可能性

現場の知見: Desktopアプリのコンテキスト過多はAnthropicのアップデート待ち。当面はWSL CLI版をメインで使用する。→ 11_現場の知見


💡 やさしい補足(初心者向け)