Claude Code Action で PR を自動レビューしてみる
目次
概要
このリポジトリに anthropics/claude-code-action を導入して、PR の自動レビューと @claude メンションへの応答が動くようにしてみる。
2 つのワークフローの役割
.github/workflows/ に 2 つのワークフローを置く。
claude.yml- Issue / PR / レビューコメントの本文に
@claudeを含む投稿があったとき
- Issue / PR / レビューコメントの本文に
claude-code-review.yml- PR が
opened/synchronizeされたとき
- PR が
paths フィルタで対象を絞る
pull_request の paths で、コードとビルド系の変更だけに絞る。
paths:
- 'src/**'
- 'api/**'
- 'astro.config.mjs'
- 'package.json'
- 'package-lock.json'
- 'tsconfig.json'
- 'eslint.config.mjs'
- 'playwright.config.ts'
- '.github/workflows/**'
動作確認
それぞれテスト用に Issue / PR を作って動かしてみた。
@claudeメンション:- 本文に
@claudeを含む Issue #7 を立てるとclaude.ymlがトリガーされ、コメントが返ってきた
- 本文に
- PR 自動レビュー:
- コメント 1 行を追加した PR #8 を作って、
claude-code-review.ymlが走り PR コメントで指摘が返ってきた
- コメント 1 行を追加した PR #8 を作って、
実行コスト
claude-code-action はジョブの末尾に実行結果を JSON 形式で出力する。動作確認用 PR(src/pages/index.astro にコメント 1 行追加だけ)でのレビュー 1 回の実測値を、デフォルトの Opus 4.7 と、claude_args に --model claude-sonnet-4-6 を渡して指定した Sonnet 4.6 で比較した。
| 項目 | Opus 4.7 | Sonnet 4.6 |
|---|---|---|
| Duration | 約 76 秒 | 約 59 秒 |
| Turns | 13 | 11 |
| Total cost | $0.37 | $0.17 |
Anthropic API は入力トークン / 出力トークン / プロンプトキャッシュの読み書きそれぞれに単価が設定されていて、消費したトークン量 × モデルの単価で課金される(料金 - Claude API Docs)。
claude-code-action は 1 回の起動の中で複数回 API リクエストを走らせる(Opus 4.7 は 13 turns、Sonnet 4.6 は 11 turns)ので、total_cost_usd はそれらの合計値。同じく 1 行追加だけの PR でも、Sonnet 4.6 に切り替えるとレビュー 1 回あたり半分以下のコストに収まった。
所感
CLAUDE.md にコーディング規約・コミット規約を書いておけば、レビューでもその文脈を踏まえた指摘が返ってくるのは便利だがコストとの兼ね合いかな。