← エージェント 統合 →

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

<a id="claude-md-globグロブ。ファイル名を「*(任意の文字列)」等のワイルドカードで指定する書き方。「*.md」=すべてのmdファイル、のような使い方al"></a>Layer 1: グローバルCLAUDE.md

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

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

補足: デスクトップアプリのUI言語について
Routines画面などのアプリ組み込みUIはCLAUDE.mdでは制御できない(アプリ側の仕様「どう動くべきか」の取り決め。仕様書=要件と動作の定義を書いた文書)。
制御できるのはAIが生成するテキスト(セッションタイトル・返答など)のみ。

<a id="claude-md-project"></a>Layer 2: プロジェクトCLAUDE.md

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

Layer 3: ディレクトリフォルダのこと。ファイルを階層的に整理する入れ物。Linux系ではフォルダをディレクトリと呼ぶのが普通CLAUDE.md

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


settings.json

<a id="settings-json"></a>グローバル設定: ~/.claude/settings.json

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

主要セクション:

{
  "permissions": {
    "allow": ["Bash(npm test)", "Read"],
    "deny": ["Bash(rm -rf)"],
    "ask": ["Bash(git worktree add:*)"]
  },
  "hooks": {
    "PreToolUse": [...],
    "PostToolUse": [...],
    "PostToolUseFailure": [...],
    "SessionStart": [...],
    "Stop": [...],
    "Notification": [...]
  },
  "mcpServers": {
    "brave-search": { ... },
    "github": { ... },
    "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 セッション開始時 環境変数プログラムの外側(OS側)で設定する値の入れ物。プログラムを書き換えずに設定を切り替えられる。APIキー等の秘密の値はソースコードに直書きせずここに入れるのが安全な定石の注入(~/.secrets.env)・SSOT日記読込・バックログ7日経過タスク自動確認・セッション数サマリー表示・設定ファイル同期・INDEX自動更新・SKILL_CATALOG自動生成(generate-skill-catalog.py)・ssot-check日次トリガー(check-ssot-check-staleness.sh・前回実行が前々日以前なら当日実行を指示・2026-08-14)・バナー集約(startup-banner.sh・各hookClaude Codeの特定のタイミング(ツール実行前後・セッション開始時等)で自動処理を差し込む仕組み。「保存前にチェック」「終了時に記録」等を機械的に強制できるのステータスを /tmp/claude-startup/ 経由で集約し1枚のバナーに統一・層1読込検証つき・2026-08-25)
SessionStart hook圧縮 2026-07-12追加 トレンド・候補・bkは「指示がある時のみ展開」に変更(常時15KB相当=6K〜10Kトークン圧迫を解消・コンテキストリミット多発対策)
Stop セッション終了時 セッションログの保存・ハンドオフ生成・ガイド更新キュー待ち行列。依頼された処理を順番に並べて、前から順に消化していく仕組みの記録・スキルClaude Codeで「特定の作業手順」をパッケージ化したもの。SKILL.mdに手順を書いておくと、対応する場面でAIがその手順を読み込んで従う。経験を再利用する仕組み同期・クリーンアップ
Notification 通知時 エラー・ブロック時のDiscord通知

その他の設定項目

項目 説明
model デフォルト指定がない時に自動的に使われる初期値・初期設定のことモデル(opus, sonnet, haiku)。glm-5.3運用では各階層に割当
effortLevel 推論の深さ(low, medium, high)。/effort で変更可能
worktree.baseRef worktreeのベース参照(fresh = 最新のorigin/default, head = 現在のHEAD)
statusLine ターミナル文字だけでパソコンと対話する画面。コマンドを打ち込むと結果が文字で返ってくる。Claude Code CLIはここで動くのステータスバーに表示する内容(コマンド実行結果を表示)。以下に詳細説明あり
autoDream 自律思考モード(定期的にバックグラウンドで推論を実行)
enabledPlugins 有効なプラグイン本体に後から差し込んで機能を足す追加部品。Claude Codeにもプラグイン機構があるの一覧
language 出力言語(japanese 等)
theme テーマ(dark, light
<a id="statusline"></a>statusLine の詳細

画面下部にLLM名・コスト・作業量・コンテキスト残量・会話サイズを表示する。glm-rate-proxy の実動作状態を反映し、peak時間帯のフォールバックメインの手段が使えなくなった時に、自動的に予備の手段へ切り替える仕組み。「本命が失敗したら副えに任せる」二段構えもバッジで示す。

表示項目 説明
🪟XXXX(末尾) タブ識別子(WT_SESSION先頭4桁・/clearで不変・4タブ運用での区別。未設定時はsession_id先頭4桁)
LLMバッジ + モデル名 🟡[GLM](通常)/ 🟠[peak→minimax](peak帯フォールバック中)+ モデル名。glm-rate-proxy の /proxy/status から実状態を取得
Ctx XX% (XXk/窓) コンテキスト窓使用率。85%赤 / 70%黄 / 他緑
Req XX.XMB/32 会話サイズ(トランスクリプト)= 32MB APIリクエスト上限の目安。30MB赤 / 27MB黄 / 他緑。30MB超えで /clear 推奨
+N -N(末尾) 行追加/削除(作業量・重要度低のため末尾)

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

<a id="env-settings"></a>env(環境変数値を入れておく名前付きの箱。x = 1 のように名前に値を紐付けて、後で使い回すの注入)

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

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

変数名 値例 用途
API_TIMEOUT_MS 1200000 Claude API呼び出しタイムアウト待ち時間の上限。指定時間内に応答が無ければ「失敗」とみなして打ち切る仕組み(20分)
MCP_TOOL_TIMEOUT 300000 MCPModel Context Protocol(エムシーピー)の略。AIに外部ツール(検索・GitHub・データベース等)を繋ぐための共通接続規格。USBのような「差せば繋がる」仕組みでAIの能力を拡張するツール実行タイムアウト(既定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.3等のカスタムモデルは Claude Code で 200K認識される。CLAUDE_CODE_AUTO_COMPACT_WINDOW=1000000 を設定しても200Kに cap されるため無意味(statusLine表示と本体判定がズレて「1% until auto-compact」が異常早発動)。auto-compact を止めるには DISABLE_AUTO_COMPACT=1。glm-5.3 を真に1M認識させるには DISABLE_COMPACT=1 + CLAUDE_CODE_MAX_CONTEXT_TOKENS=1000000(ただし手動/compactも不可)。→ AUTO_COMPACT_WINDOW訂正・パターンB運用移行

MCP_TOOL_TIMEOUT を設定する理由: GLM-5.3等の思考型モデルは長い生成に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 に戻すだけで再利用可。

<a id="settings-local"></a>プロジェクト設定: <repo>/.claude/settings.json

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

<a id="claude-json"></a>~/.claude.json(追加設定ファイル)

2ファイル問題: ~/.claude.json~/.claude/settings.json の両方が存在し、マージ分かれていた変更を1つに統合すること。ブランチで進めた作業を本体(main)に取り込む作業されてロードされる。

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


<a id="secrets"></a>シークレット管理

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)が以下を自動ブロック:


設定変更の方法

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

<a id="gitignore-best-practice"></a>.gitignore ベストプラクティス(設定リポジトリ向け)

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

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

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

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

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


<a id="windows-vs-wsl"></a>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と統合)。userスコープのmcpServersはWSL CLI版がここを読む
Windows settings.json C:\Users\<user>\.claude\settings.json 権限・フック等。⚠️2026-07-06実測時点ではmcpServersを書いてもWindows Desktopアプリ本体からは読まれなかった(下記「注意」参照・恒久的事実として鵜呑みにしない)
Windows .claude.json C:\Users\<user>\.claude.json Windows側状態(キャッシュ一度得た結果を取っておいて、次回は同じ計算をせず使い回す仕組み。速くなるが、元のデータが変わった時の更新忘れに注意・ユーザー情報等)
Desktop config(候補①) C:\Users\<user>\AppData\Roaming\Claude\claude_desktop_config.json ⚠️2026-07-06実測時点では中身が実プロセスの起動引数コマンドや関数に渡す補足の指定。ls -la の -la の部分のように、動作を細かく指示する値と食い違っており使われていないように見えた(ただし2026-05時点では他候補と内容一致・有効に見えていた。下記「注意」参照)
Desktop config(候補②・2026-07-06時点で実測と一致) C:\Users\<user>\AppData\Local\Packages\Claude_pzs8sxrjxfjjc\LocalCache\Roaming\Claude\claude_desktop_config.json 2026-07-06実測では、Windows Desktopアプリが実際に読むmcpServers設定はここだった(MSIXパッケージ配布・インストール可能な形にまとめたソフトウェアの単位。Pythonではpipで入れる部品のことの仮想化パス)。ただしこれも将来のアプリ更新で変わりうるため「今後もここ」と決め打ちしない
Desktop Extensions C:\Users\<user>\AppData\Local\Packages\Claude_pzs8sxrjxfjjc\LocalCache\Roaming\Claude\Claude Extensions\ 拡張機能ソフト本体に後から足して機能を増やす追加部品。プラグインとほぼ同義(MCP serverとは別の独立管理系統)

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

⚠️ 候補ファイルが複数あり、しかも「どれが本物か」は時期によって変わりうる(決め打ち禁止): 2026-05時点の調査(2026-05-20_デスクトップアプリMCP-223k問題調査)ではsettings.jsonAppData\Roaming\Claude\claude_desktop_config.json(候補①)の内容が一致しており、当時はどちらも「有効」に見えていた。おそらく当時は複数の候補ファイルを手動で同時に編集していたため、どれが真の読み込み元か区別する必要が一度もなかった。2026-07-06にgeminiを候補①相当(settings.json)にだけ追加したことで初めて食い違いが表面化し、候補②(MSIXパッケージ内)が本物だと判明した。Windows Desktopアプリの内部実装設計や仕様を、実際に動くコードに作り込むこと。「実装済み」=コードとして完成している状態(配布形態・設定読み込みロジック)はアプリ更新で今後も変わりうるため、上表の「候補②が本物」という記述も恒久的な前提にしない。

⚠️ 「設定したのに接続されない」時の確認手順(推測で編集しない・都度確認): アプリ内「設定 → 開発者 → ローカルMCPサーバー」パネルの「設定を編集」ボタンを押し、その時点でエクスプローラーが開く実際のファイルパスをそのまま使うのが、時期によらず通用する最も確実な方法(2026-07-06 gemini追加時に確立した手順)。詳細: 04_MCPサーバー の「設定したのに接続されない」トラブルシューティング節、事例は 2026-07-06_Windows-Desktop版Gemini-MCP真因確定-MSIXconfig特定 参照。

設定の独立性

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

<a id="windows-git-auth"></a>Windows DesktopのGitHub認証「あなたは誰か」を確認すること。パスワードや鍵で本人であることを確かめる手続き(git push失敗の対処)

WindowsとWSLはSSH鍵の置き場所も独立している。WSL側~/.ssh/id_ed25519で運用しているGitHub鍵は、Windows側C:\Users\<user>\.ssh\には存在しないため、Windows Desktop版のBashツール(Git Bash)からgit pushするとPermission denied (publickey)で失敗する。

対処(HTTPエイチティーティーピー。Webの通信で使われる基本的な約束事(プロトコル)。ブラウザとサーバー、プログラム同士のやり取りの共通言語S + GitHub CLI方式): SSH鍵をコピー・共有せず、GitHub CLI (gh) の認証情報をWindows側のみで使う。

# 1. インストール
winget install GitHub.cli

# 2. ブラウザ認証(対話操作が必要)
gh auth login --hostname github.com --git-protocol https --web

# 3. gitのcredential helperと連携
gh auth setup-git

# 4. Windows側グローバルgitconfigにURL書き換えルールを追加
git config --global url."https://github.com/".insteadOf "git@github.com:"

当初はWSL側の鍵をUNCパス経由(\\wsl.localhost\...)で直接参照する案を実機検証し動作も確認したが、OpenSSHの権限チェックを迂回している懸念・侵害時の被害範囲拡大・将来のWindows Update等での破綻リスクをレビューで指摘され、HTTPS+gh CLI方式に切り替えた。詳細: 2026-06-30_Windows-Desktop版GitHub認証問題解決

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

項目 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アプリパッケージ内に配置される。

<a id="claude-config-venvブイエンブ。Python標準の仮想環境を作るコマンド/仕組み。プロジェクトごとにライブラリを分けてインストールできるようにする"></a>claude-config配下スクリプトのPython実行環境

claude-config リポジトリ(scripts/api/*.py 等)のPythonスクリプトは 専用仮想環境プロジェクトごとにインストールするライブラリを分ける独立したPython環境。プロジェクト間のバージョン衝突を防ぐ .venv で実行 する。

実行方法 結果
claude-config/.venv/bin/python scripts/api/gemini-audio.py ✅ 動作(google-genai 等インストール済)
python3 scripts/api/gemini-audio.py(システムPython) ImportError: cannot import name 'genai'
Claude Extensions/
  ├── ant.dir.ant.anthropic.filesystem/  (11ツール)
  ├── grafana/                           (71ツール) ※不要なら削除
  ├── pdf-filler/                        (37ツール) ※不要なら削除
  ├── desktopcommander/                  (26ツール) ※不要なら削除
  ├── growthbook/                        (18ツール) ※不要なら削除
  ├── figma/                             (7ツール)  ※不要なら削除
  └── apify/                             (?ツール)  ※不要なら削除

OAuthオーオースと読む。他のサービスの機能を、IDやパスワードを教えずに安全に使わせるための認可の標準規格。「○○でログイン」ボタンの裏側で動いている仕組み認証トークンの蓄積問題

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

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

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

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


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