Claude Codeは便利ですが、自動化パイプラインで「READMEを生成するつもりがソースコードを書き換えられた」「知らないうちに危険なコマンドが走っていた」となったら大惨事です。本記事では --allowed-tools、--disallowed-tools、--permission-mode を使い、Claude Codeに「やっていいこと」と「やってはいけないこと」を明確に指定する方法を解説します。最小権限の原則を適用し、安全なパイプラインを設計しましょう。
前提知識
Claude Code CLI の printモード(claude -p)を使った実行と、--output-format json による構造化出力が取得できることを前提とします。--effort や --max-budget-usd によるコスト制御の基本を知っていると、よりスムーズに読み進められます。
前提知識について詳しく知りたい人は、以下の記事を参考にしてください。
- 【Claude Code】printモード入門|パイプ連携とスクリプト活用の基本
- Claude Codeの–json-schemaで構造化出力する方法――スキーマ定義から実践まで
- Claude Codeの–max-budget-usdでAPI費用を管理する方法――コスト超過を防ぐ実践テクニック
- Claude Code –effort完全ガイド|low・medium・highの使い分けでコストを半減させる方法
Claude Codeの「ツール」とは
Claude Codeは、タスクを遂行するために「ツール」と呼ばれる機能群を使います。
- ファイル読み取り(Read): コードファイルの内容を読む
- ファイル書き込み(Write / Edit): ファイルの作成・編集
- シェルコマンド実行(Bash): bash コマンドの実行
- Web検索: 情報の検索
- Git操作: コミット、diff確認など
- etc…
自動化パイプラインでは、これらのツールを無制限に使わせると以下のリスクがあります。
- 意図しないファイルの変更
- 危険なコマンドの実行
- 機密情報(
.envファイルなど)へのアクセス
権限制御オプションの全体像
| オプション | 説明 | 方向性 |
|---|---|---|
--tools | 利用可能なツール集合全体を置き換え | ホワイトリスト |
--allowed-tools | 特定ツールを明示的に許可(追加) | ホワイトリスト |
--disallowed-tools | 特定ツールを明示的に禁止 | ブラックリスト |
--permission-mode | 権限モードの設定 | ポリシー |
--dangerously-skip-permissions | 全権限確認をバイパス | 全開放(危険) |
–disallowed-tools で危険なツールを禁止する
README生成パイプラインでは、ファイルの「読み取り」は必要ですが、「書き込み」は不要です(書き込みはシェルスクリプト側で行うため)。
claude -p "解析して概要を教えてください" --disallowed-tools "Write,Edit,Bash" --output-format json | jq -r '.result'

禁止されたツールを使おうとした場合、Claudeは禁止されたツールを使えないことを認識し、代替手段(コードの提示)で対応します。
例:
ファイルの編集権限がないため、直接コードを修正することはできません。
以下のコードを手動で追加してください:
def subtract(a: int, b: int) -> int:
"""2つの数値を減算する"""
return a - b
–allowed-tools でホワイトリスト制御する
より厳格に、許可するツールだけを指定する方法です。
読み取り権限しか必要ないため、–allowed-toolsにReadを指定します。
claude -p "コード構造を分析してください" --allowed-tools "Read" --output-format json | jq -r '.result'

–tools との違い
3つのオプションは混同しやすいので、整理しておきます。
# --tools: 指定したツールだけが利用可能(集合全体を置き換え)
claude -p "テスト" --tools "Read"
# --allowed-tools: デフォルトツール + 指定ツールを許可
claude -p "テスト" --allowed-tools "Read"
# --disallowed-tools: デフォルトツール - 指定ツールを禁止
claude -p "テスト" --disallowed-tools "Write,Edit"
パイプラインでは、意図が明確な --disallowed-tools が最も分かりやすい場合が多いです。
–dangerously-skip-permissions の危険性
--dangerously-skip-permissions は、すべての権限確認をバイパスするオプションです。
絶対にローカル開発環境では使わないでください。 このオプションが許されるのは、隔離されたコンテナ環境(Docker、CI/CDのサンドボックス)だけです。
# GitHub Actions での例(Dockerコンテナ内なら許容される)
- name: Generate README
run: |
claude -p "README.mdを生成してください"
--dangerously-skip-permissions
--allow-dangerously-skip-permissions
--no-session-persistence
コンテナ環境なら、仮に破壊的操作が行われてもホストに影響しません。
実践:セキュリティを組み込んだパイプライン
権限制御を組み込んだREADME生成パイプラインの例です。
#!/bin/bash
set -euo pipefail
SESSION_ID=$(uuidgen | tr '[:upper:]' '[:lower:]')
# セキュリティポリシー:
# - ファイル書き込み禁止(README生成はスクリプト側で実行)
# - シェルコマンド実行禁止(不要な操作を防止)
SECURITY_OPTS="--disallowed-tools Write,Edit,Bash"
# Phase 1: ファイル構造の把握(読み取りのみ)
phase1=$(claude -p "ファイル一覧と役割をリストアップ"
--session-id "$SESSION_ID"
--effort low
--output-format json
--max-budget-usd 0.02
$SECURITY_OPTS)
# Phase 2: コード解析(読み取りのみ)
phase2=$(claude -p --resume "$SESSION_ID"
"各ファイルのコードを詳細に分析"
--effort medium
--output-format json
--max-budget-usd 0.05
$SECURITY_OPTS)
# Phase 3: 構造化出力(読み取りのみ)
phase3=$(claude -p --resume "$SESSION_ID"
"README用情報をJSON形式で出力"
--effort high
--output-format json
--max-budget-usd 0.10
--fallback-model claude-haiku-4-20250414
$SECURITY_OPTS)
# Phase 4: README組み立て(スクリプト側で実行 - Claudeは関与しない)
readme_json=$(echo "$phase3" | jq -r '.result')
設計のポイント:
- Claudeはコードの「読み取り」と「分析」だけを担当
- ファイルの書き込みはシェルスクリプト側で制御
- Claudeが意図しないファイル変更を行うリスクをゼロにしている
次に試してみよう
以下の3つのユースケースで最適な権限設定を設計してみてください。
(1) コードレビュー(読み取りのみ)
(2) バグ修正(読み書き可能、コマンド実行不可)
(3) テスト実行(読み取り+コマンド実行、書き込み不可)。
まとめ
- Claude Codeはファイル読み書き、コマンド実行などの「ツール」を使ってタスクを遂行する
--disallowed-toolsで不要なツールを禁止し、最小権限の原則を適用できる--allowed-toolsでホワイトリスト方式の厳格な制御も可能--dangerously-skip-permissionsは隔離環境でのみ使用し、ローカル環境では絶対に使わない- パイプラインではClaudeを「読み取り・分析」に限定し、ファイル書き込みはスクリプト側で行うのがベストプラクティス
さらに深く学びたい方へ
Claude Codeの Skills・MCP・Agent・Hooks・Plugin を体系的に学べる有料教材を Zenn で公開しています。
Claude Code 実践ガイド(Zenn Book)






