← レッスンに戻る
第6章 · Claude Code応用

Settings.json と Permissions の詳細

Settings & Permissions · 約 10 分

重要キーワード

English日本語説明
settings.json 設定ファイル Claude Code の挙動を JSON で設定
Permissions 権限ルール ツールごとに許可/拒否/確認を細かく指定
Statusline ステータスライン ターミナル下部の状態表示。カスタム可
Local vs Shared 個人 vs 共有 settings.local.json と settings.json の使い分け

Settings.json: Claude Code の中央管制

.claude/settings.json (プロジェクト用) と ~/.claude/settings.json (グローバル) で Claude Code のあらゆる挙動を設定できます。

階層と優先順位

~/.claude/settings.json              # ユーザーグローバル
<repo>/.claude/settings.json          # プロジェクト共有 (git にコミット)
<repo>/.claude/settings.local.json    # プロジェクト個人 (gitignore 推奨)

下の階層が上書き優先。API キーやトークンは local に書くのが安全。

主なトップレベル項目

{
  "model": "claude-sonnet-4-6",
  "permissions": { ... },
  "hooks": { ... },
  "mcpServers": { ... },
  "env": {
    "EDITOR": "code",
    "PAGER": "less"
  },
  "statusLine": { ... },
  "plugins": [ ... ]
}

Permissions の書き方

ツールごとに allow / ask / deny をルールで指定できます。

{
  "permissions": {
    "allow": [
      "Read(*)",
      "Glob(*)",
      "Grep(*)",
      "Bash(npm test)",
      "Bash(pytest *)",
      "Bash(git status)",
      "Bash(git diff *)"
    ],
    "ask": [
      "Bash(git push *)"
    ],
    "deny": [
      "Bash(rm -rf /*)",
      "Bash(curl https://*)",
      "Edit(.env)",
      "Edit(secrets/*)"
    ]
  }
}

マッチャ構文

移行戦略

Statusline をカスタマイズ

{
  "statusLine": {
    "type": "command",
    "command": "echo "$(git branch --show-current) | tokens=${CLAUDE_TOKENS_USED:-0}""
  }
}

ブランチ名や残トークンなどを常時表示できます。

env で環境変数を固定

セッション内で常時有効な環境変数。秘匿情報は 絶対に書かない こと (commit 漏れ事故を防ぐ)。

Plugin

カスタムスキル + コマンド + MCP を 1 パッケージで配布できる仕組み。

claude plugin install user/repo

設定の確認

/config        # 設定 GUI
/permissions   # 権限ルール表示・編集
/hooks         # 有効な hook 一覧
/mcp           # 登録済み MCP 一覧

よくある失敗

試す

設定の改善案を Claude に提案させましょう。

▶ 設定レビュー
次の `.claude/settings.json` の安全性を評価してください。問題点と改善案を箇条書きで。 ```json { "permissions": { "allow": ["Bash(*)", "Edit(*)"], "deny": [] } } ```

チーム標準 settings.json テンプレ (コピペ用)

新規プロジェクトに置く デフォルト として:

{
  "model": "claude-sonnet-4-6",
  "permissions": {
    "allow": [
      "Read(*)",
      "Glob(*)",
      "Grep(*)",
      "Edit(src/**)",
      "Edit(tests/**)",
      "Edit(docs/**)",
      "Write(src/**)",
      "Write(tests/**)",
      "Bash(ls*)",
      "Bash(pwd)",
      "Bash(cat*)",
      "Bash(git status)",
      "Bash(git diff*)",
      "Bash(git log*)",
      "Bash(git branch*)",
      "Bash(pytest*)",
      "Bash(ruff*)",
      "Bash(mypy*)",
      "Bash(npm test*)",
      "Bash(npm run*)",
      "Bash(uv run*)"
    ],
    "ask": [
      "Bash(git add*)",
      "Bash(git commit*)",
      "Bash(pip install*)",
      "Bash(npm install*)",
      "Bash(docker*)",
      "Edit(*.yml)",
      "Edit(*.yaml)",
      "Edit(Dockerfile*)",
      "Edit(.github/**)"
    ],
    "deny": [
      "Bash(rm -rf*)",
      "Bash(git push --force*)",
      "Bash(git push -f*)",
      "Bash(git reset --hard*)",
      "Bash(curl*|*bash*)",
      "Bash(wget*|*sh*)",
      "Read(.env)",
      "Read(.env.*)",
      "Read(**/*.pem)",
      "Read(**/*.key)",
      "Edit(.env)",
      "Edit(.env.*)",
      "Edit(secrets/**)",
      "Write(.env)"
    ]
  },
  "env": {
    "CLAUDE_PROJECT_NAME": "my-app"
  }
}

読み取りはほぼ自由 / 編集は対象ディレクトリだけ / 危険コマンドと秘密ファイルは絶対 deny。 新人がリポジトリを clone してすぐ Claude Code を使い始めても安全。

個人 (settings.local.json) のテンプレ

.gitignoresettings.local.json を必ず追加してから:

{
  "env": {
    "ANTHROPIC_API_KEY": "sk-ant-...",
    "GITHUB_TOKEN": "ghp_..."
  },
  "permissions": {
    "allow": [
      "Bash(open*)",
      "Bash(code*)"
    ]
  }
}

→ 個人の API キー・好みの追加コマンドはここに。チーム共有 settings.json と統合される。

演習問題

演習 1: 安全な permissions 雛形を書く

Python プロジェクト用に、安全で実用的な .claude/settings.json を作成してください。

要件: - Read / Glob / Grep / Edit (一般ファイル) は allow - pytest, ruff, git status/diff/log は allow - git push, git commit -a は ask - rm -rf, .env 編集, curl/wget は deny

スタータープロンプト:
Python プロジェクト用の `.claude/settings.json` を書いてください。permissions セクションを以下方針で:
- allow: Read, Glob, Grep, Edit, pytest, ruff, git status/diff/log
- ask: git push, git commit
- deny: rm -rf, .env 編集, curl/wget でのネットアクセス
完全な JSON のみ示してください。
ヒントを見る

プレフィックスマッチで Bash(pytest *) のように書きます。Edit(.env) で個別ファイルを deny できます。

理解度チェック

  1. 個人の API キーや秘密情報を書くべきファイルは?
    1. .claude/settings.json (commit 対象)
    2. .claude/settings.local.json (gitignore)
    3. CLAUDE.md
    4. package.json
  2. permissions の `ask` の意味は?
    1. 毎回ユーザーに確認
    2. 自動許可
    3. 完全拒否
    4. ログに記録だけ
  3. permissions で **避けるべき** 設定は?
    1. Bash(*) を allow
    2. Read(*) を allow
    3. .env を deny
    4. git push を ask
解答と解説を見る
  1. B — settings.local.json は個人用で gitignore 推奨。秘密はここに。
  2. A — ask は実行前にユーザー確認を求めます。
  3. A — Bash(*) を allow すると任意のコマンドが許可されてしまい危険です。