Renovate のメジャーバージョン更新 PR を自動で AI レビューする

Renovate のメジャーバージョン更新 PR に ai-review ラベルを付け、GitHub Actions で AI レビューを自動実行する方法を、Claude Code の設定例とともに紹介します。

Takahiro Iwasa
11 min read

Renovate は依存パッケージの更新 PR を作成してくれますが、メジャーバージョン更新では、破壊的変更がアプリケーションに影響するかを確認する必要があります。バージョン番号とロックファイルだけが変わる PR でも、使っている API が削除されたり、設定の既定値が変わったりする可能性があります。

メジャー更新の PR に ai-review のような AI レビュー専用のラベルを付け、GitHub Actions で AI レビューを自動実行します。Renovate がラベルを付け、ワークフローが Claude Code を呼び出す設定を紹介します。

何を解決できるのか

Renovate が PR を作成した後も、リリースノートを読み、変更された API や設定をコード内で使っていないか調べる作業は残ります。更新 PR が増えると、この調査が追いつかず、マージを後回しにしがちです。

AI レビューを自動実行すると、人間がレビューを始める時点で次の情報を PR 上で確認できます。

  • リリースノートや移行ガイドに記載された破壊的変更。
  • その変更に関係する API や設定の利用箇所。
  • AI が修正が必要だと判断した箇所と、その理由。

毎回手動で AI を呼び出す必要がなくなり、リリースノートとコードの最初の調査を自動化できます。テストの対象になっていない箇所についても、API の削除や既定値の変更による影響を調べられます。ただし、AI の調査にも見落としがあるため、指摘がなければ安全に更新できるとは限りません。

メジャー更新の PR にラベルを追加する

リポジトリの renovate.json に、メジャー更新を対象とした packageRules を設定します。既存の設定がある場合は、その packageRules にルールを追加します。

renovate.json
{
"$schema": "https://docs.renovatebot.com/renovate-schema.json",
"extends": ["config:recommended"],
"labels": ["dependencies"],
"packageRules": [
{
"matchUpdateTypes": ["major"],
"addLabels": ["ai-review"],
"automerge": false
}
]
}

matchUpdateTypes でメジャー更新を対象にし、addLabels で ai-review を追加します。Renovate の addLabels は既存の labels を置き換えないため、この例では dependencies と ai-review が付与されます。automerge: false は、レビュー結果とテストを確認してからマージするための設定です。

AI レビューの実行と、人間へのレビュー依頼は別の設定です。人間のレビュアーも自動で指定したい場合は、別途 reviewers を設定します。

AI レビューの準備

対象リポジトリに ai-review ラベルを作成し、Renovate が PR を作成できる状態にします。

Claude Code を使う場合は、公式のセットアップ手順 に従って Claude GitHub App をインストールし、GitHub Actions の Secrets に ANTHROPIC_API_KEY を登録します。以下の例は Anthropic API キーを使います。OAuth トークンを使う場合は、claude setup-token で生成したトークンを CLAUDE_CODE_OAUTH_TOKEN に登録し、Action の入力も claude_code_oauth_token に変更します。

ラベル付与でレビューを起動する

AI レビューの流れ:ラベル付与や追加コミットを gate が判定し、Claude Code の実行またはスキップを選び、レビュー結果を PR のコメントに投稿する。

対象リポジトリに .github/workflows/ai-review.yml を作成します。以下は、リポジトリ内で直接実行できるワークフローです。

.github/workflows/ai-review.yml
name: "repo - AI Review"
on:
pull_request:
types: [labeled, synchronize]
permissions: {}
jobs:
gate:
name: Check label
runs-on: ubuntu-latest
timeout-minutes: 5
outputs:
review: ${{ steps.check.outputs.review }}
steps:
- name: Check the label
id: check
env:
REVIEW: >-
${{
github.event_name == 'pull_request'
&& (
(github.event.action == 'labeled' && github.event.label.name == 'ai-review')
|| (github.event.action == 'synchronize' && contains(github.event.pull_request.labels.*.name, 'ai-review'))
)
&& github.event.pull_request.head.repo.full_name == github.repository
}}
run: echo "review=$REVIEW" >> "$GITHUB_OUTPUT"
review:
name: ${{ needs.gate.outputs.review == 'true' && 'Claude' || 'Claude (not requested)' }}
needs: gate
if: needs.gate.outputs.review == 'true'
runs-on: ubuntu-latest
timeout-minutes: 30
concurrency:
group: ai-review-${{ github.repository }}-${{ github.event.pull_request.number }}
cancel-in-progress: true
permissions:
contents: read
pull-requests: write
issues: write
id-token: write
steps:
- name: Checkout
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
- name: Review with Claude Code
uses: anthropics/claude-code-action@ed670b4cf9de2a5a570d130d2f6197b9e543cd64 # v1.0.240
with:
anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
allowed_bots: "renovate[bot]"
track_progress: true
prompt: |
REPO: ${{ github.repository }}
PR NUMBER: ${{ github.event.pull_request.number }}
Review this dependency update PR.
Check release notes and migration guides for breaking changes.
Find usages in this repository affected by those changes.
Report specific issues with file paths and line numbers.
Use inline comments for issues and the tracking comment for a summary.
Do not modify files or comment on style issues caught by linters.
claude_args: >-
--allowedTools "mcp__github_inline_comment__create_inline_comment,Bash(gh pr comment:*),Bash(gh pr diff:*),Bash(gh pr view:*),WebFetch"

pull_request の labeled は、PR にラベルが付いたときのイベントです。どのラベルでも発生するため、gate ジョブで、追加されたラベルが ai-review かを確認し、結果を review ジョブに渡します。

synchronize は、PR のブランチにコミットが追加されたときの再レビューに使います。この場合は、PR に ai-review が付いているかを確認します。Renovate によるリベースも対象です。ラベル付与時だけレビューしたい場合は、types: [labeled] に変更できます。

この例では、PR のブランチが同じリポジトリにある場合だけ実行します。Secrets を利用できない fork からの PR は対象から外します。

review ジョブは、gate が review=true を出力した場合だけ実行します。チェック名は、レビュー対象なら Claude、対象外なら Claude (not requested) に切り替えます。これにより、別のラベルで起動してスキップされた実行が、実際のレビューと同じチェック名になるのを避けます。

bot の許可とレビューの権限

Renovate がラベルを付けると、ワークフローを起動するユーザーは bot になります。Claude Code Action の allowed_bots に renovate[bot] を指定し、bot が起動したレビューを許可します。別の bot アカウントを使う場合は、そのユーザー名に変更します。

ジョブの permissions は、コードの読み取り、PR へのコメント投稿、Claude GitHub App の認証に使います。claude_args では、PR の確認・コメント投稿・Web ページの取得に使うツールを指定しています。

プロンプトには、リリースノートや移行ガイドにある変更を確認するだけでなく、リポジトリ内の利用箇所に影響があるかを調べるよう指示します。たとえば、削除された API の呼び出し、変更された設定項目、更新が必要なテストを、ファイルと行番号付きで報告させます。

動作確認と再レビュー

ワークフローをデフォルトブランチに追加したら、同じリポジトリ内の PR に手動で ai-review を付けて動作を確認できます。その後、Renovate のメジャー更新 PR で、次の流れを確認します。

  1. Renovate が PR を作成し、ai-review を付ける。
  2. gate ジョブがラベルを確認し、GitHub Actions の review ジョブが実行される。
  3. Claude が追跡コメントに進捗と要約を投稿し、具体的な問題にはインラインコメントを付ける。

ai-review を外して付け直すと、レビューを再実行できます。この例の concurrency は、同じ PR のレビューが実行中なら古い処理をキャンセルして、新しい処理を開始する設定です。

synchronize を有効にすると、追加コミットごとにレビューが実行され、コメントと利用コストが増えます。更新頻度が高い場合はラベル付与時だけ実行し、必要なときに付け直す運用も選べます。

レビューを別の AI に置き換える場合も、Renovate のラベル設定と gate ジョブはそのまま使えます。AI を呼び出すステップ、認証情報、結果の投稿処理を、そのツールに合わせて実装します。レビュー結果を出力するだけのツールなら、読み取り専用のジョブでレビューし、コメント投稿を別ジョブに分ける構成も使えます。

まとめ

Renovate に ai-review ラベルを付けさせることで、メジャー更新 PR の作成から AI レビューまでを自動化できます。レビュー結果が PR に残るため、変更の影響を調べる際に参考にできます。

再レビューは、ラベルの付け直しで実行できます。追加コミットのたびに実行したい場合は synchronize を有効にします。マージ前には AI の指摘に加え、移行ガイドと更新後のテスト結果を確認します。

著者について

Takahiro Iwasa

Takahiro Iwasa

Software Developer

このブログでは、実際のプロジェクトで得たアーキテクチャ、実装、AWSサービス連携に関する技術的な知見を共有しています。