claude -p(クロード・ピー)

起動オプション
claude -p
クロード・ピー
Claude Code を「対話画面を出さず、1問だけ答えて即終了」モードで起動する起動オプション。コマンドの後ろに質問文を `"..."` で書き足して使う。`--print` の短縮形で、`claude -p` と `claude --print` は同じ動作

ターミナルで「1問だけ Claude に答えてもらって、結果をそのままシェルに流したい」人向け

シェルスクリプト・cron(決まった時刻に自動実行する仕組み)・GitHub Actions など、人間が画面を見ない場所から Claude を呼んで、出てきた答えを別のコマンドにそのまま流したいときに叩く。手元のログを `grep` で絞ってから `claude -p` にパイプで流して要約させる、PR の差分を要約させて自動コメントする、みたいな自動化の核として使う

claude -p は、Claude Code をターミナルで起動するときに「対話画面を出さず、1問だけ答えて終了する」モードに切り替える起動オプションです。普段の claude はチャット画面が立ち上がって人間と会話する作りですが、-p をつけると裏方モードに変わって、答えだけを画面に吐いて即終了します。

シェルスクリプトや cron、CI から呼び出して、出てきた文字列をそのまま別のコマンドに流したい人向け。私もログ整形やコミットメッセージ自動生成で毎日叩いてます。

噛み砕くと

-p は「Claude を1回限りの自動販売機モードにするスイッチ」です。普段の claude は店員さんとの対面注文(こちらが質問→答えが返ってくる→また質問できる)。-p は券売機にコイン入れて1品出すイメージで、ボタンを押した分だけ商品が出てきて、それで終わり。会話を続けたい場合は次のコインを入れる(コマンドをもう一度叩く)必要があります。

大事なのは「Claude そのものは同じ AI」だということ。性能やモデルが落ちるわけではなく、画面のラッパーが対話用か単発用かが違うだけです。

大事な前提:Claude Code 本体のインストールと認証が済んでいる必要がある

claude -p は「すでに claude コマンドが動く状態」が出発点です。インストールしただけ、ログインしてないだけだと、-p で叩いても結局 Claude.ai か Anthropic Console の認証フローに飛ばされて止まります。

確認方法は簡単で、ターミナルで次の1行を打ちます。

$ claude auth status

「Logged in」的なメッセージが返ってくれば -p がそのまま使えます。返ってこない場合は claude auth login で先に認証を済ませてください。CI で動かす場合は claude setup-token で長期トークンを発行して環境変数に入れる運用が公式推奨です。

「ログから怪しい行だけ Claude に要約してもらう」を例に、実際の手順を見る

具体例として「アクセスログが access.log に溜まっていて、その中のエラーらしき行(500番台のステータス)だけ抜き出して、Claude に1発で要約してほしい」という場面で叩く流れを見ていきます。

ステップ1: 元のログを覗く

まずどんなファイルか確認します。

$ wc -l access.log
12453 access.log
$ head -2 access.log
192.0.2.10 - - [01/May/2026:10:14:22 +0900] "GET /index HTTP/1.1" 200 1842
192.0.2.11 - - [01/May/2026:10:14:23 +0900] "GET /api/items HTTP/1.1" 500 89

1万2千行あって、目で読むのはしんどい。500番台のエラーだけ Claude に投げたい。

ステップ2: パイプでつないで -p に流し込む

$ grep ' 5[0-9][0-9] ' access.log | claude -p "このアクセスログ全体を見て、エラーの傾向を3行で日本語要約して"

左側で500番台の行だけ抜き出し、その結果を |(パイプ)で claude -p に渡しています。Claude 側は「要約して」というプロンプトと、流れ込んできたログ本文の両方を受け取って答えます。

ステップ3: 答えがそのままターミナルに返ってくる

500番台エラーは合計147件、全体の1.2%。
うち約8割が /api/items エンドポイントで、10:14〜10:16の3分間に集中している。
リクエスト元IPは192.0.2.0/24レンジに偏っており、特定クライアントの負荷スパイクが疑われる。

これだけ。チャット画面は開かず、答えが3行ぶん吐かれてプロンプトは $ に戻ります。

ステップ4: 出てきた文字列をさらに別のコマンドに流す

-p の出力は普通のテキストとして扱えるので、ファイルに保存したり、Slack に投げたりできます。

$ grep ' 5[0-9][0-9] ' access.log | claude -p "エラーの傾向を3行で" > report.txt

ここで初心者がやりがちな勘違いがあって、claude -p は前回の会話を覚えていません。デフォルトでは「1問1答」で完結します。続けて「じゃあその IP レンジ詳しく調べて」と聞きたいなら、もう一度 claude -p を叩くか、claude -c -p(直前のセッションを引き継いで1問1答)を使います。

ステップ5: 構造化された JSON で受け取る

シェルスクリプトから扱いやすいように JSON で返してほしい場合は --output-format json を足します。

$ grep ' 5[0-9][0-9] ' access.log | claude -p "傾向を要約" --output-format json

返り値は使用トークン数・モデル名・本文を含んだ JSON 形式になり、jq などでフィールドを取り出せます。CI から呼んで「答えだけ Slack に流す」「使用ドルを別ファイルに記録する」みたいな運用がしやすくなります。

ステップ6: 履歴を残したくない場合は明示的にオフ

v2.1.x 以降の Claude Code は -p でもデフォルトで会話履歴をローカルディスクに保存します(claude -c で続きから再開できるように)。CI 環境のように残骸を残したくない場合は --no-session-persistence を足します。

$ cat access.log | claude -p "要約" --no-session-persistence

つまり claude -p は何をしてくれるのか

  • やってくれる: チャット画面を開かず、1問の答えだけターミナルに吐いて終了する。パイプでログやコードを流し込める。スクリプト・cron・CI から呼べる
  • やってくれる: --output-format json で構造化された返り値が受け取れて、後続コマンドに繋ぎやすい
  • やってくれない: 前回の会話を勝手に覚えて続きから話す(直近会話を引き継ぐには -c を併用)
  • やってくれない: 認証されてない状態でいきなり動く(事前に claude auth login または setup-token が必要)
  • 意味が薄い場面: 何往復も会話してコードを書き続けたいとき。それは普通の claude(対話モード)の方が向いている

使いどころ3シナリオ(具体題材で再現)

シナリオ1: 毎朝のログ要約を自動化したい

運営している料理ブログ(WordPress)のアクセスログから、500番台のエラーだけ毎朝7時に Claude に要約させて Slack に流す。cron に1行登録するだけで完結します。

# crontab -e で1行追加
0 7 * * * grep ' 5[0-9][0-9] ' /var/log/nginx/access.log | claude -p "エラーの傾向を3行で" --no-session-persistence | curl -X POST -d @- $SLACK_WEBHOOK

対話モードだと cron に乗らない(人間が画面を見て返事しないと進まない)ので、ここは -p 一択です。私もこのパターンで毎朝のログ確認を半自動化してます。

シナリオ2: GitHub Actions で PR 内容を自動レビュー

OSS をフォークして開発しているとき、PR を出したら GitHub Actions の中で claude -p に diff を流して「変更の意図を箇条書き要約」を吐かせ、PR コメントに自動投稿する。CI なので画面は出せず、認証は claude setup-token で発行した長期トークンを GitHub Secrets に入れて使います。

- name: Auto-summarize PR
  run: |
    git diff origin/main..HEAD | claude -p "この差分の変更意図を3点に要約" > summary.txt
    gh pr comment ${{ github.event.pull_request.number }} --body-file summary.txt

シナリオ3: シェルから1問だけ聞いて作業に戻りたい

家計簿アプリを作っていて、SQL の構文をちょっと確認したい。チャット画面を開くほどでもない、でもブラウザに切り替えるのも面倒。そういうときに1行で完結します。

$ claude -p "PostgreSQL で月別合計を出すクエリの基本形を1つだけ教えて"

答えが返ってきたらそのままシェルに戻って作業継続。私は普段の man コマンド代わりにもこれを使っていて、地味に手数が減ります。

初心者が踏みやすい落とし穴

  • 履歴が残らないと思い込む。v2.1.x 以降の Claude Code は -p でもデフォルトで履歴をディスクに保存します。CI など残骸を残したくない環境では --no-session-persistence を必ず明示する
  • 続けて質問できないclaude -p 単独は1問1答で終わり。直前の会話を踏まえて聞きたいなら claude -c -p "次の質問" の形にする(-c が直前セッションの引き継ぎ)
  • パイプ入力とプロンプト指定の役割分担を間違えるcat log | claude -p "要約して" だと、log の中身が「会話の冒頭資料」、"要約して" が「指示文」になる。両方なしで cat log | claude -p だけ叩くと指示が空っぽで Claude が何をすべきか分からない返答になりがち
  • 巨大ファイルを丸ごとパイプで流す。Claude Code には1回に渡せる文章量の上限(コンテキスト上限)があるので、10万行のログをそのまま cat で流すと途中で切られる。grephead -n 1000 で事前に絞るのが基本
  • 認証していない状態で CI に乗せる。ローカルでは claude auth login 済みなので動くが、CI のサーバーはログインしていないので落ちる。claude setup-token で長期トークンを発行し、Secrets 経由で渡す
  • JSON 出力を生テキストと混同する--output-format json をつけると返り値全体が JSON でラップされて、答え本文は .result フィールドの中に入る。そのままファイルに保存すると見栄えが悪いので、jq -r .result で本文だけ抜き出す
  • 対話モードの方がいい場面まで -p で粘る。コードを何往復も書き直してもらうとか、計画立てて実装させるみたいな複数ターンの作業は普通の claude(対話モード)の方が圧倒的に楽。-p は「1問で終わる」「自動化に組み込みたい」場面に絞る

書き方

claude -p "質問や指示の文"
cat ファイル | claude -p "指示の文"
claude -p "質問" --output-format json --no-session-persistence

やってみるとこうなる

入力

$ grep ' 5[0-9][0-9] ' access.log | claude -p "このアクセスログのエラー傾向を3行で日本語要約して"

出力例

500番台エラーは合計147件、全体の1.2%。
うち約8割が /api/items エンドポイントで、10:14〜10:16の3分間に集中している。
リクエスト元IPは192.0.2.0/24レンジに偏っており、特定クライアントの負荷スパイクが疑われる。

(チャット画面は開かず、答えが標準出力に吐かれてプロンプトはシェルに戻る)

このページに出てきた言葉

対話画面
普通に <code>claude</code> を叩くと出てくる、人間と AI が交互に発言するチャット画面のこと
パイプ(<code>|</code>)
左のコマンドの出力を、右のコマンドの入力にそのまま流す仕組み。<code>grep</code> の結果を <code>claude -p</code> に渡せる
プロンプト
AI に投げる質問・指示の文。<code>-p</code> の後ろの <code>"..."</code> 部分
標準出力
コマンドが結果を吐き出す先。普通はターミナル画面、<code>></code> でファイルに保存、<code>|</code> で次のコマンドに渡せる
セッション
1回の会話のかたまり。Claude Code は1セッションをファイルとして保存して、後から続きから再開できる
cron
Linux や Mac に標準で入っている「決まった時刻にコマンドを自動実行する仕組み」。「毎朝7時にこれを叩いて」のような予約を組める
CI
コードを GitHub に push したときに自動でテスト・チェックを走らせる仕組み(GitHub Actions などの総称)
認証
「私は Claude を使う権利のある契約者です」とサーバーに証明する手続き
トークン
パスワードの代わりにサーバーに見せる長い文字列。CI のように人間がログイン画面を操作できない場所で使う
JSON
プログラムが扱いやすい形式で書かれたデータ。<code>{"key": "value"}</code> のような形
jq
ターミナルで JSON の中から特定の項目を取り出すための定番コマンドラインツール

関連項目

公式ドキュメント

https://code.claude.com/docs/en/cli-reference

-

← 戻る