自律性と安全性のバランス。Claude Codeのパーミッションモデルは、AIに「どこまで自由にさせるか」を人間が制御する仕組みだ。
なぜパーミッションが必要なのか
Claude Codeは強力なツールである。ファイルを削除し、コマンドを実行し、Gitにpushできる。
この「強力さ」は、同時に「危険さ」でもある。
- 間違ったファイルを削除するかもしれない
- 意図しないコマンドを実行するかもしれない
- 機密データを含むファイルをコミットするかもしれない
パーミッションモデルは、AIの能力を制限するためではなく、人間がAIの行動を「監督」するためのものだ。
パーミッションの動作
Claude Codeがツールを使おうとすると、以下のフローが発生する。
1. Claude Code: 「Editツールで src/app.tsx を編集したい」
2. パーミッションチェック:
- allow リストにマッチ → 自動承認 → 実行
- deny リストにマッチ → 自動拒否 → 不実行
- どちらにもマッチしない → ユーザーに確認
3. ユーザーの選択:
- Allow → 今回だけ許可
- Always allow → 以後このツールを自動承認
- Deny → 今回だけ拒否
パーミッションモード
Claude Codeには複数の実行モードがある。
default(デフォルト)
すべてのツール使用で確認が入る。settings.jsonの allow / deny 設定は適用される。
acceptEdits
ファイルの読み書き(Read、Write、Edit)は自動承認。Bashコマンドは引き続き確認が入る。
こんな人に: ファイル操作は信頼するが、コマンド実行は確認したい。
bypassPermissions
すべてのツール使用が自動承認される。確認は一切入らない。
bypassPermissions は上級者向け
このモードは、Claude Codeの行動を十分に理解した上級者のみが使うべきだ。特に医療データを扱うプロジェクトでは、このモードの使用は推奨しない。
plan
読み取り系ツールのみが使える。ファイル編集やコマンド実行はできない。計画立案やコードベース調査に使う。
セキュリティの考え方
Human in the Loop
Claude Codeの設計思想は「Human in the Loop」(人間が常にループの中にいる)である。
AIがどれだけ賢くても、最終的な判断と承認は人間が行う。これは、医療における「AIの診断支援」と同じ構造だ。AIが鑑別診断リストを提示しても、最終診断を下すのは医師だ。
最小権限の原則
必要なツールだけを許可し、それ以外は確認を求める。
{
"permissions": {
"allow": ["Read", "Glob", "Grep"],
"deny": ["Bash(rm *)", "Bash(git push --force *)"]
}
}
破壊的操作の保護
Claude Code自体にも安全装置が組み込まれている。
git push --forceは原則として使わないrm -rfのような破壊的コマンドは使用前に確認する- 既存ファイルの上書き前に内容を読み取る
- コミット前にsecretのチェックを行う
医療プロジェクトでの推奨設定
患者データや医療情報を扱うプロジェクトでは、以下を推奨する。
- bypassPermissions は絶対に使わない
- ファイル書き込みは毎回確認する
- Bashコマンドは安全なものだけを allow に追加する
.envファイルや認証情報は deny に追加する
{
"permissions": {
"allow": [
"Read",
"Glob",
"Grep",
"Bash(npm test)",
"Bash(npm run lint)"
],
"deny": [
"Bash(rm *)",
"Bash(curl *)",
"Bash(wget *)"
]
}
}
パーミッションの段階的緩和
Claude Codeに慣れるにつれて、パーミッションを段階的に緩和していくのが理想的な流れだ。
ステージ1: すべて確認
{ "permissions": { "allow": [] } }
AIのすべての行動を観察し、何をしようとしているかを理解する。
ステージ2: 読み取りを自動化
{
"permissions": {
"allow": ["Read", "Glob", "Grep"]
}
}
ファイルの読み取りは安全なので自動承認する。
ステージ3: 編集を自動化
{
"permissions": {
"allow": ["Read", "Glob", "Grep", "Edit", "Write"]
}
}
ファイル操作全般を信頼する。
ステージ4: 安全なコマンドを自動化
{
"permissions": {
"allow": [
"Read", "Glob", "Grep", "Edit", "Write",
"Bash(npm *)", "Bash(git status)", "Bash(git diff *)"
]
}
}
テスト実行やGit状態確認を自動化する。
急がず、段階的に信頼を構築していく。 これが、Claude Codeとの最も安全で効果的な付き合い方である。
この章のポイント
- パーミッションはAIの能力制限ではなく、人間による「監督」の仕組みである
- default、acceptEdits、bypassPermissions、plan の4つのモードがある
- settings.jsonのallow/denyでツール単位・コマンドパターン単位で制御できる
- 医療プロジェクトではbypassPermissionsを使わず、破壊的操作をdenyに追加する
- 慣れに応じて段階的にパーミッションを緩和していくのが理想的