本ページはプロモーションが含まれています

AI

Claude Code CLIのオプション|-pで自動化する方法

CATEGORY
REV.
DRAWN BY
TOM
SHEETS
8枚
claude -p(CLIオプションで自動化)

トム

SESで約8年、環境を変えられないもどかしさの中にいました。32歳で自社開発企業に転職し、今はClaude Codeと自動化で、仕事も時間も組み直している途中です。
・Javaバックエンドエンジニア(Java歴12年以上)
・資格:基本情報技術者/応用情報技術者/Java Silver/Python3エンジニア認定基礎
詳細なプロフィール

𝕏

公式ドキュメントに載っている claude -p "..." --output-format json | jq -r '.result' を、そのまま叩いてみました。

返ってきたのは、結果ではなく jq のエラーでした。

手元の Claude Code 2.1.281 では、JSON が単体のオブジェクトではなくイベントの配列で返ってきたからです。

私は毎週日曜の朝5時に、launchd から claude -p でキーワード提案のスキルを回しています。

この記事は、その運用で使ったコマンドとオプション、実測した出力の形をまとめたものです。

CLIの基本から -p の自動化まで、1本で追えます。

この記事でわかること

  • claude・-c・-r・update など、日常で使うコマンドの早見表
  • --model・--allowedTools など、よく使うオプションの役割
  • -p の出力形式と、JSONが配列で返る実測結果
  • launchd で週次実行している実例と、ハマった点

動作確認した版は Claude Code 2.1.281(2026年10月5日)です。

オプションは版ごとに増えるので、各所に必要なバージョンを書いています。

Claude Code CLIとは?ターミナルで動く本体

Claude Code CLIとは、ターミナルで claude と打って起動する、Claude Code の本体です。

VS Code拡張機能やデスクトップアプリでも、同じ Claude Code が使えます。

ただし、スクリプトやスケジュール実行に組み込みやすいのは、CLIの claude -p です。

この節では、CLIが他の環境とどう違うかを整理します。

CLI・VS Code・Desktopの違い

見た目の違いは、入力する場所だけではありません。

CLIは「コマンドとして呼べる」点が、他の環境と決定的に違います。

環境操作する場所スクリプトへの組み込み
CLIターミナル◎ 向いている(claude -p)
VS Code拡張機能エディタのパネル△ 人が操作する前提
デスクトップアプリアプリのウィンドウ△ 人が操作する前提

設定ファイルやCLAUDE.mdは、環境をまたいで共通で使われます。

CLAUDE.mdの書き方はこちらの記事、料金の考え方は料金確認の記事にまとめています。

CLIとClaude本体の違いは3製品の使い分けの記事が詳しいです。

CLIでしかできないこと

私がCLIを選んでいる理由は、1つに絞れます。

cron や launchd のような、人のいない時間帯に動かす仕組みと繋げられるからです。

たとえば週1回のキーワード提案は、エディタのパネルを開かなくても、ジョブとして動いています。

人が起きる前に終わらせたい仕事ほど、CLIの出番です。

対話モードと非対話モード(-p)の違い
INTERACTIVE / 対話モードclaude人が画面を見ながら、指示と承認を繰り返す。試行錯誤や調査向き。
PRINT / 非対話モードclaude -p1回の指示で最後まで走り、結果を標準出力に返して終了する。自動化向き。

起動と基本コマンド|claude・-c・-r・update

日常で使うコマンドは、実は10個もありません。

公式のCLIリファレンスには claude agents や claude self-hosted-runner など多数のサブコマンドが載っています。

ただ、個人で毎日使うなら、次の表の範囲で足ります。

コマンド動き使う場面
claude対話セッションを開始普段の作業
claude "質問"最初の指示つきで開始起動と同時に頼みたいとき
claude -p "質問"答えを出力して終了スクリプト・自動化
cat log.txt \| claude -p "要約して"標準入力を渡して処理ログやdiffの解析
claude -cこのディレクトリの直近の会話を続ける昨日の続き
claude -r "名前"IDか名前を指定して再開複数の会話を使い分ける
claude update最新版へ更新週1回の保守

対話モードと-p(非対話)の違い

-p(--print)をつけると、Claude Codeは対話せずに答えを出力して終了します。

成功時の終了コードは0、失敗時は0以外です。

シェルスクリプトの if や && で、そのまま分岐に使えます。

無効なフラグを渡した場合は、実行の前にエラーが stderr に出ます。

一方、認証切れのような実行中の失敗は、stdout に結果として出力されます。

この違いが、あとで書く「ログの設計」に効いてきます。

会話を続ける-cと、選んで戻す-r

-c は、いま居るディレクトリで最後に使った会話を続けます。

-r は、セッションIDか名前を指定して戻ります。

名前は claude -n "my-feature" のように、起動時に付けておけます。

ひとつ注意があります。

対話で打った claude --continue は、claude -p で作られたセッションを飛ばします。

-p のセッションまで含めたいときは、claude -p --continue と書きます。

セッションの保存や分岐の詳しい話は、セッション再開ガイドに書きました。

claude updateとdoctorで保守する

claude update で最新版に更新できます。

特定の版が欲しいときは claude install 2.1.118 のように版を指定するか、stable や latest を渡します。

動作がおかしいときは、claude doctor が先です。

セッションを始めずに、インストールの状態と設定ファイルのエラーを読み取り専用で診断してくれます。

再インストールを考える前に、1回打つ価値があります。

よく使うオプション早見表

オプションは公式の一覧表に何十個も載っています。

全部を覚える必要はなく、私が実際に使うのは次の3グループです。

  • 実行を絞る(モデル・ターン数・予算)
  • 権限を決める(何を許可し、何を止めるか)
  • 指示を足す(システムプロンプトの追加)

実行を絞る:--model・--max-turns・--max-budget-usd

--model は、sonnet・opus・haiku といった別名か、モデルの完全な名前で指定します。

軽い整形や要約なら haiku、設計の相談なら opus、と使い分けると無駄が減ります。

--max-turns はエージェントのターン数に上限を付けます。

上限に達するとエラーで終了します。

--max-budget-usd は、API呼び出しに使う金額の上限です。

どちらも -p のときだけ使えます。

メモ

ターン数の目安:道具を使わない短い質問は、実測で num_turns が1でした。ファイルを読んで直す作業は、道具を使うたびに増えます。

無人で回すジョブは、暴走した時の被害を先に決めておくのが基本です。

この2つは、そのための保険になります。

権限を決める:--allowedTools・--permission-mode

--allowedTools は、確認なしで実行してよいツールを指定します。

パターンも書けます。

claude -p "ステージ済みの変更を見てコミットして" \
  --allowedTools "Bash(git diff *),Bash(git log *),Bash(git status *),Bash(git commit *)"

Bash(git diff *) の * の前の半角スペースが肝です。

スペースを抜いた Bash(git diff*) だと、git diff-index まで通ってしまいます。

--permission-mode は、セッション全体の許可の基準を決めます。

-p で使う主な値は次の3つです。

モード動き向く場面
acceptEditsファイル編集と mkdir・mv などを自動承認リント修正の適用
dontAsk確認が要る操作はすべて拒否厳しく絞ったCI
auto分類器が各操作を審査内容が読めない作業

--dangerously-skip-permissions は、権限の確認をすべて飛ばします。

便利ですが、守りが外れます。

ただし、--dangerously-skip-permissions のもとでは --allowedTools などの許可ルールは効きません(公式: Allow rules have no effect in bypassPermissions)。使える道具を実際に絞るなら、--tools で指定するか、--disallowedTools で止めたいものを拒否します。

指示を足す:--append-system-prompt

Claude Code の標準の指示を残したまま、追加の指示だけ足せるのが --append-system-prompt です。

ファイルから読む --append-system-prompt-file もあります。

gh pr diff 123 | claude -p \
  --append-system-prompt "あなたはセキュリティ担当です。脆弱性だけを指摘して。" \
  --output-format json

--system-prompt は標準の指示ごと置き換えます。

ツールの使い方や安全面の指示まで消えるので、コード作業を任せるなら追加側が無難です。

-pで自動化する:出力形式とパイプ

-p が本領を発揮するのは、出力を別のプログラムが読むときです。

人が読むだけなら、対話モードで足りてしまいます。

ここで冒頭の話に戻ります。

公式の例どおりに jq を書いたら、動きませんでした。

出力の形を確かめるところから、順に見ていきます。

text・json・stream-jsonの使い分け

--output-format は3種類あります。

形式中身向く場面
text(既定)答えだけのプレーンテキスト人が読む・ファイルに保存
json結果とメタデータ終了後に結果とコストを取る
stream-json1行1イベントの改行区切りJSON進捗をリアルタイムで追う

stream-json を -p で使うときは、--verbose も一緒に渡します。

トークン単位で受けたいなら --include-partial-messages を足します。

スキーマに沿った出力が欲しいときは、--json-schema を使います。

検証済みのJSONが structured_output というフィールドに入ります。

jsonの中身を実測(配列で返る点に注意)

2.1.281 で、次のコマンドを実行しました。

haiku に1ターンだけ、短いコードのバグを指摘させています。

echo "def add(a,b): return a-b" | claude -p "このコードのバグを1文で指摘して" \
  --model haiku --output-format json --max-turns 1 --no-session-persistence

返ってきたのは、単体のオブジェクトではなく、8個のイベントが並んだ配列でした。

system(init と thinking_tokens)、assistant、rate_limit_event、そして最後に result が入っています。

json出力から result を取り出す書き方
BEFORE / 公式の例✕ jq -r '.result'動かなかった。Cannot index array with string "result"
→
AFTER / 配列に合わせる○ jq -r '.[-1].result'動いた。最後の要素の result を取り出せた
NOTE返ってきたのは単体のオブジェクトではなく、イベントが並んだ配列。オブジェクト前提の書き方はエラーになる

result の要素には、答えの本文のほかに、次の値が入っていました。

  • total_cost_usd:0.0187083(このやり取り1回分の推定コスト)
  • num_turns:1
  • is_error:false
  • session_id:続きの会話に使えるID

コストは、MCPやスキルを多数入れた私の環境での値です。

短い質問1回でも、約0.019ドルかかりました。

金額は公式も「推定値」としているので、請求の目安に留めてください。

JSON出力の形は版によって変わりえます。スクリプトに組み込む前に、使っている版で一度 jq 'type' を実行し、オブジェクトか配列かを確認してください。

パイプで渡す・--bareで軽くする

標準入力を読めるので、他のコマンドの出力をそのまま渡せます。

cat build-error.txt | claude -p "原因を3行で説明して" > output.txt

パイプで渡せるサイズは10MBまでです。

超えるとエラー終了するので、大きなデータはファイルに書いてパスで指示します。

--bare を付けると、hooks・スキル・プラグイン・MCP・CLAUDE.md の自動検出をまとめて飛ばして、軽く起動します。

どのマシンでも同じ結果が欲しいCIには向いています。

公式は、将来 -p の既定になるとも書いています。

ただし、--bare ではサブスクリプションのログイン情報(OAuth)を読みません。

認証は ANTHROPIC_API_KEY か apiKeyHelper に限られます。

私のジョブはスキルとサブスクリプションに頼っているので、--bare は使っていません。

逆に言うと、--bare なしの -p は、プロジェクトの .claude/settings.json のフックを動かし、.mcp.json のサーバーにも繋ぎます。

信頼ダイアログは出ません。

人の目がない場所で他人のリポジトリを動かすときは、この点を覚えておいてください。

launchdで週次実行している実例

ここからは、私の環境で実際に動いているジョブの話です。

毎週日曜の5時に、キーワード提案のスキルを claude -p で起動しています。

スキルは本来、人が呼び出すものです。

それを人のいない時間に回すために、-p を使っています。

launchd から claude -p でスキルを週次実行する流れ
1
LAUNCHD日曜 5:00 に起動
2
CLAUDE -P/keyword-suggest を実行
スキルの処理スキルが調査(ラッコ・GSC・WebSearch)→ keyword_suggestions.md を更新
標準出力完了報告を stdout へ→ StandardOutPath のログに残る

上の図が全体の流れです。

-p のプロンプトに /keyword-suggest と書くだけで、スキルが展開されて走ります。

公式も、-p では「ユーザーが呼び出すスキルは /スキル名 を含めれば実行前に展開される」と説明しています。

plistに書いた引数と許可ツール

plist の ProgramArguments は、おおむね次の形です(パスは短縮しています)。

<key>ProgramArguments</key>
<array>
    <string>~/.local/bin/claude</string>
    <string>-p</string>
    <string>/keyword-suggest を引数なしで実行し、完了したら結果を簡潔に報告してください。</string>
    <string>--dangerously-skip-permissions</string>
    <string>--allowedTools</string>
    <string>Read Glob Grep Bash Edit Write WebSearch</string>
</array>

無人実行では、権限の確認に答えられる人がいません。

そこで --dangerously-skip-permissions を付けています。--allowedTools にも7つの道具を並べていますが、前述のとおりこの組み合わせでは許可ルールは効かないので、道具を実際に絞る役目は果たしていません。絞りたいなら --tools を使います。

ファイルの読み書きと、調査に要るBash・WebSearchだけです。

注意
権限の確認を飛ばす設定は、守りを外す設定です。専用のリポジトリで、--tools や --disallowedTools で道具を絞った上で使ってください。

stderrが空で最終実行日が分からなくなった話

運用してすぐ、ジョブの監視ダッシュボードが「長期間未実行」と警告を出しました。

実際にはジョブは毎週動いています。

原因は、claude -p が成功しても stderr に何も書かない点でした。

私の監視は、標準エラーのログファイルの更新時刻で最終実行日を判定していました。

成功が続くほど、ファイルの更新時刻が古いまま止まります。

直し方は単純でした。

plist の StandardOutPath を設定し、完了報告のテキストをログに書かせます。

実行のたびに更新時刻が進むので、誤検知が消えました。

stdout のログも残す:-p は成功時に stderr が空です。実行履歴を更新時刻で見張るなら、StandardOutPath を必ず指定します。

無人実行で事故を防ぐ3つの設定

無人で回すなら、次の3つを先に決めておきます。

  • 使える道具を最小にする(権限の確認を飛ばさない実行なら --allowedTools、飛ばす実行なら --tools)
  • 使える金額とターン数に --max-budget-usd・--max-turns で上限を付ける
  • 誰も答えられない確認は --permission-prompts none で拒否にする

3つ目は 2.1.259 以降で使えます。

確認が必要な操作を、待たずに拒否して先へ進ませる設定です。

--output-format stream-json と組み合わせると、拒否された操作が permission_denials に一覧で残ります。

私のジョブは、まだこの上限は付けていません。

金額の上限だけでも、先に入れておくほうが安心だと感じています。

CLIでつまずく改行入力の対処

CLIを使い始めて最初につまずくのが、改行です。

Enter を押すとその場で送信されてしまい、複数行の指示が書けません。

方法使えるターミナル
\ を打って Enterすべて
Ctrl+J設定不要で、どれでも使える
Shift+EnteriTerm2・WezTerm・Ghostty・Kitty・Warp・Apple Terminal・Windows Terminal
Option+EntermacOSで Option を Meta にした後

迷ったら Ctrl+J です。

どのターミナルでも、設定なしで改行できます。

長い指示を書くときは、Ctrl+G で外部エディタを開く手もあります。

プロンプトを普段使いのエディタで直せるので、長文の指示に向いています。

よくある質問

Claude Code CLIについて、読者からよく聞かれる質問をまとめました。

コマンドの使い分け、-p の出力、権限まわりの3点が中心です。

細かい手順や根拠は、各見出しの本文もあわせて確認してください。

Q1. Claude Code CLIとは何ですか?

A1. ターミナルで claude コマンドから起動する、Claude Code の本体です。VS Code拡張機能やデスクトップアプリでも同じ Claude Code が使えますが、スクリプトやスケジュール実行に組み込みやすいのはCLIです。

Q2. claude -p は対話モードと何が違いますか?

A2. 対話せずに1回の指示で最後まで実行し、結果を標準出力に返して終了します。成功時は終了コード0、失敗時は0以外なので、シェルスクリプトの分岐に使えます。

Q3. --dangerously-skip-permissions は使ってよいですか?

A3. 権限の確認をすべて飛ばすため、守りが外れます。使うなら専用のリポジトリで、--tools や --disallowedTools により使える道具を絞った上にしてください(この場合 --allowedTools は効きません)。確認に誰も答えられない実行なら、--permission-prompts none で拒否に倒す手もあります。

Q4. -p で作った会話は -c で続けられますか?

A4. 対話で打つ claude --continue は、-p のセッションを飛ばします。続けたいときは claude -p --continue、または --resume にセッションIDを渡します。IDは --output-format json の結果から取れます。

Q5. jsonの出力から結果を取り出すには?

A5. 2.1.281 の手元の環境では、JSONがイベントの配列で返りました。jq -r '.[-1].result' で最後の要素の result を取れます。公式の例の jq -r '.result' はオブジェクトを想定しているため、版によって書き方を変える必要があります。

Q6. Shift+Enterで改行できないときは?

A6. Ctrl+J なら設定なしで、どのターミナルでも改行できます。\ を打ってから Enter を押す方法も、すべてのターミナルで使えます。

まとめ:まず-pを1つ、スクリプトに入れてみる

日常で使うコマンドは claude・-c・-r・update の4つで足ります。

オプションは「実行を絞る」「権限を決める」「指示を足す」の3グループで覚えると迷いません。

-p は、出力の形を先に確かめてから組み込んでください。

私は公式の例をそのまま信じて、jq の行で最初に止まりました。

自動化を試すなら、まず読み取りだけの小さなジョブから始めるのが安全です。

許可ツールを Read と Grep に絞り、--max-turns に低い値を入れて、stdout をログに残してください。

動いたら、hooksやサブエージェントと組み合わせる段階に進めます。

最初の1本が通ると、日曜の朝に勝手に仕事が終わっている感覚を味わえます。

REVISIONS / 改訂履歴
REV.DATE内容
32026-10-16図解を描き直し(図面のデザインにそろえた)
22026-10-06記載内容の事実確認と修正
12026-10-05初版
NEXT READ本棚から1本

AIで開発を組み直すなら、まずこの5冊から

入門・実践・設計まで、Claude Codeの本をレベル別に5冊選んで比べました。

→ おすすめ5冊を見る

  • この記事を書いた人
  • 最新記事

トム

SESで約8年、環境を変えられないもどかしさの中にいました。32歳で自社開発企業に転職し、今はClaude Codeと自動化で、仕事も時間も組み直している途中です。
・Javaバックエンドエンジニア(Java歴12年以上)
・資格:基本情報技術者/応用情報技術者/Java Silver/Python3エンジニア認定基礎
詳細なプロフィール

𝕏

AI