# 権限の設定

Claude Code は権限システムを使用して、どの操作にユーザーの確認が必要かを制御します。権限を適切に設定することで、安全性を確保しながら開発効率を高めることができます。

## 4 つの権限モード

| モード | 説明 | 適用シーン |
|------|------|---------|
| `default` | ツールを初めて使用する際に権限を確認 | 日常的な開発、安全性と効率のバランス |
| `acceptEdits` | ファイル編集を自動承認、その他の操作は確認が必要 | 頻繁なファイル修正が必要なタスク |
| `plan` | 分析のみで実行しない（Plan Mode） | コードの探索・レビュー、Claude に変更を加えさせたくない場合 |
| `bypassPermissions` | すべての権限プロンプトをスキップ | CI/CD 自動化、信頼できる安全な環境 |

### 権限モードの切り替え

- **`Shift+Tab`** を押して権限モードを循環切り替え
- **`Shift+Tab`** を 2 回押して Plan Mode に入る（Escape で終了）
- ダイアログで直接モードを選択

## デフォルト権限モードの設定

`.claude/settings.json` で設定します：

```json
{
  "permissions": {
    "defaultMode": "acceptEdits"
  }
}
```

## Allow ルール：コマンドの事前承認

特定のコマンドを事前に承認して、毎回確認を求められないようにします：

```json
{
  "permissions": {
    "allow": [
      "Bash(npm run lint)",
      "Bash(npm run test:*)",
      "Bash(git status)",
      "Bash(git add:*)",
      "Bash(git diff:*)"
    ]
  }
}
```

**Allow ルールの構文**：
- `Bash(コマンド)` — コマンドの完全一致
- `Bash(コマンドプレフィックス:*)` — そのプレフィックスで始まるコマンドに一致
- `Read(ファイルパス)` — 特定ファイルの読み取りを許可
- `Write(ファイルパス)` — 特定ファイルへの書き込みを許可

## Deny ルール：機密ファイルの保護

Claude が機密ファイルにアクセスまたは変更するのを防ぎます：

```json
{
  "permissions": {
    "deny": [
      "Read(./.env)",
      "Read(./.env.*)",
      "Read(./secrets/**)",
      "Write(./.git/**)",
      "Bash(rm -rf:*)"
    ]
  }
}
```

**Deny ルールの構文**：
- パスパターンは `*`（単一レベル）と `**`（複数レベル）のワイルドカードをサポート
- Deny ルールは Allow ルールより**優先度が高い**

## Allow と Deny の併用

```json
{
  "permissions": {
    "defaultMode": "acceptEdits",
    "allow": [
      "Bash(npm run *)",
      "Bash(git status)",
      "Bash(git diff)"
    ],
    "deny": [
      "Bash(git push:*)",
      "Bash(rm -rf:*)",
      "Read(./.env*)"
    ]
  }
}
```

## 設定ファイルの階層

Claude Code は以下の優先順位で権限設定をマージします：

| 優先度 | 場所 | 適用範囲 |
|--------|------|---------|
| 最高 | `.claude/settings.local.json`（Git にコミットしない） | 個人ローカルの上書き |
| 中 | `.claude/settings.json`（Git にコミット） | チーム共有設定 |
| 最低 | `~/.claude/settings.json` | グローバルユーザー設定 |

**チームコラボレーションの推奨事項**：
- チーム共通の allow/deny ルールを `.claude/settings.json` に記述して Git にコミットする
- 個人の特別なニーズは `.claude/settings.local.json` に記述して `.gitignore` に追加する

## ベストプラクティス

**1. 機密認証情報の保護**
```json
{
  "permissions": {
    "deny": [
      "Read(./.env)",
      "Read(./.env.*)",
      "Read(./credentials/**)",
      "Read(./.ssh/**)"
    ]
  }
}
```

**2. フロントエンドプロジェクトの設定**
```json
{
  "permissions": {
    "defaultMode": "acceptEdits",
    "allow": [
      "Bash(npm run dev)",
      "Bash(npm run build)",
      "Bash(npm run test:*)",
      "Bash(npm run lint:*)"
    ]
  }
}
```

**3. CI/CD 自動化**
```json
{
  "permissions": {
    "defaultMode": "bypassPermissions"
  }
}
```

> ⚠️ **注意**：`bypassPermissions` モードはすべてのセキュリティチェックをスキップします。完全に信頼できる自動化環境でのみ使用してください。