Claude Codeの権限設定(パーミッション)完全ガイド
セキュリティと利便性を両立する権限管理の全知識
なぜ権限設定が重要なのか
Claude Codeは、ファイルの読み書き、コマンドの実行、Git操作など、強力なツールを持っています。これらのツールを適切に管理しないと、意図しないファイルの変更や危険なコマンドの実行が発生する可能性があります。
権限設定を正しく理解し活用することで、セキュリティを確保しながら生産性を最大化できます。この記事では、Claude Codeの権限システムの全体像から具体的な設定方法まで解説します。
権限システムの全体像
Claude Codeのツールカテゴリ
Claude Codeが使用できるツールは大きく以下に分類されます。
| ツールカテゴリ | 具体例 | デフォルト権限 |
|---|---|---|
| ファイル読み取り | Read, Glob, Grep | 許可 |
| ファイル書き込み | Edit, Write | 確認が必要 |
| コマンド実行 | Bash | 確認が必要 |
| Web取得 | WebFetch, WebSearch | 許可 |
| その他 | NotebookEdit | 確認が必要 |
パーミッションモード
Claude Codeには5つのパーミッションモードがあります。起動時に --permission-mode オプションで指定します。
1. デフォルトモード(default)
最も一般的なモードです。読み取り系のツールは自動で許可され、書き込み系やコマンド実行は都度確認が求められます。
動作イメージ
# ファイル読み取り → 自動で許可
# ファイル編集 → 「このファイルを編集してよいですか?」と確認
# コマンド実行 → 「このコマンドを実行してよいですか?」と確認
2. acceptEditsモード(acceptEdits)
ファイルの編集(Edit/Write)は自動で許可されますが、コマンド実行は都度確認が求められます。コード修正作業を高速に進めたい場合に便利です。
起動方法
claude --permission-mode acceptEdits
3. プランモード(plan)
Claude Codeが直接変更を加えず、計画の提案のみを行うモードです。コードレビューや設計検討など、変更を加えたくない場合に有用です。
起動方法
claude --permission-mode plan
4. dontAskモード(dontAsk)
allowリストに含まれるツールはすべて自動許可し、それ以外は拒否します。確認プロンプトが一切表示されないため、CI/CD環境での自動化に適しています。
起動方法
claude --permission-mode dontAsk
5. バイパスモード(bypassPermissions)
すべての権限確認をスキップし、Claude Codeが自由にツールを使用できるモードです。信頼できるプロジェクトでの高速作業に適しますが、リスクも高いため注意が必要です。
起動方法
claude --permission-mode bypassPermissions
# または従来のフラグ
claude --dangerously-skip-permissions
警告: bypassPermissionsモードは、意図しないファイル削除やシステムコマンドの実行のリスクがあります。使用する場合は、プロジェクトのバックアップを取っておくことを強く推奨します。
--allowedTools と --disallowedTools
コマンドラインオプションで、特定のツールの許可・拒否を細かく制御できます。
--allowedTools(ツールの許可)
特定のBashコマンドを事前許可
# npmコマンドのみ事前許可
claude --allowedTools "Bash(npm *)"
# 複数ツールを許可
claude --allowedTools "Edit" --allowedTools "Bash(git *)"
パターンマッチが使えるため、Bash(npm *) のように特定のコマンドパターンだけを許可することが可能です。
--disallowedTools(ツールの拒否)
特定のツールを禁止
# Bashツールを完全に禁止
claude --disallowedTools "Bash"
# ファイル書き込みを禁止(読み取り専用モード)
claude --disallowedTools "Edit" --disallowedTools "Write"
settings.jsonによるプロジェクト単位の設定
プロジェクトごとに権限設定を永続化したい場合は、.claude/settings.jsonを使用します。
設定ファイルの場所
| ファイル | 適用範囲 | Git管理 |
|---|---|---|
.claude/settings.json | プロジェクト全体(チーム共有) | する |
.claude/settings.local.json | 個人のローカル設定 | しない |
~/.claude/settings.json | グローバル(全プロジェクト) | 対象外 |
settings.jsonの例
プロジェクト用設定ファイルの例
{
"permissions": {
"allow": [
"Read",
"Glob",
"Grep",
"Bash(npm test)",
"Bash(npm run lint)",
"Bash(git status)",
"Bash(git diff *)"
],
"deny": [
"Bash(rm -rf *)",
"Bash(sudo *)"
]
}
}
設定の優先順位
- コマンドライン引数(最優先)
.claude/settings.local.json(個人設定).claude/settings.json(プロジェクト設定)~/.claude/settings.json(グローバル設定)- デフォルト設定(最低優先)
実践的な権限設定パターン
パターン1: フロントエンド開発者向け
{
"permissions": {
"allow": [
"Edit",
"Write",
"Bash(npm *)",
"Bash(npx *)",
"Bash(git *)"
],
"deny": [
"Bash(sudo *)",
"Bash(rm -rf *)"
]
}
}
npmコマンドとGit操作を自動許可し、危険なシステムコマンドはブロックする設定です。
パターン2: コードレビュー専用
{
"permissions": {
"allow": [
"Read",
"Glob",
"Grep",
"Bash(git log *)",
"Bash(git diff *)"
],
"deny": [
"Edit",
"Write",
"Bash(git commit *)",
"Bash(git push *)"
]
}
}
コードの閲覧とGitログの確認のみを許可する、安全なレビュー用設定です。
パターン3: CI/CD自動化用
claude --print --dangerously-skip-permissions \
--allowedTools "Bash(npm test)" \
--allowedTools "Bash(npm run build)" \
"テストを実行して結果を報告してください"
自動化スクリプトから使用する場合は、必要最小限のツールだけを許可しつつ、確認プロンプトをバイパスします。
セキュリティに関するベストプラクティス
権限設定のチェックリスト
- 最小権限の原則: 必要なツールだけを許可し、不要なツールは明示的に拒否する
- 危険コマンドの拒否:
rm -rf、sudo、chmod 777などは常に拒否リストに入れる - チーム共有設定:
.claude/settings.jsonをGitにコミットし、チーム全体で統一した権限設定を使う - 個人設定の分離: 個人的な緩和設定は
.claude/settings.local.jsonに記載し、.gitignoreで除外する - 定期的な見直し: プロジェクトの進行に応じて、権限設定を適宜見直す
- 本番環境での制限: 本番環境に影響するコマンドは必ず拒否リストに入れる