Renovate のメジャーバージョン更新 PR を自動で AI レビューする
Renovate のメジャーバージョン更新 PR に ai-review ラベルを付け、GitHub Actions で AI レビューを自動実行する方法を、Claude Code の設定例とともに紹介します。
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 にルールを追加します。
{ "$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 に変更します。
ラベル付与でレビューを起動する

対象リポジトリに .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 で、次の流れを確認します。
- Renovate が PR を作成し、
ai-reviewを付ける。 gateジョブがラベルを確認し、GitHub Actions のreviewジョブが実行される。- Claude が追跡コメントに進捗と要約を投稿し、具体的な問題にはインラインコメントを付ける。
ai-review を外して付け直すと、レビューを再実行できます。この例の concurrency は、同じ PR のレビューが実行中なら古い処理をキャンセルして、新しい処理を開始する設定です。
synchronize を有効にすると、追加コミットごとにレビューが実行され、コメントと利用コストが増えます。更新頻度が高い場合はラベル付与時だけ実行し、必要なときに付け直す運用も選べます。
レビューを別の AI に置き換える場合も、Renovate のラベル設定と gate ジョブはそのまま使えます。AI を呼び出すステップ、認証情報、結果の投稿処理を、そのツールに合わせて実装します。レビュー結果を出力するだけのツールなら、読み取り専用のジョブでレビューし、コメント投稿を別ジョブに分ける構成も使えます。
まとめ
Renovate に ai-review ラベルを付けさせることで、メジャー更新 PR の作成から AI レビューまでを自動化できます。レビュー結果が PR に残るため、変更の影響を調べる際に参考にできます。
再レビューは、ラベルの付け直しで実行できます。追加コミットのたびに実行したい場合は synchronize を有効にします。マージ前には AI の指摘に加え、移行ガイドと更新後のテスト結果を確認します。
関連記事
aws-vault から Granted に移行した話
aws-vault の開発終了をきっかけに Granted へ移行しました。ロールの切り替えやコンソールの開き方の違いと、認証情報や既存の設定を引き継ぐ際の注意点をまとめます。
リスクストーミングでアーキテクチャの懸念を対策につなげる
アーキテクチャ上のリスクを個別に評価し、異なる見解をすり合わせ、追跡可能な軽減策へつなげる手順を実例とともに紹介します。
C4 ダイアグラムでチーム間のコミュニケーションを改善する
C4 モデルの4つのズームレベルを軸に、ビジネス、開発、運用、セキュリティの各担当者に合ったアーキテクチャの見せ方を考えます。
Cognito User Pools と OIDC で Slack サインインを実装する
Cognito user pool を OIDC 経由で Slack と連携させ、"Sign in with Slack" を Amplify で Next.js アプリケーションに組み込みます。
Lambda Web Adapter で FastAPI を AWS Lambda にデプロイする
FastAPI で書いた API バックエンドをコンテナ化し、Lambda Web Adapter と AWS CDK を使って単一の Lambda 関数へデプロイします。
