機能を学ぶ · COURSE
Headless モードで CI に Claude を組み込む
PR レビュー・要件チェック・リリースノート生成を GitHub Actions に常駐させる。
audience
中級者・DevOps 兼任
duration
70分
lessons
5 章
reviewed
2026.05
2 分でコース概要を見る
このコースで作るもの
- 01PR レビュー Bot 用 GitHub Actions ワークフロー
- 02要件チェック / リリースノート生成スクリプト
- 03Cost ガード + 失敗時の挙動設定
達成目安
全 5 レッスンを読み、コース完了マークを付ける
未完了
クイズ 5 問に挑戦し、正答率 80% 以上
未挑戦
成果物 3 個を実際に手元に作る
自己チェック
コース構成
このコースで学ぶこと
- 01
Headless モードとは
claude コマンドに -p(プロンプト)と --output-format を渡すと、対話画面を出さずにスクリプト用の出力を返す。これが CI に組み込む土台になる。
- --output-format text / json / stream-json
- --max-turns で暴走を防ぐ(CI では 1〜3 推奨)
- --allowed-tools で使えるツールを限定(Read のみ等)
bashclaude -p "このディレクトリの README を 5 行で要約して" \ --output-format json \ --max-turns 1json 出力にすると jq でパイプ処理しやすい 理解度チェック
Q1.Headless モードで Claude を CI に組み込むときの最小オプションセットは?
- 02
PR レビュー Bot を 1 ファイルで
GitHub Actions に Claude を 1 ジョブとして組み込む。diff をプロンプト本体に埋め込んで観点別にコメントを返させる構成が最も小さく始められる。
yamlname: claude-review on: pull_request jobs: review: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 with: { fetch-depth: 0 } - name: claude review env: ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }} run: | DIFF=$(git diff origin/main...HEAD) claude -p "以下のパッチを review_checklist.md の観点でレビュー。 ---PATCH--- $DIFF ---END---" \ --allowed-tools Read \ --max-turns 2 > review.md - uses: actions/github-script@v7 with: script: | const fs = require('fs'); const body = fs.readFileSync('review.md', 'utf8'); await github.rest.issues.createComment({ ...context.repo, issue_number: context.issue.number, body });diff は環境変数経由でプロンプト本体に埋め込む(stdin リダイレクトはバージョンにより挙動が異なる) 理解度チェック
Q1.PR レビュー Bot で `--allowed-tools Read` を指定する意図は?
- 03
Cost ガードレールと失敗時の挙動
CI で動かす以上、暴走するとお金と時間が燃える。max-turns・allowed-tools・タイムアウトの 3 段ガードを必ず入れる。
- max-turns: 1〜3(要件確認なら 1、レビューなら 2)
- allowed-tools: 書き込みが要らないなら Read だけ
- timeout-minutes: 5〜10(job レベル)
- Anthropic Console の Workspace で月間 spend cap を設定
理解度チェック
Q1.外部 fork からの PR で `pull_request_target` を無防備に使うと起きる事故は?
- 04
“要件チェック”ジョブで PR 説明を強制する
Claude に PR 本文を読ませて、テンプレに足りない項目があれば検出するジョブを足す。レビュアーの負荷が劇的に下がる。
bashPR_BODY=$(gh pr view --json body -q .body) claude -p "以下の PR description が我が社の PR テンプレ(@.github/PULL_REQUEST_TEMPLATE.md)を満たしているか判定し、missing: [..] の JSON で返して。 ---PR_BODY--- $PR_BODY ---END---" \ --output-format json --max-turns 1手を動かす
0 / 3
理解度チェック
Q1.PR description のテンプレ充足判定を Claude にやらせるとき、出力形式の選択として最適なのは?
- 05
リリースノートと運用
リリースタグ作成時に Claude が直近の commit から日本語リリースノートを書く。これも Headless モードで自動化できる。
bashCOMMITS=$(git log v1.0.0..HEAD --oneline) claude -p "以下のコミットから 5 行のリリースノートを日本語で。ユーザー視点で。 ---COMMITS--- $COMMITS ---END---" \ --max-turns 1Lv.7 — エージェント自動化手を動かす
0 / 3
理解度チェック
Q1.Headless Claude で自動生成したリリースノートを“まず Draft Release に貼る”運用にするのはなぜ?


