メインコンテンツへスキップ
モジュール 1:コアエージェント 2 / 6
初級 S02 ツール 権限 セキュリティ

ツールシステムと権限

Claude Code がモデルの要求をツール操作に変換し、権限モードとルールがその操作を制御する仕組みを学ぶ。

2026年3月20日 15 分で読む
確認済み カリキュラム確認日: 2026年7月20日

学ぶこと

ツールにより、Claude Code はテキストを生成するだけでなく環境に対して操作できます。このセッションでは次を学びます。

  • Claude が組み込みツールを選択して呼び出す仕組み
  • 権限チェックが行われる場所
  • 各権限モードが実際に変えるもの
  • allowaskdeny ルールによる細かな制御

意図から操作まで

ツールには名前、説明、入力スキーマがあります。Claude がツールと構造化された入力を選択し、Claude Code が呼び出しを検証して権限ポリシーを適用してから実行します。

ユーザーの要求

Claude がツール呼び出しを提案

Claude Code がモード + 権限ルールを確認
    ├─ allow → 実行
    ├─ ask  → 承認を待つ
    └─ deny → ブロックし、結果を Claude に返す

ReadEditBashWebFetchTaskCreate などの組み込みツール名は、権限ルール、サブエージェントのツール一覧、hook matcher でも使われる正確な名前です。大規模なツールカタログは遅延され、ToolSearch で必要に応じて読み込まれるため、すべての完全なスキーマが最初からコンテキストにあるとは限りません。

権限の基準

Manual モードの設定値は default です。通常、作業ディレクトリ内の読み取りは確認なしで実行され、ファイル編集と読み取り専用ではない shell コマンドは確認されます。他のモードはこの基準を変更します。

モード通常の承認なしで実行されるもの用途
defaultmanual エイリアス)読み取り初めての作業、機密性の高い作業
acceptEdits読み取り、ファイル編集、一般的なファイル操作レビューしながら行うローカル作業
plan読み取りと読み取り専用の調査編集前の分析と設計
autoバックグラウンド安全チェックを通過した操作方向性を信頼できる長時間作業
dontAsk事前承認済み操作と組み込み読み取り専用操作のみallowlist を使う非対話型自動化
bypassPermissionsほぼすべて分離されたコンテナまたは VM のみ

autobypassPermissions は同義ではありません。Auto モードは別の安全分類器で操作を評価し、明示的なルールも適用します。bypass モードは通常の権限チェックを飛ばすため、保護は大幅に弱くなります。

--permission-mode で起動モードを指定できます。

claude --permission-mode plan
claude --permission-mode auto
claude --permission-mode dontAsk
claude --permission-mode bypassPermissions

次の従来のフラグは bypassPermissions と同等であり、Auto モードではありません

claude --dangerously-skip-permissions

きめ細かなルール

モードが基準を設定し、ルールが個々の呼び出しを許可、確認、拒否のいずれにするか決めます。構文は Tool または Tool(specifier) です。

{
  "permissions": {
    "allow": [
      "Bash(npm test *)",
      "Read(/docs/**)"
    ],
    "ask": [
      "Bash(git push *)"
    ],
    "deny": [
      "Read(./.env)",
      "WebFetch(domain:paste.example)"
    ]
  }
}

ルールは deny → ask → allow の順で評価されます。広い deny を狭い allow で上書きすることはできません。/permissions では、有効なルールと各ルールの設定ファイルを確認できます。

実用的なメンタルモデル

システムを二つの質問に分けて考えます。

  1. Claude はこのツールを認識し、要求できるか。 ツールの可用性、遅延読み込み、MCP 設定が決めます。
  2. この呼び出しを今実行してよいか。 現在のモード、権限ルール、保護パス、hooks、組織ポリシーが決めます。

ツールを隠すことと、特定の使い方を拒否することは別の制御です。"Bash" のようなツール名だけの deny はツールを Claude のコンテキストから除外します。"Bash(rm *)" のような範囲付き deny は Bash を残したまま一致する呼び出しだけをブロックします。

試してみる

.claude/settings.local.json に狭いルールを作成し、Manual モードで起動して、テスト実行とブランチの push を依頼してください。テストは確認なし、push は確認ありになることを確かめます。

{
  "permissions": {
    "allow": ["Bash(npm test *)"],
    "ask": ["Bash(git push *)"]
  }
}

Bash 全体を許可するより、狭いコマンドパターンを優先してください。権限パターンはポリシー境界であり、危険なコマンドのレビューに代わるものではありません。

次のセッション

セッション 3 では、構造化された TaskCreateTaskGetTaskListTaskUpdate を使い、承認済みの計画を可視化された追跡可能な作業に変えます。

公式ソース

最終確認:2026-07-20。