創刊準備号 · 2026年秋English · RSS
AgentKoji

PR一部の記事にはアフィリエイトリンクを含みます。経由して申し込まれると、当サイトに報酬が入ることがあります。評価は変えません。 アフィリエイト開示

claude -pで自動化する

claude -pは成功するとexit 0、失敗すると0以外で終わります。出力形式、権限の渡し方、cronで定時実行する手順が分かります。

要点(TL;DR)

  • claude -p はプロンプトを1回だけ実行して結果を出力し、終了します。確認のダイアログは出ず、パイプの stdin は 10MB までです。
  • 出力形式は text(既定)、json、stream-json で、total_cost_usd は手元の見積もりです。確認が必要な呼び出しは --allowedTools などで許可しない限り拒否されます。
  • --bare を付けないと、プロジェクトの hook や .mcp.json を信頼の確認なしで読み込みます。スクリプトから呼ぶなら --bare が勧められています。

PR:この記事にはアフィリエイトリンク(VPS)を含みます。選んだ基準はリージョンと課金の形だけで、報酬で評価は変えません。

claude -p は、プロンプトを1回だけ実行して結果を出力し、終了するモードです。対話のセッションと違って、確認のダイアログは出ず、人の返事を待ちません。この記事では、基本の形、出力形式、権限の渡し方、続きからの実行、終了コードとエラー処理、cron での定時実行、料金の注意を順に説明します。編集部の検証環境(macOS、Claude Code 2.1.304、2026年10月20日)で、claude --help の確認と、空のディレクトリでの claude -p の実行を1回だけ行いました。

基本の形

プロンプトを引数で渡すか、stdin からパイプします。

claude -p "What does the auth module do?"
cat build-error.txt | claude -p "concisely explain the root cause of this build error" > output.txt

パイプで渡せる stdin は 10MB までです。超えると、エラーを出して0以外の終了コードで終わります。それより大きいものはファイルに書き、プロンプトでパスを指定します。

出力形式は --output-format で選びます。

値中身
text既定。本文だけ
json結果、セッション ID、メタデータを含む JSON
stream-json1行に1つのイベントが並ぶ JSON。最後の行が result

出典:https://code.claude.com/docs/en/headless 、2026-10-20確認

空のディレクトリで、「OK とだけ返して」を --output-format json --no-session-persistence 付きで実行しました。終了コードは 0 で、主なフィールドは次のとおりです(セッション ID と金額は伏せています)。

{
  "type": "result",
  "subtype": "success",
  "is_error": false,
  "result": "OK",
  "num_turns": 1,
  "session_id": "<伏せた>",
  "total_cost_usd": <伏せた>,
  "permission_denials": [],
  ...
}

本文は jq -r '.result' で取り出せます。total_cost_usd は Claude Code が手元で計算した見積もりで、請求額とは一致しないことがあります。

claude -p "Summarize this project" --output-format json | jq -r '.result'

権限を渡す

-p では確認のダイアログが出ません。確認が必要な呼び出しは、何かが許可しない限り拒否されます。v2.1.302 以降は、権限モードを何も指定しないと Manual(default)で始まります。使わせたいツールは --allowedTools で渡します。書式は permissions のルールと同じです。

claude -p "Look at my staged changes and create an appropriate commit" \
  --allowedTools "Bash(git diff *),Bash(git log *),Bash(git status *),Bash(git commit *)"

Bash(git diff *) の * の前の空白は必要です。空白を省くと git diff-index にも当たります。ツールを並べる代わりに --permission-mode で基準を決めることもできます。claude --help に出た値は acceptEdits、auto、bypassPermissions、manual、dontAsk、plan でした。無人の CI のように締めたい実行には、確認が必要なものをすべて拒否する dontAsk が向いています。

--dangerously-skip-permissions は --permission-mode bypassPermissions と同じで、確認を飛ばします。--help には「インターネットにつながっていないサンドボックスでだけ勧める」とあります。コンテナや VM のように壊れても困らない環境以外では使いません。

出典:https://code.claude.com/docs/en/headless 、https://code.claude.com/docs/en/cli-reference 、2026-10-20確認

もう1つ注意があります。--bare を付けないと、-p は対話のセッションと同じように、プロジェクトの .claude/settings.json の hook や .mcp.json のサーバーを読み込みます。信頼していないフォルダーでも、信頼の確認なしで動きます。公式は、スクリプトから呼ぶなら --bare を勧めています。ただし --bare ではサブスクリプションのログインを使わないので、ANTHROPIC_API_KEY が必要です。ルールの書き方はpermissions設定の早見表にまとめています。

続きから実行する

--continue で直前の会話を、--resume <session_id> で指定した会話を続けます。対話のセッションでの再開はClaude Codeの会話を再開するにまとめています。

session_id=$(claude -p "Start a review" --output-format json | jq -r '.session_id')
claude -p "Continue that review" --resume "$session_id"

上限を決めるオプションもあります。--max-turns はエージェントのターン数の上限で、達するとエラーで終わります。--max-budget-usd は、見積もりの支出が指定した額に達したところで止めます。どちらも -p のときだけ使えます。--max-turns は docs に載っていますが、2.1.304 の claude --help には出てきませんでした。--no-session-persistence を付けると会話を保存せず、あとから再開できなくなります。

出典:https://code.claude.com/docs/en/headless 、https://code.claude.com/docs/en/cli-reference 、2026-10-20確認

終了コードとエラー処理

公式によると、claude -p は成功すると exit 0、失敗すると0以外で終わります。不正なフラグは実行前に stderr に出ます。認証が無いなど、実行の途中で起きた失敗は、結果として stdout に出ます。json の結果では、--max-turns に達したときの subtype が error_max_turns になります。

出典:https://code.claude.com/docs/en/headless 、https://code.claude.com/docs/en/agent-sdk/agent-loop 、2026-10-20確認

シェルでは、終了コードと is_error と空の結果の3つを見ます。ダミーの todo アプリで前日のコミットを要約するスクリプトです。

#!/usr/bin/env bash
# nightly-summary.sh: summarize yesterday's commits of the todo app
set -euo pipefail
cd "$HOME/todo-app"
out=$("${CLAUDE_BIN:-claude}" -p "Summarize the commits from the last 24 hours in 5 bullet points." \
  --output-format json --max-turns 5 \
  --allowedTools "Bash(git log *)" --permission-mode dontAsk)
if [ "$(jq -r '.is_error' <<<"$out")" != "false" ]; then
  echo "claude reported an error: $(jq -r '.subtype' <<<"$out")" >&2
  exit 1
fi
result=$(jq -r '.result // empty' <<<"$out")
if [ -z "$result" ]; then
  echo "empty result" >&2
  exit 1
fi
printf '%s\n' "$result" > "$HOME/todo-app/reports/$(date +%F).md"

CLAUDE_BIN に、決まった JSON を返すだけのダミーのスクリプトを渡して、分岐を確かめました(本物の claude は呼んでいません)。

ダミーが返したもの出力exit
is_error: false、result ありレポートを書く0
is_error: false、result が空empty result1
is_error: true、subtype: error_max_turnsclaude reported an error: error_max_turns1
stderr にエラーを出して exit 1Error: unknown option1

cron で VPS から定時実行する

常駐させるなら、手元のPCではなく VPS に置きます。

VPSの候補:東京リージョンで時間課金から試せる ConoHa VPS か、メモリ量で選べる XServer VPS が候補です。料金とプランは変わるので、契約前に公式ページで確認してください。

crontab の行です。以下は Linux の VPS を想定した例で、編集部の検証環境(macOS)には flock が無いため、実行していません(未実行)。

# crontab -e
PATH=/home/dev/.local/bin:/usr/local/bin:/usr/bin:/bin
0 6 * * * /usr/bin/flock -n /tmp/nightly-summary.lock /home/dev/bin/nightly-summary.sh >> /home/dev/logs/nightly-summary.log 2>&1

cron で環境変数が届かない問題はClaude Codeで環境変数が効かないで扱っています。無人の実行に鍵と信頼できない入力を一緒に渡さない話はAIエージェントの権限設計にあります。

料金の注意

Anthropic のヘルプによると、Agent SDK と claude -p は、2026年10月20日時点で引き続きサブスクリプションの利用枠を使えます。以前に告知されていた Agent SDK の利用に関する変更は、2026年6月15日に一時停止されました。10月7日の更新で、Max と Team のプランに毎月の API クレジットが付き、Agent SDK や claude -p にも使えるようになりました。料金は変わることがあるので、契約前に公式ページで確かめてください。

出典:https://support.claude.com/en/articles/15036540-use-the-claude-agent-sdk-with-your-claude-plan 、2026-10-20確認

CI で回すときの費用はClaude Code×CIの費用と罠を読んでください。プランごとの料金はClaude Codeの料金、実際いくら?にまとめています。

まとめ

一部の記事にはアフィリエイトリンクを含みます。経由して申し込まれると、当サイトに報酬が入ることがあります。評価は変えません。 アフィリエイト開示