08 設定ファイル — 全設定の解説
~/.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/CLAUDE.md - 内容: 言語設定、LLM利用ポリシー、セキュリティルール、コーディング原則、SSOT参照
- トークン: ~2.4k(常にロードされる)
グローバルCLAUDE.mdに含まれるもの:
- 日本語回答ルール
- モデルルーティング(上位モデル → バランス型 → 軽量型)
- 使用モデル表示ルール
- タスク切り替え時の記録ルール
- セキュリティルール(APIキー非表示等)
- コーディング原則
- SSOT(共通知識ベース)の参照
- セッションタイトルの日本語生成ルール
- 実行環境の注意(Windows + WSL2の2層構造 — Cron等は
wsl bash -c経由必須)
補足: デスクトップアプリのUI言語について
Routines画面などのアプリ組み込みUIはCLAUDE.mdでは制御できない(アプリ側の仕様)。
制御できるのはAIが生成するテキスト(セッションタイトル・返答など)のみ。
Layer 2: プロジェクトCLAUDE.md
プロジェクト固有のルールを記述。
- 場所:
<repo>/CLAUDE.md - 内容: プロジェクトの構造、使用技術、テスト方法、ビルドコマンド
- 作成方法:
/initコマンドで自動生成、または手動作成
Layer 3: ディレクトリCLAUDE.md
特定ディレクトリのルール。必要な場合のみ使用。
- 場所:
<repo>/<dir>/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モデル等)
]
}
- load-obsidian-log.sh(軽量版): 今日=直近3セッション / 昨日=1行サマリー / バックログ=P0+P1のみ。
/dev/ttyでターミナルにも同時表示 - セッション数カウント: 今日の
10_DAILY/YYYY-MM-DD.md内## セッションログの出現回数を集計しバナーに表示 - バックログ自動確認: 7日以上更新のないタスクは
バックログ7日経過警告を表示(鮮度管理) - プロキシ互換性自動チェック(check-proxy-compat.sh): CC版変化時にプロキシ(
glm-rate-proxy)がtool_useに応答するか自動検証。致命的即死のみ防止(表面チェックはすり抜ける前提・常にexit 0・ブロックしない)。同版かつ前回okなら省略。プロキシ停止中(proxy_down)/ token未設定(skipped)/ 検証失敗(fail)時は黄色バナーで警告+ダウングレードコマンドを表示。state保存先~/.claude/state/proxy-compat.json(cc_version/status/checked_at/detail/last_ok_version)。依存コマンド事前チェック(claude/python3/curl/systemctl)不在時は静かにskip
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(無音)
- spec:
docs/superpowers/specs/2026-07-08-proxy-compat-check-hook-design.md (v2) - Phase1:
settings.json未登録・手動bash ~/.claude/scripts/session/check-proxy-compat.shで検証 - ダウングレード例:
npm install -g @anthropic-ai/claude-code@<last_ok_version>
その他の設定項目
| 項目 | 説明 |
|---|---|
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時間帯のフォールバックもバッジで示す。
- 設定:
{"type": "command", "command": "bash ~/.claude/scripts/llm/llm-status.sh"} - スクリプト:
~/.claude/scripts/llm/llm-status.sh - 表示例(通常):
🟡[GLM] GLM-5.2 | $0.12 | +100 -50 | Ctx 45% (90k/200k) | Req 8.5MB/32 - 表示例(peak帯フォールバック):
🟠[peak→minimax] GLM-5.2→MiniMax-M3 | ...
| 表示項目 | 説明 |
|---|---|
| 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
プロジェクト固有の設定。
- 場所:
<repo>/.claude/settings.json - 内容: そのプロジェクトでのみ有効な権限・MCP・フック
- 用途: チーム共有可能な設定(
.gitignoreに含めない場合)
~/.claude.json(追加設定ファイル)
2ファイル問題: ~/.claude.json と ~/.claude/settings.json の両方が存在し、マージされてロードされる。
- どちらに書いても効果は同じ
- しかし削除する際は両方から削除する必要がある
claude mcp removeCLIコマンドを使うと両方に反映される
現場の知見: 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 へ自動注入する。
- 目的: MCPサーバーへ環境変数を渡すため(
mcpServers.xxx.envセクション・現在は brave-search/glm/minimax 等) - Claude Code本体(
ANTHROPIC_AUTH_TOKEN等)はシェル環境変数でも動作するが、同フックで注入する設計に統一 - Git管理:
settings.jsonはclaude-config/.gitignoreで除外済み — GitHubには上がらない - ⚠️ github MCP は廃止(2026-06-22): 32MB問題(settings.json肥大化)のため plugin 経由で無効化済。GitHub操作は gh CLI(SSH認証)に統一。
GITHUB_TOKEN(~/.secrets.env)は gh CLI 用として残存するが settings.json には注入しない(注入スクリプトから github 行を削除済・復活経路を完全閉塞)
settings.example.json の自動同期
SessionStartフック sync-settings-to-example.sh が settings.json からシークレット値をマスクして settings.example.json を生成する。
- jq優先:
jqで env 内のキー名にKEY|TOKEN|SECRET|PASSWORD|AUTH(大文字小文字区別なし)を含む値を""に置換 - python3フォールバック:
jqが利用不可の場合、python3 で同等のマスク処理を実行 - TOKENマスク:
permissions.allow内のTOKEN=<値>形式の項目(Discord Bot Token等)も汎用文字列に置換 - mcpServers: 全MCPサーバーの
env値を""にマスク
# バックアップ運用
settings.example.json ← 値マスク済み。SSOTへのバックアップはこちらのみ
settings.json ← 実体。バックアップ・出力・表示は禁止
⚠️ settings.json / .secrets.env の値を会話・ファイルに出力することは禁止。
危険コマンドのブロック
PreToolUseフック(check-command-safety.py)が以下を自動ブロック:
bash -x(デバッグ出力で露出の恐れ)cat -A(特殊文字表示で露出の恐れ)- マスクなしの
grep(APIキー検索) - フィルタなしの
env(全環境変数表示)
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)保持
- 値(envのAPIキー等)には触れない(構造のみ変更)→ 差分
diff bak new | grep '^>'に secret は出ない indent=2+ensure_ascii=Falseで元フォーマット保持(最小差分・surgical)- Bash 経由の変更は PostToolUse の auto-sync が発火しない(Edit/Write トリガーのみ)→ SSOT の設定ファイルコピー(
01_DECISIONS/claude-code/設定ファイル/)は手動同期が必要 - ブロック時の guard メッセージにもこの手順が表示される(
check-command-safety.pyのcheck_read)
設定変更の方法
| 方法 | 対象 | 例 |
|---|---|---|
/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側でMCP serverを削除しても、Windows Desktopアプリには反映されない
- Windows側でMCP serverを変更しても、WSL CLIには反映されない
- Desktop Extensionsは両方の設定ファイルとも別管理
ツール定義のシリアライズ差異(重要)
| 項目 | 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/ (?ツール) ※不要なら削除
- 管理方法: フォルダを直接削除(設定ファイルからの参照なし)
- WSL CLIからはアクセス不可
- ** filesystemのみ残す推奨**(ファイル操作に有用)
OAuth認証トークンの蓄積問題
Desktopアプリはセッション開始のたびに新しいOAuth認証トークンを作成し、旧トークンを削除しない。長期間使用すると100+個のトークンが蓄積される。
推奨運用(2026年5月時点)
| 用途 | 推奨環境 | 理由 |
|---|---|---|
| 日常開発 | WSL CLI | コンテキスト27%で正常動作 |
| Desktopアプリ | 軽作業のみ | 213k消費で会話制限に抵触する可能性 |
現場の知見: Desktopアプリのコンテキスト過多はAnthropicのアップデート待ち。当面はWSL CLI版をメインで使用する。→ 11_現場の知見
💡 やさしい補足(初心者向け)
- 設定は3層: 全体共通・プロジェクト固有・ローカル(自分だけ)。細かいほど優先される
- CLAUDE.md = ルールブック: 毎回読む。何をどう扱うかの決まりを書く
- settings.json = 機能設定: 追加機能・権限・自動動作を書く
- 秘密は別管理: APIキー等の重要な値は
.secrets.envに一つにまとめて、設定ファイルには書かない(漏洩防止)