🤖

Dependabot の PR を Claude Code Action のマルチエージェントにレビューさせる

に公開

この記事は GENDA Advent Calendar 2025 - シリーズ 1 - 8日目の記事です。

https://qiita.com/advent-calendar/2025/genda

TL;DR

  • anthropics/claude-code-action のデフォルトの claude-code-review.yml による PR レビューは Dependabot の PR に対しては機能しない
  • GitHub App によるコメント投稿を介して自動でレビューを開始させるようにした
  • 複数の観点をサブエージェントにレビューさせるスラッシュコマンドを作成した

はじめに

私が開発するプロダクトでは、セキュリティやパフォーマンス維持のために Dependabot を使っています。
依存関係の更新に Dependabot などの自動化ツールはとても役に立ちますが、日々送られてくる大量の PR を一つ一つ確認し、Changelog を読み、影響範囲を調査するのは非常に骨の折れる作業です。

Anthropic 社が提供する claude-code-action は、AI によるコードレビューを自動化する強力なツールですが、デフォルトの設定ではDependabot が作成した PR に対してはレビューが実行されません。これは GitHub Actions の仕様上、GITHUB_TOKEN の権限やトリガーの無限ループ防止が関係しています。

本記事では、この制約を GitHub App を活用して回避し、さらに3つの専門エージェントを組み合わせることで、レビュー負荷を軽減した事例を紹介します。

アーキテクチャの全体像

今回構築したシステムの全体像は以下のとおりです。

Dependabot の PR を検知して直接 Claude を起動するのではなく、一度 GitHub App 経由でコメントを投稿し、そのコメントをトリガーにして Claude Code Action を起動させるようになっています。

実装ステップ

1. GitHub App 作成

人間の代わりにコメント投稿を行うための GitHub App を下記のドキュメントに沿って作成します。
https://docs.github.com/ja/apps/creating-github-apps/about-creating-github-apps/about-creating-github-apps

コメント投稿の目的だけでなので、 Permissions は最小限に Pull Requests (Access: Read & write) だけで構いません。
GitHub App Permissions 設定
GitHub App Permissions 設定は最小限に

作成した GitHub App は Dependabot を動作させるリポジトリにインストールし、GitHub App の App ID, Private Key もリポジトリに登録しておきます。

  • App ID: GH_APP_ID として Repository variables に登録します
  • Private Key: GH_APP_PRIVATE_KEY として Dependabot secrets に登録します

https://docs.github.com/ja/apps/using-github-apps/installing-your-own-github-app

2. GitHub App によるコメント投稿ワークフロー

Dependabot の PR 作成時にレビューのワークフローをトリガーするために、.github/workflows/dependabot-review-comment.yml を作成しました。

# Dependabot が作成した PR に対してレビュー依頼コメントを投稿するワークフロー
name: Dependabot Review Comment

on:
  pull_request:
    types: [opened, ready_for_review, reopened]

jobs:
  post-review-comment:
    if: github.actor == 'dependabot[bot]' # Dependabotのみ対象
    runs-on: ubuntu-latest
    permissions:
      contents: read
      pull-requests: write

    steps:
      # 1. GitHub App トークンの生成
      - name: Generate GitHub App token
        id: app-token
        uses: actions/create-github-app-token@7e473efe3cb98aa54f8d4bac15400b15fad77d94 # v2.2.0
        with:
          # 前のステップで作成した GitHub App の App ID
          app-id: ${{ vars.GH_APP_ID }}
          # 前のステップで作成した GitHub App の Private Key
          private-key: ${{ secrets.GH_APP_PRIVATE_KEY }}

      # 2. コメントの投稿
      - name: Post review request comment
        env:
          GITHUB_TOKEN: ${{ steps.app-token.outputs.token }}
        run: |
          gh pr comment ${{ github.event.pull_request.number }} \
            --repo ${{ github.repository }} \
            --body "@claude /review-dependabot-pr"

ここで重要なのが actions/create-github-app-token です。Dependabot を含む Bot による pull_request イベントのワークフローでは secrets.GITHUB_TOKEN が参照できず、コメントを投稿できません。GitHub App トークンを生成し、GitHub App であればコメント投稿が可能になり、そのコメント投稿をきっかけに Claude Code Action を確実に起動させています。

GitHub App によるコメント投稿のスクリーンショット
GitHub App によるコメント投稿

3. Claude Code ワークフロー

GitHub App が投稿した @claude /review-dependabot コメントをフックするのは、Claude Code Action を最初にインストールしたときに生成される claude.yml です。
デフォルトの anthropics/claude-code-action は Bot が投稿したコメントではフックされないため、特定の Bot を許可するように allowed_bots: オプションを追加します。

      - name: Run Claude Code
        id: claude
        uses: anthropics/claude-code-action@6337623ebba10cf8c8214b507993f8062fd4ccfb # v1.0.22
        with:
          anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
          # コメントを投稿する Bot 名
          # 任意の Bot を許可するときは "*"
          allowed_bots: <ステップ1で作成したGitHub Appの名前>
          additional_permissions: |
            actions: read

4. 3つの専門エージェントによる分業

トリガーされた Claude Code Action は、スラッシュコマンド /review-dependabot-pr を実行します。

このコマンドは単一のプロンプトで処理するのではなく、役割の異なる3つのサブエージェントを並列に実行させ、その結果を統合するオーケストレーターとして機能します。

review-dependabot-pr.md の要約
---
allowed-tools: Bash(gh pr view:*),Bash(gh pr diff:*),WebFetch,WebSearch
description: Dependabot PRをバージョン差分・影響範囲・セキュリティの3観点からレビュー
---

# Dependabot PR レビュー

## レビューの流れ

### ステップ1: CLAUDE.md の読み込み
プロジェクトルールと設計方針を確認し、全サブエージェントに共有。

### ステップ2: PR情報の取得
`gh pr view --json number,title,body,author` で Dependabot PR であることを確認。

### ステップ3: 3つのサブエージェントによる並列レビュー

1. **dependabot-version-analyzer**: CHANGELOG/リリースノート調査、Breaking Changes特定
2. **dependabot-security-analyzer**: CVE/脆弱性の深刻度評価、緊急度判定
3. **dependabot-impact-analyzer**: コードベースへの影響分析、修正箇所特定

### ステップ4: 結果統合とコメント投稿

## 最終判断の4パターン

| 判断 | 条件 | アクション |
|------|------|------------|
| 🔒 緊急マージ推奨 | Critical/High セキュリティ修正 | 即座にマージ、24時間以内デプロイ |
| ✅ 即座にマージ可能 | Breaking Changes なし/影響なし | 承認してマージ |
| ⚠️ 修正後にマージ | Breaking Changes が影響あり | コード修正後にマージ |
| ⚠️ マージ可能だが要対応 | 非推奨API使用(動作はする) | マージ後に別PRで対応 |

## 注意事項

- **インラインコメント**: 依存関係ファイルのみの変更なので通常は不要
- **エラー時**: changelog未発見、影響判断困難な場合は人間のレビューを促す

主な省略箇所:
- 詳細なコメントテンプレート(60行以上あったMarkdown例)
- 各ケースの詳細な説明文
- レビューのポイント4項目の詳細説明

4-1. dependabot-version-analyzer

ライブラリの差分から「何が変わったのか?」を調査するエージェントです。
PR 本文に記載された情報だけでなく、Web 検索や GitHub API を駆使して CHANGELOG やリリースノートを探しに行きます。
また、"Breaking Change", "Migration", "Deprecation" といったキーワードを重点的に探し、メジャーバージョンアップ時の注意点を洗い出します。

dependabot-version-analyzer 実行結果のスクリーンショット
dependabot-version-analyzer によるバージョン差分情報

dependabot-version-analyzer.md の要約
---
name: dependabot-version-analyzer
description: Dependabot PR のバージョン差分を調査し、CHANGELOG、リリースノート、Breaking Changes を分析する
tools: Glob, Grep, Read, WebFetch, TodoWrite, WebSearch, BashOutput, KillBash
---

# Dependabot バージョン差分アナライザー

依存関係更新におけるバージョン差分の調査を専門とするエージェントです。

## 役割

Dependabot が作成した PR のバージョン変更内容を詳細に調査し、以下の情報を収集します:

1. 更新対象のライブラリ名とバージョン範囲
2. CHANGELOG とリリースノートの内容
3. Breaking Changes の有無と詳細
4. 新機能や改善点、セキュリティ修正

## 調査手順

1. **PR 情報取得**: `gh pr view` でライブラリ名とバージョンを抽出
2. **リリース情報収集**: GitHub Releases、Web 検索、公式ドキュメントから情報を取得
3. **Breaking Changes 特定**: `BREAKING CHANGE``Migration Guide`、Major version bump などをキーワードに調査
4. **セキュリティ確認**: `CVE``Vulnerability``Security` などのキーワードで確認

## アウトプット形式

調査結果は以下の構造でまとめます:

- **ライブラリ情報**: 名前、変更前後のバージョン、変更タイプ
- **リリースノート・CHANGELOG**: 要約と参考リンク
- **主な変更内容**: 新機能、改善点、Bug 修正
- **⚠️ Breaking Changes**: 変更内容、影響範囲、移行ガイド
- **🔒 セキュリティ修正**: CVE 番号、深刻度、修正内容

4-2. dependabot-security-analyzer

セキュリティ観点で「急いでマージすべきか?」を判断するエージェントです。

  • 脆弱性評価: CVE 番号や GitHub Security Advisories を確認し、CVSS スコア (深刻度) を評価します。
  • 緊急度の判定: 「Critical/High なら24時間以内にマージ推奨」「Low なら定期更新でOK」といった具体的なアクションプランを提示します。

dependabot-security-analyzer 実行結果のスクリーンショット
dependabot-security-analyzer によるセキュリティチェック

dependabot-security-analyzer.md の要約
---
name: dependabot-security-analyzer
description: セキュリティパッチや脆弱性修正を評価し、緊急度を判定する
tools: Glob, Grep, Read, WebFetch, TodoWrite, WebSearch, BashOutput, KillBash
---

# Dependabot セキュリティアナライザー

依存関係更新におけるセキュリティ影響を専門とするエージェントです。

## 役割

バージョン更新に含まれるセキュリティパッチや脆弱性修正を評価し、以下を判定します:

1. セキュリティ修正の有無
2. 脆弱性の深刻度 (CVSS スコア)
3. このプロジェクトへの影響
4. マージの緊急度

## 分析手順

1. **セキュリティアドバイザリの確認**: GitHub Security Advisories、CVE データベース、公式セキュリティアドバイザリを検索
2. **脆弱性の詳細調査**: CVE 情報、CVSS スコア、脆弱性タイプ、攻撃条件、影響範囲を確認
3. **プロジェクトへの影響評価**: 脆弱性の該当性と影響レベルを判定
4. **緊急度の評価**: CVSS スコア、該当性、公開エクスプロイト、攻撃容易性から総合判断

## 影響レベルの判定基準

- **Critical** (CVSS 9.0-10.0): 即座にマージ・デプロイ
- **High** (CVSS 7.0-8.9): 24時間以内にマージ
- **Medium** (CVSS 4.0-6.9): 1週間以内にマージ
- **Low** (CVSS 0.1-3.9): 通常のリリースサイクルで対応

## アウトプット形式

- **セキュリティ修正あり**: 脆弱性の詳細、プロジェクトへの影響、推奨アクション (緊急度に応じた具体的な対応)
- **セキュリティ修正なし**: 確認した内容と通常のレビュープロセス推奨

4-3. dependabot-impact-analyzer

アップデートするにあたって「自分のコードに影響があるか?」 を調査するエージェントです。

dependabot-version-analyzer が「API foo() が削除されました」と報告しても、プロダクトのコードで foo() を使っていなければ問題ありません。Impact Analyzer は gh search code を使用して、Breaking Changes が実際のコードベースで使用されているかを検証します。

dependabot-impact-analyzer 実行結果のスクリーンショット
dependabot-impact-analyzer によって Breaking Changes はプロジェクトに影響ないことがわかった

dependabot-impact-analyzer.md の要約
---
name: dependabot-impact-analyzer
description: Breaking Changes がアプリケーションコードに与える影響を分析し、必要な修正箇所を特定する
tools: Glob, Grep, Read, WebFetch, TodoWrite, WebSearch, BashOutput, KillBash
---

# Dependabot 影響範囲アナライザー

依存関係更新における影響範囲の評価を専門とするエージェントです。

## 役割

バージョン差分アナライザーが特定した Breaking Changes や API 変更が、プロジェクトのコードベースにどのような影響を与えるかを分析します。

## 分析手順

1. **更新内容の理解**: Breaking Changes、削除された API、変更されたインターフェース、非推奨化された機能を確認
2. **コードベースの影響調査**: GitHub Code Search API でライブラリの使用箇所と変更された API の使用箇所を検索
3. **影響範囲のカテゴリ分類**: 直接的な影響、間接的な影響、非推奨化に分類
4. **修正の必要性評価**: 必須修正、推奨修正、修正不要に分類
5. **マイグレーション作業の評価**: 小規模 (1-2時間)、中規模 (半日-1日)、大規模 (数日) で見積もり

## アウトプット形式

調査結果は以下の構造でまとめます:

- **影響の有無**: Breaking Changes がプロジェクトに影響するか明確に記載
- **📍 影響箇所の特定**: 直接的な影響、間接的な影響、非推奨 API 使用箇所
- **🛠️ マイグレーション作業の見積もり**: 作業規模と推定工数
- **✅ マージ判断**: 即座にマージ可能 / 修正後にマージ / マージ可能だが要対応

## GitHub Actions 環境での制約

- ✅ 利用可能: GitHub Code Search API、PR 差分分析
- ❌ 利用不可: ローカルファイルシステムへの直接アクセス、型レベルの依存関係追跡

これらの分析により、以下の3つのケースを自動で切り分けられるようになりました。

  • ✅ 影響なし: Breaking Change はあるが、自社コードでは使っていない → 即マージOK
  • ⚠️ 修正が必要: 削除された API をガッツリ使っている → 修正必須
  • ℹ️ 非推奨: まだ動くが、将来のために修正推奨 → Issue化して後で対応

採用しなかった方法

pull_request_target

コメント投稿をするのではなく、直接 Dependabot PR をレビューするワークフローを pull_request_target イベントで発火させて GITHUB_TOKEN を参照する方法。
それでも Claude Code Action 用の secrets.ANTHROPIC_API_KEY が参照できません。
Dependabot Secrets に ANTHROPIC_API_KEY を保存すれば参照できそうですが、Dependabot Secrets を ANTHROPIC_API_KEY に保存すことに抵抗があるため採用しませんでした。

GitHub PAT (Personal Access Token)

GitHub にコメントを投稿する方法として PAT を利用する方法が真っ先に思い浮かびました。
しかし、PAT は個人に紐づくため、人事異動や退職、PAT の有効期限によって Token のローテーションが必要になってしまいます。
持続可能な運用を見据えて GitHub App の利用を選択しました。

導入効果

この仕組みを導入したことで、Dependabot のレビュー体験は劇的に改善しました。

  • トリアージの自動化: 「影響なし」と判定された PR は、人間が詳細を確認することなく自信を持ってマージボタンを押せるようになりました。
  • 修正箇所のピンポイント指摘: 影響がある場合も、「どのファイルの何行目を直せばいいか」がレビューコメントに含まれているため、修正作業がスムーズになりました。
  • セキュリティ対応の迅速化: 緊急性の高いパッチが明確に可視化されるため、対応漏れのリスクが減りました。

まとめ

Claude Code Action は単なるチャットボットではなく、GitHub CLI などのツールを持たせることで「自律的に調査するエージェント」として振る舞うことができます。
特に Dependabot のような定型的ながら調査コストが高いタスクにおいて、専門エージェントで分業というパターンは非常に有効です。

GENDA

Discussion