- Claude Codeには3段階のパーミッションモード(default/acceptEdits/bypassPermissions)がある
- CI/CD環境ではbypassPermissionsが必須だが、ローカル開発ではdefaultが安全
- Hooksと組み合わせることで、柔軟かつ安全な自動化パイプラインを構築できる
「Claude Codeで毎回確認ダイアログが出るのが面倒」「CI/CDで自動実行したいけどセキュリティが心配」「パーミッションモードの使い分けがわからない」
Claude Codeのパーミッションモードは、AIエージェントの自律性とセキュリティのバランスを制御する最重要設定です。 適切に設定すれば、開発効率を劇的に向上させつつ、意図しない変更やセキュリティリスクを最小化できます。
この記事では、Claude Code完全攻略シリーズEp.60として、パーミッションモードの全機能を徹底解説し、現場での最適な設定パターンを紹介します。
- 3つのパーミッションモードの違いと使い分け
- CI/CD環境での安全な自動化設定
- Hooksとの連携によるカスタムセキュリティポリシー
- SES現場でのチーム運用ベストプラクティス
Claude Codeパーミッションモードとは?3段階の権限管理

Claude Codeは、ファイル編集やシェルコマンド実行など、システムに影響を与える操作を行う際に「許可」を求める仕組みを持っています。このパーミッションモードは、--permission-mode フラグで制御します。
3つのパーミッションモードの概要
# デフォルトモード(すべての操作に確認を要求)
claude --permission-mode default
# 編集許可モード(ファイル編集は自動許可、コマンド実行は確認)
claude --permission-mode acceptEdits
# バイパスモード(すべての操作を自動許可)
claude --permission-mode bypassPermissions
| モード | ファイル編集 | シェルコマンド | MCP操作 | 推奨用途 |
|---|---|---|---|---|
default | ✋ 確認必要 | ✋ 確認必要 | ✋ 確認必要 | ローカル開発 |
acceptEdits | ✅ 自動許可 | ✋ 確認必要 | ✋ 確認必要 | ペアプログラミング |
bypassPermissions | ✅ 自動許可 | ✅ 自動許可 | ✅ 自動許可 | CI/CD・自動化 |
デフォルトモード(default)の詳細
デフォルトモードは最も安全な設定で、Claude Codeがシステムに影響を与えるすべての操作に対して、ユーザーの明示的な承認を必要とします。
# デフォルトモードでの対話例
$ claude "package.jsonにlodashを追加して"
# Claude Codeが以下を表示:
# 📝 ファイル編集の許可を求めています:
# package.json に lodash を追加
# [y/n/explain]:
デフォルトモードが適している場面:
- 初めてClaude Codeを使うプロジェクト
- センシティブなファイル(設定ファイル、環境変数)を扱う作業
- 本番環境に近いブランチでの作業
- チームメンバーの学習期間
デフォルトモードでは、各操作の承認時に「このセッションで同種の操作を自動許可する」オプションも利用できます。
# セッション中の許可オプション
# y - この操作を許可
# n - この操作を拒否
# a - このセッションで同種の操作をすべて許可
# explain - この操作の説明を表示
編集許可モード(acceptEdits)の詳細
acceptEditsモードは、ファイルの読み書き操作を自動的に許可しつつ、シェルコマンドの実行には確認を要求するバランス型の設定です。
# acceptEditsモードでの起動
claude --permission-mode acceptEdits
# ファイル編集 → 自動許可(確認なし)
# npm install → 確認ダイアログ表示
# git push → 確認ダイアログ表示
acceptEditsモードが適している場面:
- コードレビュー後の修正作業
- リファクタリングセッション
- ドキュメント生成・更新作業
- テストコードの自動生成
このモードの最大のメリットは、コード変更の高速化とコマンド実行の安全性を両立できることです。Claude Codeにコードを書かせつつ、実際の実行(ビルド、テスト、デプロイ)は人間が確認するワークフローに最適です。
バイパスモード(bypassPermissions)の詳細
bypassPermissionsは、すべての操作を自動的に許可する最も自律性の高いモードです。CI/CD環境やバッチ処理での使用が前提であり、対話的な開発では推奨されません。
# CI/CDでの典型的な使い方
claude --print --permission-mode bypassPermissions \
"このPRのコードレビューをして、問題があれば修正コミットを作成して"
# --print: 非対話モード(結果をstdoutに出力)
# --permission-mode bypassPermissions: 全操作を自動許可
bypassPermissionsの安全な使い方:
# GitHub Actions での使用例
name: AI Code Review
on:
pull_request:
types: [opened, synchronize]
jobs:
review:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Claude Code Review
run: |
claude --print --permission-mode bypassPermissions \
--max-turns 10 \
"PRの変更をレビューして。セキュリティ問題、パフォーマンス問題、ベストプラクティス違反を指摘して"
env:
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
パーミッションモードの設定方法
コマンドラインフラグ
最もシンプルな方法は、起動時にフラグで指定する方法です。
# フラグでの指定
claude --permission-mode acceptEdits "コードをリファクタリングして"
# --printと組み合わせ(非対話モード)
claude --print --permission-mode bypassPermissions "テストを実行して結果を報告して"
設定ファイル(.claude/settings.json)
プロジェクト単位でデフォルトのパーミッションモードを設定することもできます。
// .claude/settings.json
{
"permissions": {
"defaultMode": "acceptEdits",
"allowedCommands": [
"npm test",
"npm run build",
"git status",
"git diff"
],
"blockedCommands": [
"rm -rf",
"git push --force",
"DROP TABLE"
]
}
}
環境変数での制御
CI/CD環境では環境変数で制御することも可能です。
# 環境変数での設定
export CLAUDE_PERMISSION_MODE=bypassPermissions
export CLAUDE_MAX_TURNS=20
# この後のclaude実行はすべてbypassPermissionsで動作
claude --print "テストを修正して"
Hooksと連携したカスタムセキュリティポリシー
Claude CodeのHooks機能と組み合わせることで、パーミッションモードをさらに細かくカスタマイズできます。
特定ファイルの編集を制限するHook
// .claude/settings.json
{
"hooks": {
"preFileEdit": [
{
"matcher": "*.env*",
"action": "block",
"message": "環境変数ファイルの編集はブロックされています"
},
{
"matcher": "docker-compose.prod.yml",
"action": "block",
"message": "本番Docker設定の編集は手動で行ってください"
}
],
"preCommand": [
{
"matcher": "git push*",
"action": "requireConfirmation",
"message": "git pushを実行しますか?ブランチを確認してください"
}
]
}
}
監査ログを記録するHook
bypassPermissionsモードであっても、すべての操作を監査ログに記録するHookを設定できます。
{
"hooks": {
"postFileEdit": [
{
"matcher": "*",
"command": "echo \"$(date -u +%Y-%m-%dT%H:%M:%SZ) FILE_EDIT $CLAUDE_FILE_PATH\" >> .claude/audit.log"
}
],
"postCommand": [
{
"matcher": "*",
"command": "echo \"$(date -u +%Y-%m-%dT%H:%M:%SZ) COMMAND $CLAUDE_COMMAND\" >> .claude/audit.log"
}
]
}
}
Hooksによるセキュリティレイヤーの階層化
┌─────────────────────────────────────────┐
│ パーミッションモード(第1層) │
│ default / acceptEdits / bypass │
├─────────────────────────────────────────┤
│ Hooks - preFileEdit(第2層) │
│ 特定ファイルのブロック/確認 │
├─────────────────────────────────────────┤
│ Hooks - preCommand(第3層) │
│ 危険コマンドのブロック/確認 │
├─────────────────────────────────────────┤
│ Hooks - postAction(第4層) │
│ 監査ログ・通知 │
└─────────────────────────────────────────┘
CI/CDパイプラインでの実践パターン
GitHub Actionsでの安全な自動化
name: Claude Code Automation
on:
pull_request:
types: [opened, synchronize]
schedule:
- cron: '0 9 * * 1-5' # 平日9時
jobs:
# PR自動レビュー
pr-review:
if: github.event_name == 'pull_request'
runs-on: ubuntu-latest
permissions:
contents: read
pull-requests: write
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: AI Review
run: |
claude --print --permission-mode bypassPermissions \
--max-turns 5 \
"このPRの変更をレビューして。セキュリティ・パフォーマンス・可読性の観点で問題を指摘して"
env:
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
# 定期メンテナンス
maintenance:
if: github.event_name == 'schedule'
runs-on: ubuntu-latest
permissions:
contents: write
pull-requests: write
steps:
- uses: actions/checkout@v4
- name: Dependency Update
run: |
claude --print --permission-mode bypassPermissions \
--max-turns 15 \
"package.jsonの依存パッケージを更新して。破壊的変更がある場合はコードも修正して。テストが通ることを確認してからPRを作成して"
env:
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
—max-turnsによる安全装置
bypassPermissionsモードでは、--max-turnsを必ず設定してClaude Codeの暴走を防止します。
# 推奨: max-turnsを必ず設定
claude --print --permission-mode bypassPermissions --max-turns 10 "タスク"
# 危険: max-turnsなしでbypass(無限ループの可能性)
claude --print --permission-mode bypassPermissions "タスク" # ⚠️ 非推奨
| ユースケース | 推奨max-turns | 理由 |
|---|---|---|
| コードレビュー | 5-10 | 読み取り中心、少ないターンで完了 |
| バグ修正 | 10-20 | 調査→修正→テストのサイクル |
| リファクタリング | 15-30 | 複数ファイルの変更が必要 |
| 依存更新 | 10-15 | 更新→テスト→修正のサイクル |
CLAUDE.mdによるプロジェクト固有のルール
パーミッションモードと併用して、CLAUDE.mdにプロジェクト固有のセキュリティルールを記述できます。
# CLAUDE.md
## セキュリティルール
- .envファイルは絶対に変更しないこと
- データベースのスキーマ変更は提案のみ(実行しない)
- 本番ブランチ(main, production)へのpushは禁止
- npm audit fixは--forceなしで実行すること
## 実行制限
- テスト実行は npm test のみ使用
- ビルドは npm run build のみ使用
- Docker操作は行わないこと
チーム開発でのパーミッション管理
ロールベースの推奨設定
SES現場でのチーム開発では、メンバーの経験レベルに応じたパーミッション設定が効果的です。
# ジュニアエンジニア → default(すべて確認)
alias claude-junior="claude --permission-mode default"
# ミドルエンジニア → acceptEdits(編集は自動、実行は確認)
alias claude-mid="claude --permission-mode acceptEdits"
# シニアエンジニア → acceptEdits + 許可コマンドリスト
alias claude-senior="claude --permission-mode acceptEdits \
--allowed-commands 'npm test,npm run build,git status'"
プロジェクト共通設定の配布
チーム全体で統一したセキュリティポリシーを適用するには、.claude/settings.jsonをリポジトリに含めます。
{
"permissions": {
"defaultMode": "acceptEdits",
"allowedCommands": [
"npm test",
"npm run build",
"npm run lint",
"git status",
"git diff",
"git log"
],
"blockedCommands": [
"rm -rf /",
"git push --force",
"DROP TABLE",
"chmod 777",
"curl | bash"
],
"protectedFiles": [
".env*",
"*.key",
"*.pem",
"docker-compose.prod.*",
"terraform/*.tf"
]
},
"hooks": {
"preFileEdit": [
{
"matcher": ".env*",
"action": "block"
}
]
}
}
セキュリティインシデント対応
万が一、Claude Codeが意図しない操作を行った場合の対応手順:
- 即座にCtrl+Cでセッションを中断
git diffで変更内容を確認git checkout -- .で変更をリバート.claude/audit.logで操作履歴を確認- 必要に応じてパーミッション設定を強化
# 変更の確認とリバート
git diff # 何が変更されたか確認
git stash # 変更を一時退避(後で確認可能)
git checkout -- . # または完全リバート
# 監査ログの確認
cat .claude/audit.log | tail -20
SES案件でのパーミッションモード活用事例
事例1: 金融系システムの開発現場
金融系のSES案件では、セキュリティ要件が厳しく、defaultモード + Hooksによる厳格な制限が必要でした。
{
"permissions": {
"defaultMode": "default",
"blockedCommands": ["*"],
"allowedCommands": [
"gradle test",
"gradle build",
"git status"
],
"protectedFiles": [
"*.properties",
"*.xml",
"*.key"
]
}
}
成果:
- コードレビュー時間を40%短縮
- セキュリティインシデントゼロを維持
- 新規メンバーの立ち上がり期間を2週間短縮
事例2: スタートアップのフルスタック開発
スピード重視のスタートアップ案件では、acceptEditsモードで開発速度を最大化しました。
{
"permissions": {
"defaultMode": "acceptEdits",
"allowedCommands": [
"npm *",
"pnpm *",
"git status",
"git diff",
"docker compose up -d"
]
}
}
成果:
- 開発速度が2.5倍に向上
- デイリーのコミット数が平均3件→8件に増加
- コードレビューの指摘事項が30%減少(AIが事前に修正)
事例3: CI/CDパイプラインの完全自動化
大規模なマイクロサービスプロジェクトでは、bypassPermissionsモードでCI/CDを自動化しました。
# .github/workflows/ai-maintenance.yml
name: AI Maintenance
on:
schedule:
- cron: '0 2 * * *' # 毎日深夜2時
jobs:
auto-fix:
runs-on: ubuntu-latest
strategy:
matrix:
service: [api, auth, billing, notification]
steps:
- uses: actions/checkout@v4
- name: Auto Fix & Update
run: |
cd services/${{ matrix.service }}
claude --print --permission-mode bypassPermissions \
--max-turns 15 \
"依存パッケージを更新し、非推奨APIの使用を修正し、テストを実行して結果を報告して"
成果:
- 月次メンテナンス工数を80%削減
- セキュリティパッチの適用リードタイムを1週間→1日に短縮
- 4つのサービスのメンテナンスを並列自動化
パーミッションモードのトラブルシューティング
よくある問題と解決策
問題1: bypassPermissionsが動作しない
# エラー: Permission denied for command execution
# 原因: CLAUDE.mdの制限が優先されている
# 解決策: CLAUDE.mdの制限を確認
cat CLAUDE.md | grep -i "禁止\|制限\|block"
問題2: acceptEditsでファイルが編集されない
# 原因: Hooksのブロックルールに該当
# 解決策: Hooksの設定を確認
cat .claude/settings.json | jq '.hooks.preFileEdit'
問題3: CI/CDでタイムアウト
# 原因: max-turnsが多すぎる、またはタスクが複雑すぎる
# 解決策: タスクを分割し、max-turnsを適切に設定
claude --print --permission-mode bypassPermissions \
--max-turns 5 \
--timeout 300 \
"最初にテストを実行して結果を報告して"
パーミッション設定の検証
設定が正しく適用されているか確認するコマンド:
# 現在の設定を表示
claude --print --permission-mode default "現在のパーミッション設定を表示して"
# ドライランで動作確認
claude --print --permission-mode acceptEdits --dry-run \
"package.jsonを更新してnpm installを実行して"
まとめ:パーミッションモード選択フローチャート
最適なパーミッションモードを選択するためのフローチャート:
┌─ CI/CD環境?
│ ├─ YES → bypassPermissions + --max-turns + 監査Hook
│ └─ NO ─┐
│ ├─ コード編集メイン?
│ │ ├─ YES → acceptEdits
│ │ └─ NO ─┐
│ │ ├─ センシティブなプロジェクト?
│ │ │ ├─ YES → default + Hooks
│ │ │ └─ NO → default
パーミッションモードの選択は、セキュリティと生産性のトレードオフです。チームの成熟度、プロジェクトの要件、運用環境に応じて適切なモードを選択し、Hooksと組み合わせることで、安全かつ効率的なAI駆動開発を実現しましょう。
- 面談時に「Claude Codeのパーミッション管理の経験」をアピールすると差別化になる
- CI/CD自動化の設計ができると、月額単価10-20万円アップの交渉材料になる
- セキュリティポリシーの策定経験は、リーダーポジション獲得に直結する