Loading...
    • 開発者ガイド
    • APIリファレンス
    • MCP
    • リソース
    • リリースノート
    Search...
    ⌘K
    最初のステップ
    Claude入門クイックスタート
    モデルと価格
    モデル概要モデルの選択Claude 4.5の新機能Claude 4.5への移行モデルの廃止予定価格
    Claudeで構築
    機能概要Messages APIの使用コンテキストウィンドウプロンプトのベストプラクティス
    機能
    プロンプトキャッシングコンテキスト編集拡張思考エフォートストリーミングメッセージバッチ処理引用多言語対応トークンカウントエンベディングビジョンPDF対応Files API検索結果構造化出力Google Sheetsアドオン
    ツール
    概要ツール使用の実装方法トークン効率的なツール使用細粒度ツールストリーミングBashツールコード実行ツールプログラマティックツール呼び出しコンピュータ使用ツールテキストエディタツールWebフェッチツールWeb検索ツールメモリツールツール検索ツール
    エージェントスキル
    概要クイックスタートベストプラクティスAPIでスキルを使用
    エージェントSDK
    概要TypeScript SDKPython SDK移行ガイド
    ガイド
    ストリーミング入力権限の処理セッション管理SDKの構造化出力エージェントSDKのホスティングシステムプロンプトの変更SDKのMCPカスタムツールSDKのサブエージェントSDKのスラッシュコマンドSDKのエージェントスキルコストと使用状況の追跡TodoリストSDKのプラグイン
    APIのMCP
    MCPコネクタリモートMCPサーバー
    サードパーティプラットフォームのClaude
    Amazon BedrockMicrosoft FoundryVertex AI
    プロンプトエンジニアリング
    概要プロンプトジェネレータプロンプトテンプレートの使用プロンプト改善ツール明確で直接的に例を使用する(マルチショットプロンプティング)Claudeに考えさせる(CoT)XMLタグを使用Claudeに役割を与える(システムプロンプト)Claudeの応答を事前入力複雑なプロンプトをチェーン長いコンテキストのヒント拡張思考のヒント
    テストと評価
    成功基準の定義テストケースの開発評価ツールの使用レイテンシの削減
    ガードレールの強化
    ハルシネーションの削減出力の一貫性を向上ジェイルブレイクの軽減ストリーミング拒否プロンプト漏洩の削減Claudeをキャラクターのままに
    管理とモニタリング
    Admin API概要使用状況とコストAPIClaude Code Analytics API
    Console
    Log in
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...

    Solutions

    • AI agents
    • Code modernization
    • Coding
    • Customer support
    • Education
    • Financial services
    • Government
    • Life sciences

    Partners

    • Amazon Bedrock
    • Google Cloud's Vertex AI

    Learn

    • Blog
    • Catalog
    • Courses
    • Use cases
    • Connectors
    • Customer stories
    • Engineering at Anthropic
    • Events
    • Powered by Claude
    • Service partners
    • Startups program

    Company

    • Anthropic
    • Careers
    • Economic Futures
    • Research
    • News
    • Responsible Scaling Policy
    • Security and compliance
    • Transparency

    Learn

    • Blog
    • Catalog
    • Courses
    • Use cases
    • Connectors
    • Customer stories
    • Engineering at Anthropic
    • Events
    • Powered by Claude
    • Service partners
    • Startups program

    Help and security

    • Availability
    • Status
    • Support
    • Discord

    Terms and policies

    • Privacy policy
    • Responsible disclosure policy
    • Terms of service: Commercial
    • Terms of service: Consumer
    • Usage policy
    ガイド

    権限の処理

    Claude Agent SDKでツールの使用と権限を制御する

    SDK権限

    Claude Agent SDKは、アプリケーションでClaudeがツールを使用する方法を管理できる強力な権限制御を提供します。

    このガイドでは、canUseToolコールバック、フック、およびsettings.json権限ルールを使用して権限システムを実装する方法について説明します。完全なAPIドキュメントについては、TypeScript SDKリファレンスを参照してください。

    概要

    Claude Agent SDKは、ツールの使用を制御するための4つの補完的な方法を提供します:

    1. 権限モード - すべてのツールに影響するグローバル権限動作設定
    2. canUseTool コールバック - 他のルールでカバーされていないケースのランタイム権限ハンドラー
    3. フック - カスタムロジックによるすべてのツール実行の細かい制御
    4. 権限ルール (settings.json) - 統合されたbashコマンド解析による宣言的な許可/拒否ルール

    各アプローチの使用例:

    • 権限モード - 全体的な権限動作の設定(計画、編集の自動承認、チェックのバイパス)
    • canUseTool - カバーされていないケースの動的承認、ユーザーに権限を求める
    • フック - すべてのツール実行のプログラム的制御
    • 権限ルール - インテリジェントなbashコマンド解析による静的ポリシー

    権限フロー図

    処理順序: PreToolUse Hook → 拒否ルール → 許可ルール → 確認ルール → 権限モードチェック → canUseTool Callback → PostToolUse Hook

    権限モード

    権限モードは、Claudeがツールを使用する方法のグローバル制御を提供します。query()を呼び出すときに権限モードを設定したり、ストリーミングセッション中に動的に変更したりできます。

    利用可能なモード

    SDKは4つの権限モードをサポートしており、それぞれ異なる動作をします:

    モード説明ツールの動作
    default標準権限動作通常の権限チェックが適用される
    plan計画モード - 実行なしClaudeは読み取り専用ツールのみ使用可能;実行前に計画を提示 (現在SDKではサポートされていません)
    acceptEditsファイル編集の自動承認ファイル編集とファイルシステム操作が自動的に承認される
    bypassPermissionsすべての権限チェックをバイパスすべてのツールが権限プロンプトなしで実行される(注意して使用)

    権限モードの設定

    権限モードは2つの方法で設定できます:

    1. 初期設定

    クエリを作成するときにモードを設定:

    import { query } from "@anthropic-ai/claude-agent-sdk";
    
    const result = await query({
      prompt: "このコードのリファクタリングを手伝って",
      options: {
        permissionMode: 'default'  // 標準権限モード
      }
    });

    2. 動的モード変更(ストリーミングのみ)

    ストリーミングセッション中にモードを変更:

    モード固有の動作

    編集承認モード(acceptEdits)

    編集承認モードでは:

    • すべてのファイル編集が自動的に承認される
    • ファイルシステム操作(mkdir、touch、rm等)が自動承認される
    • 他のツールは通常の権限が必要
    • Claudeの編集を信頼する場合の開発速度向上
    • 迅速なプロトタイピングと反復に有用

    自動承認される操作:

    • ファイル編集(Edit、Writeツール)
    • Bashファイルシステムコマンド(mkdir、touch、rm、mv、cp)
    • ファイルの作成と削除

    権限バイパスモード(bypassPermissions)

    権限バイパスモードでは:

    • すべてのツール使用が自動的に承認される
    • 権限プロンプトが表示されない
    • フックは依然として実行される(操作をブロック可能)
    • 極度の注意が必要 - Claudeがシステムへの完全なアクセス権を持つ
    • 制御された環境でのみ推奨

    権限フローにおけるモードの優先度

    権限モードは権限フローの特定のポイントで評価されます:

    1. フックが最初に実行 - 許可、拒否、確認、または継続が可能
    2. 拒否ルールがチェックされる - モードに関係なくツールをブロック
    3. 許可ルールがチェックされる - マッチした場合ツールを許可
    4. 確認ルールがチェックされる - マッチした場合権限を求める
    5. 権限モードが評価される:
      • bypassPermissionsモード - アクティブな場合、残りのすべてのツールを許可
      • その他のモード - canUseToolコールバックに委譲
    6. canUseToolコールバック - 残りのケースを処理

    これは以下を意味します:

    • フックはbypassPermissionsモードでもツール使用を常に制御できる
    • 明示的な拒否ルールはすべての権限モードを上書きする
    • 確認ルールは権限モードより前に評価される
    • bypassPermissionsモードはマッチしないツールに対してcanUseToolコールバックを上書きする

    ベストプラクティス

    1. 通常の権限チェックによる制御された実行にはdefaultモードを使用
    2. 分離されたファイルやディレクトリで作業する場合はacceptEditsモードを使用
    3. 本番環境や機密データのあるシステムではbypassPermissionsを避ける
    4. 細かい制御のためにモードとフックを組み合わせる
    5. タスクの進行と信頼度に基づいてモードを動的に切り替える

    モード進行の例:

    // 制御された実行のためにdefaultモードで開始
    permissionMode: 'default'
    
    // 迅速な反復のためにacceptEditsに切り替え
    await q.setPermissionMode('acceptEdits')

    canUseTool

    canUseToolコールバックはquery関数を呼び出すときにオプションとして渡されます。ツール名と入力パラメータを受け取り、許可または拒否の決定を返す必要があります。

    canUseToolは、Claude Codeがユーザーに権限プロンプトを表示する場合に発動します。例えば、フックと権限ルールがそれをカバーしておらず、acceptEditsモードでない場合です。

    インタラクティブなツール承認の実装方法を示す完全な例は以下の通りです:

    関連リソース

    • フックガイド - ツール実行の細かい制御のためのフック実装方法を学ぶ
    • 設定: 権限ルール - bashコマンド解析による宣言的な許可/拒否ルールを設定する
    • canUseTool
    import { query } from "@anthropic-ai/claude-agent-sdk";
    
    // ストリーミング入力用の非同期ジェネレーターを作成
    async function* streamInput() {
      yield { 
        type: 'user',
        message: { 
          role: 'user', 
          content: "デフォルト権限で始めましょう" 
        }
      };
      
      // 会話の後で...
      yield {
        type: 'user',
        message: {
          role: 'user',
          content: "今度は開発を速めましょう"
        }
      };
    }
    
    const q = query({
      prompt: streamInput(),
      options: {
        permissionMode: 'default'  // デフォルトモードで開始
      }
    });
    
    // モードを動的に変更
    await q.setPermissionMode('acceptEdits');
    
    // メッセージを処理
    for await (const message of q) {
      console.log(message);
    }
    import { query } from "@anthropic-ai/claude-agent-sdk";
    
    async function promptForToolApproval(toolName: string, input: any) {
      console.log("\n🔧 ツールリクエスト:");
      console.log(`   ツール: ${toolName}`);
      
      // ツールパラメータを表示
      if (input && Object.keys(input).length > 0) {
        console.log("   パラメータ:");
        for (const [key, value] of Object.entries(input)) {
          let displayValue = value;
          if (typeof value === 'string' && value.length > 100) {
            displayValue = value.substring(0, 100) + "...";
          } else if (typeof value === 'object') {
            displayValue = JSON.stringify(value, null, 2);
          }
          console.log(`     ${key}: ${displayValue}`);
        }
      }
      
      // ユーザー承認を取得(UIロジックに置き換えてください)
      const approved = await getUserApproval();
      
      if (approved) {
        console.log("   ✅ 承認\n");
        return {
          behavior: "allow",
          updatedInput: input
        };
      } else {
        console.log("   ❌ 拒否\n");
        return {
          behavior: "deny",
          message: "ユーザーがこのツールの権限を拒否しました"
        };
      }
    }
    
    // 権限コールバックを使用
    const result = await query({
      prompt: "このコードベースの分析を手伝って",
      options: {
        canUseTool: async (toolName, input) => {
          return promptForToolApproval(toolName, input);
        }
      }
    });