yuheijotaki.com

Claude Code Action で PR を自動レビューしてみる

目次

概要

このリポジトリに anthropics/claude-code-action を導入して、PR の自動レビューと @claude メンションへの応答が動くようにしてみる。

2 つのワークフローの役割

.github/workflows/ に 2 つのワークフローを置く。

  • claude.yml
    • Issue / PR / レビューコメントの本文に @claude を含む投稿があったとき
  • claude-code-review.yml
    • PR が opened / synchronize されたとき

paths フィルタで対象を絞る

pull_requestpaths で、コードとビルド系の変更だけに絞る。

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 コメントで指摘が返ってきた

実行コスト

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.7Sonnet 4.6
Duration約 76 秒約 59 秒
Turns1311
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 にコーディング規約・コミット規約を書いておけば、レビューでもその文脈を踏まえた指摘が返ってくるのは便利だがコストとの兼ね合いかな。