PR-Agentで実現するGitHub効率化術：PR説明文の自動生成とAIレビューの導入

## はじめに

ソフトウェア開発において、プルリクエスト（PR）の作成とレビューは日常的な作業ですが、意外と多くの時間を消費します。PR説明文を丁寧に書くこと、そして細部までチェックするコードレビューは品質向上に不可欠である一方、開発の流れを止めてしまうボトルネックにもなりがちです。

「PRの説明文をもっと簡単に書けないだろうか？」
「細かなコードの問題を自動で検出できないだろうか？」

このような課題を抱えていた私は、最近注目を集めているAIツール「PR-Agent」を試してみることにしました。PR-Agentは、GitHubのプルリクエストに対して、AIが自動的に説明文を生成したり、コードレビューを行ったりする機能を提供しています。

本記事では、PR-Agentの導入から実際の使用感、そして開発ワークフローにどのような変化をもたらしたかについて詳しく解説します。AIの力を借りてGitHubでの作業を効率化したい開発者の方々に、ぜひ参考にしていただければと思います。

## PR-Agentとは？
PR-Agentは、GitHubのプルリクエスト作業を自動化・効率化するためのオープンソースAIツールです。大規模言語モデル（LLM）の能力を活用し、開発者の日常的なGitHub作業をサポートします。

OpenAI GPT-4などの大規模言語モデルと連携し、GitHubのAPIを通じてプルリクエストの情報にアクセスが可能で、コードの差分を解析し、コンテキストを理解した上で、人間のレビュアーのように考え、フィードバックを提供します。

また、GitHub Actionsとの統合や、コマンドラインからの操作も可能で、既存の開発ワークフローにシームレスに組み込むことができるのが特徴です。

https://qodo-merge-docs.qodo.ai/

## 何ができるの？
#### PR説明文の自動生成
コード変更の内容を分析し、何が変更されたのか、なぜその変更が必要だったのかを説明する文章を自動で作成します。

#### コードレビューの自動化
提出されたコードを分析し、潜在的な問題点、バグ、セキュリティ上の懸念、パフォーマンスの問題などを指摘します。

#### コード改善の提案
より良いコーディングプラクティスやアルゴリズムの最適化などを提案し、コード品質の向上をサポートします。

#### 変更のサマリー生成
大規模な変更や複雑なPRに対して、変更内容を要約し、レビュアーの理解を助けます。

## 導入方法

#### AWSで権限の設定
今回はAmazon Bedrock経由でLLM(Claude)を利用しますので、先ずはAWS側で権限の設定を行います。

1 . IAMポリシーの作成
Bedrock API にアクセスするための IAM ポリシー を作成します。

```
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "bedrock:InvokeModel",
                "bedrock:InvokeModelWithResponseStream"
            ],
            "Resource": [
                "arn:aws:bedrock:*::foundation-model/anthropic.*"
            ]
        }
    ]
}
```

2 . IAMロールの作成
Bedrock APIにアクセスできるようにIAMロールを作成します。
ポリシーには手順1で作成したポリシーをアタッチして下さい。

```
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Federated": "arn:aws:iam::[AWSアカウント]:oidc-provider/token.actions.githubusercontent.com"
            },
            "Action": "sts:AssumeRoleWithWebIdentity",
            "Condition": {
                "StringEquals": {
                    "token.actions.githubusercontent.com:aud": "sts.amazonaws.com"
                },
                "StringLike": {
                    "token.actions.githubusercontent.com:sub": "repo:[リポジトリのORG]/[リポジトリ名]:*"
                }
            }
        }
    ]
}
```

 3 . IDプロバイダの追加
 AWSとGitHub間の疎通をできるよう、IAMよりIDプロバイダを追加します。
プロバイダのタイプ：`OpenID Connect`
プロパイダのURL：`https://token.actions.githubusercontent.com`
対象者：`sts.amazonaws.com`

 4 . GitHubシークレット作成
 PR-Agent を Amazon Bedrock と連携させるため、GitHub シークレット に AWS の設定値を登録しましょう。

| Name | Value |
|:-:|:-:|
|  AWS_REGION | ap-northeast-1  |
|  AWS_ROLE_ARN |  手順2で作成したロールのARN |

 5 . リポジトリにworkflowsファイルの追加
 GitHubActionsのworkflowsファイルを作成します。
 `.github/workflows/pr-review.yml`

 ```
 name: PR Review with Bedrock
on:
  pull_request:
    types: [opened, reopened, synchronize]
jobs:
  review:
    if: ${{ github.event.sender.type != 'Bot' }}
    runs-on: ubuntu-latest
    permissions:
      contents: read
      pull-requests: write
      id-token: write
    steps:
      - name: Checkout code
        uses: actions/checkout@v3
      - name: Configure AWS credentials
        uses: aws-actions/configure-aws-credentials@v4
        with:
          role-to-assume: ${{ secrets.AWS_ROLE_ARN }}
          aws-region: ${{ secrets.AWS_REGION }}
      - name: Run Pr-Agent with AWS Bedrock
        uses: qodo-ai/pr-agent@main
        env:
          OPENAI_KEY: dummy
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

 ```

  6 . PR-Agent用の設定ファイルを追加

  ```
  [config]
model = "bedrock/anthropic.claude-3-5-sonnet-20240620-v1:0"

[github_action_config]
auto_review = true
auto_improve = true

[pr_reviewer]
extra_instructions = "answer in Japanese"
num_code_suggestions=3
inline_code_comments = true
ask_and_reflect = true

[pr_description]
extra_instructions = "answer in Japanese"
generate_ai_title=true

[pr_code_suggestions]
extra_instructions = "answer in Japanese"

[pr_add_docs]
extra_instructions = "answer in Japanese"

[pr_questions]
extra_instructions = "answer in Japanese"

[pr_update_changelog]
extra_instructions = "answer in Japanese"

[pr_test]
extra_instructions = "answer in Japanese"

[pr_improve_component]
extra_instructions = "answer in Japanese"
  ```

  以上で設定完了です！

  ## 動かしてみた
  サンプル用にReactのアプリケーションのリポジトリを作成しました。
  このリポジトリのmainブランチに対して、PRを作成してみます。



  アプリケーションには、Cognitoを利用したユーザー認証機能とお知らせやタスクを管理する簡易的なダッシュボード画面を実装しています。
  今回は、ダッシュボード画面のレイアウトを微調整しました。

  ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3880077/ca763ccd-4091-4d2f-b36f-071d2d15fdcb.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3880077/f8a6afdc-f061-408c-9792-e9bc59a251da.png)

とりあえず、PRを作成します。
作成時はデフォルトの文章、タイトルで構いません。

作成後にワークフローが動いて、以下のようにタイトル含めPRの説明文を詳細に書き起こしてくれる事を確認しました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3880077/f77e10dc-47f8-4d40-91b6-d596469fcbd9.png)

レビューガイドでレビュアーに対し、フォローアップをやってくれます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3880077/f950bbe3-54b3-4b37-80f0-717992d65c50.png)


修正の提案もあります！凄いなあー。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3880077/55c28dca-5903-41a5-8596-246e89ab2f71.png)

## さいごに
PR-Agentを導入してから、私のGitHubでの作業フローは確実に変化しました。最初は「AIにコードレビューを任せて大丈夫だろうか」という不安もありましたが、実際に使ってみると、その効果は予想以上でした。

特に時間の節約という点では大きな恩恵を感じています。PR説明文の作成に悩む時間が減り、AIが指摘してくれる潜在的な問題点のおかげで、レビュー前に自分でコードを改善できるようになりました。もちろん、AIが完璧というわけではなく、ビジネスロジックの理解や特定のコンテキストが必要な判断は、依然として人間の目が必要です。

PR-Agentは人間のレビュアーを置き換えるものではなく、あくまで補助ツールとして位置づけるのが適切でしょう。AIと人間のレビュアーが協力することで、より効率的で質の高いコードレビューが実現できると感じています。

開発効率の向上を目指す方、コードレビューの質を高めたい方、あるいは単純にAIツールの可能性に興味がある方は、ぜひPR-Agentを試してみることをお勧めします。セットアップも比較的簡単で、得られるメリットは大きいはずです。

皆さんもぜひ、PR-Agentを試して、GitHubでの作業をより効率的で楽しいものにしてみてください。