Cntlog

GitHubのプルリクエストでAIを使ったコードレビュー環境の作り方(PR Agent編)

運用

投稿日

以前からAI活用を積極的に取り入れており、最近はずっと気になっていたAIによるプルリクエストのレビュー環境を構築してみました。

一度作ってしまうと、他リポジトリにも転用はしやすくレビューの効果も非常高いと感じています。

無料で構築するのが理想でしたが、従量課金で利用でき使うタイミングも自分でコントロールできうようにしたので使い勝手もよく今後の開発で必ず導入したいくらいには満足しています。

本記事では、AIコードレビューの「PR Agent」をGitHubを通じて使う方法を紹介します。

AIコードレビューとはどのようなものを指すか

AIによるコードレビューと一言で言っても、色々なパターンがあります。

本記事でAIによるコードレビューでできることは以下になります。

  • プルリクエストしたコードの詳細を概要にまとめてくれる
  • プルリクエストしたコードで改善点を指摘、提案をしてくれる

AIコードレビューのサービス紹介

本記事では「PR Agent」を利用していますが、調べてみるといくつかコードレビューをするためのサービスがありました紹介します。

  • CodeRabbit
    • 日本では結構記事を見るので人気なサービスな気がする
  • CR.GPT
    • 一番導入が簡単そう
  • Copilot for Pull Requests
    • 2024年5月現在はエンタープライズ版を契約してる人のみが契約してくれている

PR Agentを選んだ理由

導入が簡単そうなのと実行のトリガーがプルリクエストを作ったときなどに限らず、プルリクエスト内で特定のコメントを出すことで実行できる点でした。

プルリクエストの作成や編集をトリガーにしているサービスはいくつか見ていたのですが、これだと毎回トリガーが走ってしまいレビューを求めないプルリクエストでも課金されてしまう懸念がありそれを避けれそうと期待していたのですが、ちゃんと自分の任意のタイミングで実行できました。

ちなみに、レビュー・提案と変更概要をまとめるを一度に走らせた場合一度で20円くらいでした。

おそらく変更したコードの量で変わると思いますので、あくまでこのくらいの価格帯くらいで思ってもらえたら。

実装のしかた

PR Agentにレビューを指せるにはGitHubActionを使います。

つまりyamlを設置してSecretsキーを設定するだけです。

慣れたら10分もかからないです。Secretsキーの取得のほうが面倒です…

手順としては以下になります。

  • PR AgentをGitHubActionsで利用できるようにする
  • GITHUB_TOKENを取得する
  • OPENAI_KEYを取得してSecrets に設定する

PR AgentをGitHubActionsで利用できるようにする

GitHubActionsを利用できるようにするにはリポジトリの.github/workflows/以下にyamlを設置するだけです。

今回はpr-agent.yaml という名前で設置します。

yamlの内容は以下です。

ame: PR-Agent Command Trigger

on:
  workflow_dispatch:
  
  issue_comment:
    types: [created, edited]

permissions:
  pull-requests: write
  issues: write

jobs:
  handle_commands_pr_agent_job:
    runs-on: ubuntu-latest
    if: github.event_name == 'issue_comment' && github.event.sender.type != 'Bot'
    steps:
      - name: PR Agent action step
        id: pragent
        uses: Codium-ai/pr-agent@main
      # 概要を記述する
      - name: Handle '/describe' command
        if: contains(github.event.comment.body, '/describe')
        uses: Codium-ai/pr-agent@main
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          OPENAI_KEY: ${{ secrets.OPENAI_KEY }}
          GITHUB_ACTION_CONFIG.AUTO_DESCRIBE: true
          PR_DESCRIPTION.EXTRA_INSTRUCTIONS: "answer in Japanese"
      # レビューを行う
      - name: Handle '/review' command
        if: contains(github.event.comment.body, '/review')
        uses: Codium-ai/pr-agent@main
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          OPENAI_KEY: ${{ secrets.OPENAI_KEY }}
          GITHUB_ACTION_CONFIG.AUTO_REVIEW: true
          PR_REVIEWER.EXTRA_INSTRUCTIONS: "answer in Japanese"
      # コードの改善を行う
      - name: Handle '/improve' command
        if: contains(github.event.comment.body, '/improve')
        uses: Codium-ai/pr-agent@main
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          OPENAI_KEY: ${{ secrets.OPENAI_KEY }}
          GITHUB_ACTION_CONFIG.AUTO_IMPROVE: true
          PR_CODE_SUGGESTIONS.EXTRA_INSTRUCTIONS: "answer in Japanese"

上のコードでは、プルリクエストのコメントに以下のコマンドを貼り付けると実行できるようになっています。

  • /describe プルリクエストの概要をまとめる
  • /review プルリクエストのコードレビューをする
  • /improve プルリクエスト内のコードの提案をする

なお、プロンプトにanswer in Japanese と指示をして日本で出力されるようにしています。

これが設置し終わったらmainブランチ or masterブランチに取り込んでください。

なお、プルリクエストを作ったのをトリガーにしたい場合は公式がサンプルのyamlを公開しているのでこちらが参考になります。

GITHUB_TOKENを取得する

PR Agentがプルリクのレビューを記載するために必要は write 権限をトークンとして取得する必要があります。

Fine-grained personal access tokensを設定して権限を用意します

権限はpermissionsの以下のものを与えてください。

  • pull-requests: write
  • issues: write

OPENAI_KEYを取得してSecrets に設定する

ChatGPTで有名なOpenAIのAPI Keyを取得します。

アカウントを作成後 https://platform.openai.com/api-keys からAPIKeyを発行できます。

API Keyを取得したらAIのコードレビューを受けたいリポジトリのSettingsに移動して、API Keyを貼り付けてください。

実行するか検証する

試しになにかプルリクエストを作って/describe とコメントをすれば、GitHubActionsが動作をしてプルリクエストの概要をまとめてくれます。

最後に

私の場合はチームでの開発ではなく、個人の開発がメインで利用していますが指摘内容がいい感じでまるで中堅エンジニアからレビューを受けているような気持ちで開発ができます。

仕事で使うわけでもないので、自分の任意のタイミングで課金させれるのでコストを無駄と感じることもありません。

AIは完璧を期待するものではないので自分の判断を軽視してはいけませんがそれでも納得感のあるレビューをしてもらえるので知らないうちに自分がエンジニアとしてのレベルも上がるのを期待してしまいます。