SEN PRODUCT BLOG

千株式会社のエンジニアによるブログ

【PR-Agent】GitHubのプルリクエストをAIにレビューしてもらう(GitHubActions編)

みなさんこんにちは!!🎄✨
アドベントカレンダーの6日目を担当することになりました、
なーやん (id:kina_kq)です。

みなさんは、プルリクエストのレビュー作業でこんな悩みを抱えたことはありませんか?

  • 「レビューに時間がかかりすぎる...」
  • 「基本的なミスを見逃してしまう...」
  • 「レビュー時の技術設計の視座をあげたいなぁ」などなど。

私たちのチームでは、これらの課題を解決するために PR-Agent を試験的に導入してみました!

本記事では、PR-Agentの便利な機能や導入方法、実際に使ってみた感想について詳しく解説していきます。
ぜひ最後までお読みいただき、レビュー効率化のヒントを見つけてみてください!

PR-Agentについて

PR-Agent は、コードレビュー作業の効率化を目的としたAIツールの1つです。
主に以下の4つの機能を提供しています。

  • PR説明文の自動生成/describe
    • PRの背景や目的を簡潔に記述する文章を自動生成。
  • PRのレビュー機能/review
    • コードの変更点を分析し、改善点や注意点を指摘。
  • コードの改善提案/improve
    • コード品質を向上させるための具体的な提案を提供。
  • 質問への回答機能/ask
  • レビュー中に発生する疑問点をAIが即座に回答。

導入の背景

チーム内では、以下のような課題がありました。

  • タイポや些細なミス
    • 見落としたままPRを提出し、指摘されることが多い。
  • 慣れないフレームワークへの対応
    • 不慣れな言語やフレームワークの場合、レビュー作業に時間と手間がかかる。
  • レビュー品質のばらつき
    • レビュー視点や指摘の深さが担当者ごとに異なる。

前職でPR-Agentを使用していたメンバーから「非常に効果的だった」との声もあり、試験導入を決定しました。

導入方法

主に以下2パターンあります。

  • OpenAI API キーを使用しGitHubActionsを介して利用する方法
  • サブスクのPR-Agent Pro💎(現:Qodo Merge Pro)利用する方法(GitHub App利用

GitHub Actions利用とGitHub App利用の違い

GitHub Actions利用とGitHub App利用の違い
本記事では、

OpenAI API キーを使用しGitHubActionsを介して利用する方法

の導入方法を紹介していきます。

GitHub Actions利用したPR-Agentの導入手順

Part1. OpenAIからAPIキーを取得する

1-1. OpenAIプラットフォームにアクセス
OpenAI Platform

1-2. ログインまたはアカウントの作成
アカウントがある方はログイン、持っていない方はアカウントの作成を行ってください。

1-3. 支払い情報の登録
プリペイド式なので、利用前に事前にクレジットを購入する必要があります。
画面右上の歯車アイコン⚙️をクリックし、左メニューの「Billing」を選択します。
Add payment detailsボタンが表示されているかと思うので、ボタンをクリックします。
そこから画面の案内に従って入力をしてください。

1-4. クレジット購入
最低5ドル、最高が100ドルまでのクレジットを購入することができます。
クレジットは返金不可で、使用されなかった場合は購入日または発行日から 1 年後に期限切れとなるので注意してください。
Service credit terms | OpenAI


*1 自動リチャージ設定にもすることができます。
ONにしておくと、設定した水準を下回ったら、自動的にチャージしてくれます。

1-5. APIキーの発行
ここまで終わったら、APIキーの発行に移ります。
「Dashboard」タブに移動し、左メニューの「API keys」をクリックしてください。

*2以下画像と同じような表示が出た場合は、電話番号認証を行う必要があります。
電話番号認証が完了したら、
+ Create new secret key」のボタンをクリックし、APIキーの作成を行います。
後から名前は変更が可能なので、適当に名前をつけてしまってもOKです。
再表示はされないので、作成されたAPIキーは利用するまできちんと保管してください。

Part2. 生成したAPIキーをGitHubのSecretsに登録する

PR-Agentを導入したいリポジトリでSettingsタブを開きます。
そして、左メニューのSecrets and variables をクリックし、更に Actionsをクリックします。
すると以下の画面まで辿り着けるかと思います。

ここまできたら、New repository secrestsボタンを押下し、生成したAPIキーの登録を行なってください。
今回は以下のように設定します。

- Name*:OPENAI_API_KEY
- Secret *:コピー済みのAPIキーの値を貼り付ける

Part3. GitHubActionsの設定

pr-agent.yamlを作成し、以下の内容を記述します。
.github/workflows/pr-agent.yaml

name: pr-agent

on:
  pull_request:
    types: [opened, reopened, synchronize]
  issue_comment:
    types: [created, edited]

permissions:
  pull-requests: write
  issues: write
  
jobs:
  pr_agent:
    runs-on: ubuntu-latest
    name: Run PR Agent
    if: ${{ github.event.sender.type != 'Bot' }}
    steps:
      - id: pr-agent
        uses: Codium-ai/pr-agent@main
        env:
          OPENAI_KEY: ${{ secrets.OPENAI_API_KEY }} // GitHubのsecretsで登録した名前に適宜変更してください。
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          PR_DESCRIPTION.CUSTOM_LABELS: "[]"
          PUBLISH_LABELS: "false"
          PR_REVIEWER.PERSISTENT_COMMENT: "true"
          PR_CODE_SUGGESTIONS.PERSISTENT_COMMENT: "true"
          PR_ADD_DOCS.PERSISTENT_COMMENT: "true"
          PR_REVIEWER.INLINE_CODE_COMMENTS: "true"
          PR_DESCRIPTION.EXTRA_INSTRUCTIONS:      '日本語で記述してください。'
          PR_REVIEWER.EXTRA_INSTRUCTIONS:         '日本語で記述してください。'
          PR_CODE_SUGGESTIONS.EXTRA_INSTRUCTIONS: '日本語で回答してください。'

プルリクエストを作成してみて、以下のようにPRの説明文が追加されていたら、導入できています🙆‍♀️

設定項目の簡単な解説

  • PR_DESCRIPTION.CUSTOM_LABELSPUBLISH_LABELS
    • 以下のようなラベルが勝手に生成されるのが嫌だったため設定しています。
  • PERSISTENT_COMMENT
    • 「AIが生成したレビューコメントをPRのスレッド上に永続的に残すかどうか」を制御するための設定です。
      手動コマンドを用いて更新した際に過去のレビューコメントが更新のために消えてほしくなかったので、trueに設定しています。
  • EXTRA_INSTRUCTIONS
    • 追加の指示を加えるための設定項目です。
      日本語で対応して欲しかったので「日本語で記述してください」と設定しています。

デフォルトでは、現在gpt-4oのモデルを利用するように設定されていますが、 CONFIG.MODEL: gpt-4o-mini-2024-07-18と設定するなど、好きなモデルを選択することも可能です。
利用できるモデル一覧(pr-agent/pr_agent/algo/__init__.py at main · Codium-ai/pr-agent · GitHub

また、デフォルトでは、PRを作成時に/describe/review/improveの3つのコマンドが実行されるようになっているのですが、 自動実行したいものを細かくカスタマイズすることも可能です。 下記のように設定すれば、

GITHUB_ACTION.AUTO_DESCRIBE: "true"
GITHUB_ACTION.AUTO_REVIEW:   "false"
GITHUB_ACTION.AUTO_IMPROVE:  "false"

/describeの機能のみ自動実行で、それ以外の/review/improveに関しては、手動実行のみ受け付けるといった設定もすることができます。

詳しい説明及び、よりカスタマイズしたい場合は、以下をご覧ください。
github.com

実際にかかったコスト

GPT4o利用で、1プルリクエストあたり、0.1$前後でした。

PR-Agentを使ってみた感想

プルリクエストを出す際、レビュー前の段階で安心感を得られるのは大きなメリットかなと思いました。
スペルミスやコードの一貫性、さらにはセキュリティリスクまで自動的に指摘してくれるため、レビューに向けて自信を持って提出できるのは心強いです。

一方で、改善の余地も感じます。
AIとのやり取りが毎回リセットされるため、必要なコンテキストをその都度共有する手間が発生するのは少し煩雑です。
また、時として的外れな提案がなされる場面もあり、全面的に信頼するのではなく、人間の判断と組み合わせて使う必要性を感じました。

とはいえ、基本的なミスの早期発見に役立つ補助ツールとして、人間のレビューと組み合わせることで効果的に活用できると考えています。
AI技術がこれからさらに精度を上げ、進化していくことを考えると、今後の発展がとても楽しみです。

productblog.sencorp.co.jp

*1:💡自動リチャージ設定

*2:電話番号認証