コンテンツにスキップ

非対話実行を仕事にする

tier 2(効いてくる)確認 1 か月前(2026年8月23日)

どこまで来たら使えたと言えるか

面: ターミナル限定 — デスクトップアプリには当てはまりません

段達成したと言える状態
1. 触るclaude -p "..." を実行し、パイプで入力を渡した場合の出力と終了コードを確認した
2. 入れる繰り返す作業を -p のコマンドにして、--allowedTools か permission mode で止まらずに完走する形にした
3. 効かせる--output-format json と --json-schema で結果を機械可読にし、失敗が stdout に混ざる経路を踏まえた検査を入れている

何のためのものか

claude -p(--print)で非対話実行する。スクリプトや CI/CD から呼ぶための入口で、対話でやっていたことを繰り返せる形に変えるのがここの本題。

触る

  1. claude -p "Summarize this project" を実行する
  2. cat build-error.txt | claude -p 'concisely explain the root cause of this build error' のようにパイプで渡す
  3. 終了コードを見る。成功時は 0、失敗時は 0 以外

パイプした stdin の上限は 10MB。 超えるとエラーを出して 0 以外で終了する。大きい入力はファイルに書き、プロンプトでそのパスを参照する。

入れる

止まらずに完走する形にする。ここを詰めないと、CI で黙って待ち続ける。

  • --allowedTools で必要なツールだけ許す。 構文は permission rule syntax。Bash(git diff *) の*** の前のスペースが重要**で、無いと git diff-index にも一致する
  • 基準を決めるなら permission mode を渡す。 --permission-mode acceptEdits はファイル書き込みと一般的なファイルシステムコマンドを自動承認するが、それ以外のシェルコマンドとネットワークリクエストには --allowedTools か permissions.allow が要る(無いと実行しようとした時点で run が中断する)
  • 速く軽くするなら --bare。 hooks / skills / plugins / MCP サーバー / auto memory / CLAUDE.md の自動探索を飛ばす。OAuth 認証情報もキーチェーンも読まないので、Anthropic API では ANTHROPIC_API_KEY が要る
  • 挙動だけ足したいなら --append-system-prompt

効かせる

  • 結果を機械可読にする。 --output-format json で結果・セッション ID・メタデータが構造化 JSON になる。スキーマを固定したいなら --json-schema を併用し、structured_output フィールドを読む
  • 進捗が要るなら --output-format stream-json に --verbose と --include-partial-messages。 最終行が result メッセージ
  • subagent の中身を見たいなら --forward-subagent-text。 既定では subagent の tool_use と tool_result だけが流れる
  • 続きをやるなら --continue / --resume <session-id>。 別ディレクトリから実行してよい

落とし穴

  • 失敗が stdout に出る経路がある。 不正なフラグは実行開始前に stderr へ出るが、実行中の失敗(認証情報が無いなど)は結果として stdout に出力される。終了コードだけを見る検査だと、エラー文を成果物として保存してしまう
  • format キーワードは強制されない。 --json-schema に "format": "email" を書いても注釈として扱われ、検証はされない
  • -p と併用できないフラグがある。 --bg は拒否される
  • バックグラウンド Bash タスクは終了の約 5 秒後に kill される。 一方バックグラウンドの subagent とワークフローは待たれる(既定で最大 10 分、CLAUDE_CODE_PRINT_BG_WAIT_CEILING_MS で変更)
  • ターミナル UI 専用のコマンドは使えない(/login など)。逆に /model sonnet のように値を引数で取る形は動き、skill も /skill-name をプロンプトに含めれば展開される

根拠と前後

このページが書ける範囲は、根拠にした facts に書かれていることだけです。 仕様そのものはそちらを読んでください。