SDK権限
Claude Code SDKは、アプリケーション内でClaudeがツールを使用する方法を管理できる強力な権限制御を提供します。 このガイドでは、canUseTool
コールバック、フック、およびsettings.json権限ルールを使用した権限システムの実装方法について説明します。完全なAPIドキュメントについては、TypeScript SDKリファレンスを参照してください。
概要
Claude Code SDKは、ツール使用を制御するための4つの補完的な方法を提供します:- 権限モード - すべてのツールに影響するグローバル権限動作設定
- canUseTool コールバック - 他のルールでカバーされていないケースのランタイム権限ハンドラー
- フック - カスタムロジックによるすべてのツール実行の細かい制御
- 権限ルール (settings.json) - 統合されたbashコマンド解析を持つ宣言的な許可/拒否ルール
- 権限モード - 全体的な権限動作の設定(計画、編集の自動承認、チェックのバイパス)
canUseTool
- カバーされていないケースの動的承認、ユーザーに権限を求める- フック - すべてのツール実行のプログラム的制御
- 権限ルール - インテリジェントなbashコマンド解析を持つ静的ポリシー
権限フロー図
処理順序: PreToolUse フック → Askルール → Denyルール → 権限モードチェック → Allowルール → canUseTool コールバック → PostToolUse フック権限モード
権限モードは、Claudeがツールを使用する方法のグローバル制御を提供します。query()
を呼び出すときに権限モードを設定するか、ストリーミングセッション中に動的に変更できます。
利用可能なモード
SDKは4つの権限モードをサポートし、それぞれ異なる動作を持ちます:モード | 説明 | ツール動作 |
---|---|---|
default | 標準権限動作 | 通常の権限チェックが適用される |
plan | 計画モード - 実行なし | Claudeは読み取り専用ツールのみ使用可能;実行前に計画を提示 (現在SDKではサポートされていません) |
acceptEdits | ファイル編集の自動承認 | ファイル編集とファイルシステム操作が自動的に承認される |
bypassPermissions | すべての権限チェックをバイパス | すべてのツールが権限プロンプトなしで実行される(注意して使用) |
権限モードの設定
権限モードは2つの方法で設定できます:1. 初期設定
クエリ作成時にモードを設定:2. 動的モード変更(ストリーミングのみ)
ストリーミングセッション中にモードを変更:モード固有の動作
編集承認モード (acceptEdits
)
編集承認モードでは:
- すべてのファイル編集が自動的に承認される
- ファイルシステム操作(mkdir、touch、rm等)が自動承認される
- 他のツールは通常の権限が必要
- Claudeの編集を信頼する場合の開発速度向上
- 迅速なプロトタイピングと反復に有用
- ファイル編集(Edit、MultiEdit、Writeツール)
- Bashファイルシステムコマンド(mkdir、touch、rm、mv、cp)
- ファイル作成と削除
権限バイパスモード (bypassPermissions
)
権限バイパスモードでは:
- すべてのツール使用が自動的に承認される
- 権限プロンプトが表示されない
- フックは依然として実行される(操作をブロック可能)
- 極めて注意して使用 - Claudeがシステムへの完全アクセスを持つ
- 制御された環境でのみ推奨
権限フローでのモード優先度
権限モードは権限フローの特定のポイントで評価されます:- フックが最初に実行 - 任意のモードをオーバーライド可能
- 拒否ルールがチェック - モードに関係なくツールをブロック
bypassPermissions
モード - アクティブな場合、残りのすべてのツールを許可- 許可ルールがチェック
- その他のモードが特定のツール動作に影響
canUseTool
コールバック - 残りのケースを処理
- フックは
bypassPermissions
モードでもツール使用を常にブロック可能 - 明示的な拒否ルールはすべての権限モードをオーバーライド
bypassPermissions
モードは許可ルールとcanUseTool
をオーバーライド
ベストプラクティス
- デフォルトモードを使用 通常の権限チェックによる制御された実行のため
- acceptEditsモードを使用 分離されたファイルやディレクトリで作業する場合
- bypassPermissionsを避ける 本番環境や機密データを持つシステムでは
- モードとフックを組み合わせる 細かい制御のため
- モードを動的に切り替える タスクの進行と信頼度に基づいて
canUseTool
canUseTool
コールバックはquery
関数を呼び出すときにオプションとして渡されます。ツール名と入力パラメータを受け取り、許可または拒否の決定を返す必要があります。
canUseToolは、Claude Codeがユーザーに権限プロンプトを表示する場合に発火します。例えば、フックと権限ルールがそれをカバーしておらず、自動承認モードでない場合です。
インタラクティブなツール承認の実装方法を示す完全な例:
ツール制御のためのフックの使用
フックは、さまざまな段階でツール実行のプログラム的制御を提供します。フックはすべてのツール使用に対して呼び出され、権限パイプラインの完全な制御を提供します。フック実装
canUseToolとの主な違い
- スコープ: フックはすべてのツール使用に対して呼び出される;
canUseTool
は権限ルールでカバーされていないケースを処理 - 制御: フックは入力の解析と検証を自分で行う必要がある
- イベント: フックは異なる段階で複数のイベント(PreToolUse、PostToolUse等)をサポート
権限ルール(settings.json)の使用
settings.json
の権限ルールは、組み込みのbashコマンド解析を持つ宣言的制御を提供します。これらのルールはcanUseTool
が呼び出される前に評価されます。設定の詳細については、Claude Code設定ドキュメントを参照してください。
設定構造
ルール構文
権限ルールはToolName(pattern)
のパターンに従います
- Bashルール: プレフィックスマッチングを使用(正規表現ではない)。例:
Bash(npm:*)
は「npm」で始まる任意のコマンドにマッチ - ファイルルール: globパターンをサポート。例:
Read(./src/**/*.ts)
はsrc内のTypeScriptファイルにマッチ - ツールのみルール: 括弧を省略してツール全体を制御。例:
WebFetch
はすべてのWeb取得をブロック
SDKでの使用
SDKではルールをプログラム的に設定することはま だできませんが、SDKが読み込まれるパスのsettings.jsonファイルから読み取られます。権限評価順序
- 拒否ルールが最初にチェック - マッチした場合、ツール使用がブロック
- 許可ルールが次にチェック - マッチした場合、ツール使用が許可
- 問い合わせルールがチェック - マッチした場合、ユーザーにプロンプト
- canUseToolコールバックが残りのケースに対して呼び出される
Bashコマンド解析
SDKには、コマンド構造を理解する統合bashパーサーが含まれています:- パイプ、リダイレクト、コマンド置換を処理
rm -rf
やcurl | sh
などの危険なパターンを認識- ワイルドカードとプレフィックスマッチングをサポート
Bash(git:*)
- 任意のgitコマンドにマッチBash(npm run test)
- 正確なコマンドにマッチBash(npm run test:*)
- npm run test:unit、test:integration等にマッチ
ベストプラクティス
- デフォルトモードで開始 標準権限チェックのため
- 権限ルールを使用 静的ポリシー、特にbashコマンドのため(権限設定を参照)
- フックを使用 すべてのツール使用のログ、監査、変換のため(フックタイプを参照)
- canUseToolを使用 カバーされていないケースの動的決定のため(CanUseToolタイプを参照)
- 防御を重層化 重要なアプリケーションでは、モード、ルール、フック、コールバックを組み合わせる