13
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

セゾン情報システムズAdvent Calendar 2023

Day 18

OpenAI を使ってプルリクエストのレビューを自動化する

Last updated at Posted at 2023-12-17

この記事は、セゾン情報システムズ Advent Calendar 2023 18日目の記事です。

はじめに

本記事では、OpenAI を使ってプルリクエストのレビューを自動化する方法を紹介していきます。

PR-Agent

レビューの自動化には PR-Agent という、Codium AI によってオープンソースで開発されている ChatGPT を使ったプルリクエストを便利にするための AI ツールを利用します。プルリクエストに関する様々な作業を自動化することができ、現時点で以下のような機能を持っています。

  • プルリクエストの説明自動生成
  • コードレビュー
  • コードの提案
  • コードコメントの自動生成
  • CHANGELOG の自動生成
  • カスタムラベルの生成

PR-Agent の使用方法

ローカルでの実行、リモートリポジトリ上での実行どちらも可能です。
実行に必要なものは Open AI の API キーのみなので CI に簡単に導入できます。
今回は Github Actions を利用して実行していきます。
詳しい使い方は こちら を参照してみてください。

設定

まず .github/workflows/pr-agent.yaml に以下のようなワークフローを作成します。

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_KEY }}
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          PR_REVIEWER.EXTRA_INSTRUCTIONS: 'Please use Japanese in descriptions.'
          PR_DESCRIPTION.EXTRA_INSTRUCTIONS: 'Please use Japanese in descriptions. Titles should have prefix of commitlint pattern such as `feat:`, `fix:`, `perf:`, `refactor:`, `test:`, `chore:`, `ci:`, `docs:` etc'

PR-Agent は GitHub Actions のワークフローに環境変数を指定することでレビュー内容を日本語にしたり、プルリクエストのタイトルを commitlint 形式にしたりできます。env セクションに環境変数を追加することで設定値を調整できるようになっています。
各種機能の詳しい設定は こちら をご確認ください。

次に GitHub リポジトリの Actions Secret に OPENAI_KEY を追加し、 OpenAI のAPIキーを登録します。
Settings > Secrets and variables > Actions > New repository secret > Add secret
image.png
設定は以上です。それでは PR-Agent 様にレビューしていただきましょう。

以下のような雑なプルリクエストを作っていきます。
image.png

変更内容はこんな感じです。
変更の意図としては、引用符の間に埋め込まれたユーザー提供のデータ自体に予期しないデータが含まれていないことをチェックするようにします。
image.png

プルリクエストを作成すると、すぐに以下のようなレビューを実施してくれます。
image.png
プルリクエストの分析を行ってくれるとともに、フィードバックとして以下2点のコメントをいただきました。

  1. テストを追加しろ
  2. エラー原因を握りつぶさずに呼び元にちゃんとエラーを返せ

至極全うでごもっともなご意見です。
このレベルでファーストレビューしてもらえると、その後のレビューは捗るのではないでしょうか。

次に雑に作ったプルリクエストなので説明が空っぽ、タイトルも雑なので、タイトルと説明を生成してもらいます。
image.png

なんということでしょう、タイトルと説明を丁寧に記載してくれただけでなくラベルも設定してくれています。
image.png

Markers template という機能を使うことで、オリジナルの説明に PR-Agent が自動生成したコンテンツを簡単に統合できます。
プルリクエストをテンプレート化している場合には、以下のキーワードをテンプレートに入れておくと自動で置き換えてくれます。

  • pr_agent:summary
  • pr_agent:walkthrough

Markers template を有効にするための設定

        env:
          PR_DESCRIPTION.USE_DESCRIPTION_MARKERS: 'true'

最後に

レビュー精度については、まだあまり高くないかも知れませんが、セルフチェックやドラフト段階でのレビューくらいには使えそうです。
また、サマライズ機能はレビュー負荷の低減に繋がりそうでいい感じです。レビュイーは、プルリクエストの詳細を書くことに時間を取られずにすみ、効率的に開発を進められます。レビュアーはどのファイルで、どういう変更があったのかの概要を把握してからレビューに入れるので、レビューの勘所も掴みやすくなっております。

先日開催された GitHub Universe 2023 の中で、GitHub Copilotの将来像となる「Copilot Workspace」が発表され話題になっています。
人間が自然言語で書いた Issue を起点に Copilot が Issue に対応した仕様を書き、実装計画を示し、それに沿ってコーディングや既存のコードの修正を行い、ビルドをしてエラーがあれば修正まで行うという、コーディングのほとんど全ての工程をCopilotが自動的に実行してくれる、というもののようです。
使えるようになったら、使用感などレポートしていきたいと思います。

13
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?