Claude Code を非対話モード(claude -p)で使う:CI やスクリプトから呼び出す方法

Claude Code 公開:

Claude Code の -p オプションによる非対話モードの使い方を解説します。標準入力の渡し方、--output-format json での結果取得、ツールの許可設定、CI で安全に動かすための権限とコストの制御を紹介します。

検証日 2026年9月7日 仕様変更が早い分野です。最新の公式ドキュメントも併せてご確認ください。
目次
  1. 基本形
  2. 出力を JSON で受け取る
  3. ツールの実行を許可する
  4. 暴走とコストを抑える
  5. GitHub Actions からの呼び出し例
  6. 使いどころの例
  7. まとめ

Claude Code は対話的に使うのが基本ですが、-p(print)オプションを付けると、1 つの指示を渡して結果を標準出力に返す非対話モードになります。シェルスクリプト、cron、CI パイプラインから呼び出せるため、「PR の差分を要約する」「テスト失敗の原因を分析する」「ドキュメントを更新する」といった処理を自動化できます。

この記事では、基本的な呼び出し方から、出力の JSON 化、ツール許可、CI で暴走させないための制御までを扱います。

KEY POINT

この記事で分かること

  • claude -p の基本と、標準入力・ファイルの渡し方
  • --output-format json による結果のプログラム処理
  • CI で安全に動かすための権限・ターン数・コストの制御

基本形

claude -p "このリポジトリのディレクトリ構成を 5 行で説明して"

応答がそのまま標準出力に書かれ、終了します。標準入力からデータを渡すこともできます。

git diff main...HEAD | claude -p "この差分の変更内容を日本語で要約して。破壊的変更があれば先頭に書いて"
cat error.log | claude -p "このログからエラーの原因を推定し、確認すべきファイルを挙げて"

対話モードと同様に CLAUDE.md や settings.json は読み込まれます。ただし、確認が必要な操作は自動では実行されません。

出力を JSON で受け取る

claude -p "package.json の依存関係のうち、メジャーバージョンが古いものを列挙して" --output-format json

返される JSON には、応答本文のほか、セッション ID、所要時間、コスト(USD)、使用トークン数が含まれます。jq で取り出せます。

result=$(claude -p "$PROMPT" --output-format json)
echo "$result" | jq -r '.result'          # 応答本文
echo "$result" | jq -r '.total_cost_usd'  # コスト
echo "$result" | jq -r '.session_id'      # 続きを --resume で再開する際に使う

--output-format stream-json にすると、途中経過が行区切りの JSON で流れてきます。長い処理の進捗を表示したい場合に使います。

用語解説

セッションの継続: -p でも --resume <session_id> を付ければ、前回の続きから処理できます。「1 回目で調査、2 回目で修正」のように段階を分けたスクリプトが書けます。

ツールの実行を許可する

非対話モードでは、確認が必要なツールは実行されません。ファイル編集やコマンド実行をさせたい場合は、--allowedTools で許可を明示します。

claude -p "lint エラーを修正して" \
  --allowedTools "Edit" "Bash(npm run lint)" "Bash(npm run lint:fix)"

書式は settings.json の permissions と同じです(permissions の書き方)。逆に --disallowedTools で禁止もできます。

--dangerously-skip-permissions は隔離環境だけで使う

すべての確認を省略する --dangerously-skip-permissions は、ホスト環境で使うと任意のコマンドが実行されます。使うのは、使い捨てのコンテナや CI ランナーのように、壊れても影響がない環境に限定してください。

暴走とコストを抑える

オプション効果
--max-turns Nエージェントのループ回数の上限。無限に試行し続けるのを防ぐ
--model使用モデルの指定。定型処理は Sonnet 系で十分なことが多い
--allowedTools必要最小限のツールだけ許可する
--output-format jsontotal_cost_usd を記録して、日次で集計する
claude -p "$PROMPT" --max-turns 10 --model claude-sonnet-5 --output-format json

GitHub Actions からの呼び出し例

PR に対して差分の要約をコメントする最小例です。認証は ANTHROPIC_API_KEY を Secrets に入れて渡します。

name: PR summary
on:
  pull_request:
    types: [opened, synchronize]

jobs:
  summary:
    runs-on: ubuntu-latest
    permissions:
      pull-requests: write
      contents: read
    steps:
      - uses: actions/checkout@v4
        with:
          fetch-depth: 0
      - run: curl -fsSL https://claude.ai/install.sh | bash
      - name: Summarize
        env:
          ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
        run: |
          git diff origin/${{ github.base_ref }}...HEAD \
            | ~/.local/bin/claude -p "この差分を日本語で要約し、レビュー観点を 3 つ挙げて" \
              --max-turns 3 --output-format json \
            | jq -r '.result' > summary.md
      - uses: actions/github-script@v7
        with:
          script: |
            const fs = require('fs');
            await github.rest.issues.createComment({
              ...context.repo,
              issue_number: context.issue.number,
              body: fs.readFileSync('summary.md', 'utf8'),
            });

インストール先のパスは環境によって異なります。claude が見つからない場合は、インストーラーの出力に表示されるパスを確認してください。PR へのコメントや Issue 対応まで含めた本格的な連携は、公式の GitHub Action を使う方が簡単です(GitHub Actions で Claude Code を動かす)。

使いどころの例

  • cron で毎朝: 依存関係の脆弱性レポートを要約して Slack に投稿する
  • pre-push フック: 差分に対する簡易レビューを表示する(--max-turns 2 で軽量に)
  • バッチ処理: 複数のリポジトリに対して同じ質問を投げ、結果を CSV にまとめる
  • ドキュメント生成: 変更された API に合わせて docs/ を更新し、PR を作る

まとめ

  • claude -p "指示" で非対話実行。標準入力でデータを渡せる
  • --output-format json で本文・コスト・セッション ID を取得し、jq で処理する
  • 編集や実行は --allowedTools で明示的に許可し、--max-turns で上限を設ける
  • --dangerously-skip-permissions は使い捨ての隔離環境に限定する

よくある質問

非対話モードでは確認ダイアログはどうなりますか?
確認を求める操作は実行されずに終了します。実行させたい操作は --allowedTools で明示的に許可するか、隔離環境で --dangerously-skip-permissions を使います。
結果をプログラムで処理したい場合は?
--output-format json を付けると、応答本文、セッション ID、コスト、使用トークンを含む JSON が返ります。
CI での認証はどうしますか?
環境変数 ANTHROPIC_API_KEY に Anthropic Console の API キーを設定します。従量課金になるため、--max-turns で上限を設けてください。

参考にした一次情報

この記事は公式ドキュメントを基に AI が下書きを作成し、運営者が内容を確認して公開しています。誤りを見つけた場合はお問い合わせからお知らせください。