claude -p で使う非対話モードの
オプション
(ヘッドレスモード)

claude -p(または --print)は、Claude Code をスクリプトやパイプラインに組み込むためのフラグです。
レスポンスを標準出力に出力して即座に終了します。
対話セッションを開かずシェルから直接使えるため、CI/CD やシェルスクリプトとの相性が良いのが特徴です。

公式ドキュメントではこのモードを「ヘッドレスモード」と呼んでいます。
以前は “headless mode” という名称でしたが、現在は -p フラグの説明として統合されています。

関連記事

1. 基本的な使い方

claude -p "このコードのバグを教えて"
Code language: JavaScript (javascript)

プロンプトを引数に渡すだけで、回答がそのまま stdout に出力されます。
パイプとの組み合わせも自然に書けます。

cat error.log | claude -p "このエラーの原因と修正方法を教えて"
Code language: JavaScript (javascript)

ファイルにリダイレクトすることで、ドキュメント生成にも使えます。

claude -p "src/ 内のエクスポート関数のドキュメントを生成して" > docs/api-reference.md
Code language: JavaScript (javascript)

1.1. Git コミットメッセージの自動生成

git diff --staged | claude -p "このdiffに対するコミットメッセージを日本語で書いて" \
  | git commit -F -
Code language: JavaScript (javascript)

1.2. PR のセキュリティレビュー

audit_pr() {
  local pr_number="$1"
  gh pr diff "$pr_number" | claude -p \
    --append-system-prompt "セキュリティエンジニアとして、脆弱性・非安全パターン・コンプライアンス上の問題をレビューしてください。" \
    --output-format json \
    --allowedTools "Read,Grep"
}
audit_pr 123 > security-report.json
Code language: JavaScript (javascript)

1.3. エラーログの自動解析

npm test 2>&1 | claude -p "失敗しているテストの原因と修正方法を教えて"
Code language: JavaScript (javascript)

2. システムプロンプトのカスタマイズ

--append-system-prompt でデフォルトの動作を保ちながら指示を追加できます。
--system-prompt を使うと既存のシステムプロンプトをまるごと置き換えます。

# セキュリティレビュー用にロールを追加する
gh pr diff "$PR_NUMBER" | claude -p \
  --append-system-prompt "あなたはセキュリティエンジニアです。脆弱性と非準拠パターンをレビューしてください。" \
  --output-format json
Code language: PHP (php)

2.1. モデルの指定

claude -p "レビューして" --model opus
claude -p "レビューして" --model claude-sonnet-4-6
Code language: JavaScript (javascript)

エイリアス(sonnetopus)でも、フルモデル名でも指定できます。過負荷時のフォールバック先を設定することもできます。

claude -p "処理して" --model opus --fallback-model sonnet
Code language: JavaScript (javascript)

2.2. セッションの継続と再開(–continue)

非対話モードでも会話の文脈を引き継げます。
セッションIDを使って複数ステップの処理を組むことも可能です。

# 直近のセッションを続ける
claude -p "前の回答をもう少し詳しく" --continue

# セッションIDを指定して再開
claude -p "追加の修正をして" --resume <session-id>
Code language: PHP (php)

セッションIDを変数に保持してマルチターンの自動処理を組む使い方が公式でも紹介されています。

session_id=$(claude -p "レビューを開始して" --output-format json | jq -r '.session_id')
claude -p --resume "$session_id" "ライブラリのアップデート箇所に絞って"
claude -p --resume "$session_id" "問題点のサマリーを生成して"
Code language: JavaScript (javascript)

セッションを保存したくない場合は --no-session-persistence を付けます。
機密データを含む処理や使い捨てのタスクに向いています。

claude -p "この設定ファイルを解析して" --no-session-persistence
Code language: JavaScript (javascript)

3. ツールの制御と権限(--permission-mode

-p モードでもツール(Bash、Edit など)を使わせることができます。
操作の範囲は --permission-mode--allowedTools で制御します。

# 編集と読み取りだけ許可
claude -p "README を英語に翻訳して上書きして" \
  --permission-mode acceptEdits \
  --allowedTools "Read,Edit"

# 全権限を許可(隔離済み環境専用)
claude -p "テストを修正して通して" \
  --dangerously-skip-permissions
Code language: PHP (php)

--permission-mode の選択肢は以下のとおりです。

モード動作
default各操作の前に確認を求める
acceptEditsファイル編集は自動承認、それ以外は確認
bypassPermissionsすべて自動承認
dontAsk確認ダイアログを表示せず、デフォルトの動作で進む
plan操作の計画だけを出力し、実行しない

--allowedTools を使うと、許可するツールをさらに絞り込めます。
読み取り専用で動かしたい場合は "Read,Grep,Glob" のように指定すると安全です。

3.1. MCP サーバーとの組み合わせ

--mcp-config で MCP サーバーの設定を読み込むと、外部ツールとの連携もスクリプトから実行できます。

claude -p "Datadog のアラートを診断して対応手順を出して" \
  --append-system-prompt "あなたは SRE の専門家です。影響範囲を評価し、即時対応の手順を示してください。" \
  --output-format json \
  --allowedTools "Bash,Read,mcp__datadog" \
  --mcp-config monitoring-tools.json
Code language: JavaScript (javascript)

API コストの上限をドル単位で指定できます。
CI での意図しない高額課金を防ぐのに使えます。

4. 出力フォーマットの制御

--output-format で出力形式を切り替えられます。

# デフォルト(プレーンテキスト)
claude -p "要約して" --output-format text

# JSON(メタデータ付きの単一オブジェクト)
claude -p "要約して" --output-format json

# ストリーミングJSON(生成されるたびにチャンクが流れる)
claude -p "要約して" --output-format stream-json
Code language: PHP (php)

JSON フォーマットを選択すると、コスト・所要時間・セッションIDを含む構造化データが返ってきます。

{
  "type": "result",
  "subtype": "success",
  "total_cost_usd": 0.003,
  "duration_ms": 1234,
  "num_turns": 6,
  "result": "レスポンス本文...",
  "session_id": "abc123"
}
Code language: JSON / JSON with Comments (json)

stream-jsonjq と組み合わせて特定フィールドだけ取り出す場合に便利です。

result=$(claude -p "コードを生成して" --output-format json)
code=$(echo "$result" | jq -r '.result')
cost=$(echo "$result" | jq -r '.total_cost_usd')
Code language: JavaScript (javascript)

4.1. 構造化出力

--json-schema でレスポンスの形式を JSON スキーマで指定できます。スクリプトで確実にパースしたいときに使います。

claude -p "依存パッケージを列挙して" \
  --json-schema '{"type":"object","properties":{"packages":{"type":"array","items":{"type":"string"}}},"required":["packages"]}'
Code language: JavaScript (javascript)

5. エラー処理とタイムアウト

スクリプトに組み込む場合は終了コードの確認とタイムアウト設定を入れておくと安全です。

if ! claude -p "$prompt" 2>error.log; then
    echo "エラーが発生しました:" >&2
    cat error.log >&2
    exit 1
fi

# 5分でタイムアウト
timeout 300 claude -p "$complex_prompt" || echo "タイムアウトしました"
Code language: PHP (php)

5.1. エージェントのターン数制限

--max-turns でエージェントが実行できる反復回数を制限できます。
デフォルトではヘッドレスモードで最大10ターンです。
CI環境でリソースを管理したいときや、無限ループを防ぎたい場合に設定します。

# 軽いタスクは3ターンで打ち切る
claude -p "コードをレビューして" --max-turns 3

# 複雑なリファクタリングは10ターン許可
claude -p "auth モジュールをリファクタリングして" \
  --max-turns 10 \
  --dangerously-skip-permissions
Code language: PHP (php)

5.2. コスト上限の設定

claude -p "リファクタリングして" --max-budget-usd 0.50
Code language: JavaScript (javascript)

6. codex exec との違い

claude -pcodex exec はどちらも非対話モードですが、設計の目的が異なります。

  • claude -p は Claude Code のインタラクティブ CLI に -p フラグを付けたものです。
    対話セッションと同じ機能をそのままスクリプトから使える、という位置づけです。
  • codex exec はスクリプトや CI 専用に設計された独立したサブコマンドです。
    自動化パイプラインでの使用を前提に、オプション体系が整理されています。

6.1. 使い分けの目安

ケース向いているツール
ワンライナーやパイプで使いたいclaude -p
CI パイプラインに組み込むどちらも可
セッションを跨いで文脈を引き継ぎたいclaude -p --resume
サンドボックスポリシーを細かく制御したいcodex exec -s
画像を添付してコード生成したいcodex exec -i
MCP サーバーと連携したいclaude -p --mcp-config
コスト上限を設定したいclaude -p --max-budget-usd

6.2. 権限とサンドボックスの扱い

claude -p--permission-mode でモードを選び、--dangerously-skip-permissions で全確認をスキップします。
サンドボックスの概念は持っていません。

codex exec-s / --sandbox でサンドボックスポリシーを細かく制御できます。
read-onlyworkspace-writedanger-full-access から選択でき、--full-auto が「確認スキップ+workspace書き込み許可」をまとめて有効にする便利エイリアスになっています。

# claude -p の場合
claude -p "テストを修正して" --permission-mode bypassPermissions

# codex exec の場合(同等)
codex exec --full-auto "テストを修正して"
Code language: PHP (php)

6.3. 出力制御

claude -p--output-format(text / json / stream-json)と --json-schema で出力を制御します。JSON フォーマットではコストや所要時間のメタデータも含まれます。

codex exec-o でファイルへの書き出し、--json で JSONL ストリーム出力、--output-schema でスキーマ指定と、それぞれが独立したオプションになっています。

6.4. セッション管理

claude -p--continue--resume で既存セッションを引き継ぎ、--no-session-persistence で保存を無効化します。

codex exec--ephemeral で保存しない使い捨てモード、codex exec resume で再開という構造です。サブコマンドとして分離しているため、スクリプトで resume の前後を明示的に制御しやすい設計になっています。

すでに Claude Code を使っているなら claude -p で十分なケースがほとんどです。CI 環境でサンドボックスを明示的に設定したい場合や、codex のエコシステムに乗りたい場合に codex exec を選ぶのが自然な判断基準です。