Masayan tech blog.

  1. ブログ記事一覧>
  2. 【ChatGpt】CodeRabbitとGithubActionsを連携してプルリクエストのレビューと要約を自動生成する

【ChatGpt】CodeRabbitとGithubActionsを連携してプルリクエストのレビューと要約を自動生成する

公開日

CodeRabbitとは

CodeRabbit は、AI ベースのコード レビューアー

図のように、プルリクエストのレビュー、要約、リリースノートなどを自動生成してくれる。なおOpenAIgpt-3.5-turbogpt-4モデル両方対応している。どの程度細かいところまで突っ込んでもらいたいのか等もプロンプトに条件として指定できる

仕組み

GithubActions用のymlファイルを用意(仮にai-pr-reviewer.yml)。ai-pr-reviewer.ymlにプルリクエストがopenされたらActions(coderabbitai/ai-pr-reviewer@latest)が走るように設定する。Actions上では、あらかじめymlファイルで指定したシチュエーションやシナリオ、要約の形式(テーブルなのか箇条書きなのか、文字数上限等)に沿って、該当のプルリクエストに対してレビューや要約が書き込まれる、という流れ

具体的な手順

シークレットの登録

GithubActionsのシークレットにOPENAI_API_KEYを登録する

ymlファイルの作成

.github/workflows/ai-pr-reviewer.yml

name: Code Review

permissions:
  contents: read
  pull-requests: write

on:
  pull_request:
    types: [opened]
  pull_request_review_comment:
    types: [created]
  issue_comment:
    types: [created]

concurrency:
  group:
    ${{ github.repository }}-${{ github.event.number || github.head_ref ||
    github.sha }}-${{ github.workflow }}-${{ github.event_name ==
    'pull_request_review_comment' && 'pr_comment' || 'pr' }}
  cancel-in-progress: ${{ github.event_name != 'pull_request_review_comment' }}

jobs:
  review:
    runs-on: ubuntu-latest
    steps:
      - uses: coderabbitai/ai-pr-reviewer@latest
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
        with:
          debug: false
          review_simple_changes: false
          review_comment_lgtm: false
          openai_light_model: gpt-3.5-turbo
          openai_heavy_model: gpt-3.5-turbo
          openai_timeout_ms: 900000
          language: ja-JP
          system_message: |
            あなたは @coderabbitai(別名 github-actions[bot])で、OpenAIによって訓練された言語モデルです。
            些細なコードスタイルの問題や、コメント・ドキュメントの欠落についてはコメントしないでください。
          summarize: |
            次の内容でmarkdownフォーマットを使用して、最終的な回答を提供してください。

              ### 概要: 特定のファイルではなく、全体の変更に関する高レベルの要約を80語以内で。
              ### 詳細: ファイルとその要約のテーブル。スペースを節約するために、同様の変更を持つファイルを1行にまとめることが可能

          summarize_release_notes: |
            このプルリクエストのために、markdownフォーマットで簡潔なリリースノートを作成してください。
            変更は以下のような分類で箇条書きにすること:
              "New Feature", "Bug fix", "Documentation", "Refactor", "Style",
              "Test", "Chore", "Revert"
            例えば:
            ```
            - New Feature: モーダルコンポーネントを追加
            ```
            回答は50-100語以内にしてください。

あとはプルリクエストをopenして、GithubActionsが走り、冒頭で見せたようなレビューや要約が書き込まれていれば成功。

ymlファイルのポイント

onで、どのタイミングでAIに処理を実行させたいのかを指定する。

name: Code Review

# 割愛

on:
  pull_request:
    types: [opened]
  pull_request_review_comment:
    types: [created]
  issue_comment:
    types: [created]

変更の要約などの軽いタスクは(openai_light_model)はgpt-3.5-turbo に、複雑なレビューおよびコメントタスク(openai_heavy_model)についてはgpt-4に実行させるといった使い分けも可能。また、languageで日本語化できる

jobs:
  review:
    runs-on: ubuntu-latest
    steps:
      - uses: coderabbitai/ai-pr-reviewer@latest
        with:
          # 割愛
          openai_light_model: gpt-3.5-turbo
          openai_heavy_model: gpt-3.5-turbo
          language: ja-JP

system_messageで、モデルに対して全体的な前提条件などを与え、summarizeで要約について、summarize_release_notesでリリースノートについての条件を指定できる

jobs:
  review:
    runs-on: ubuntu-latest
    steps:
      - uses: coderabbitai/ai-pr-reviewer@latest
        # 割愛
          system_message: |
            あなたは @coderabbitai(別名 github-actions[bot])で、OpenAIによって訓練された言語モデルです。
            あなたの目的は、非常に経験豊富なソフトウェアエンジニアとして機能し、
            # ・・・割愛・・・
            些細なコードスタイルの問題や、コメント・ドキュメントの欠落についてはコメントしないでください。
          summarize: |
            次の内容でmarkdownフォーマットを使用して、最終的な回答を提供してください。

              ### 概要: 特定のファイルではなく、全体の変更に関する高レベルの要約を60語以内で。
              ### 詳細: ファイルとその要約のテーブル
          summarize_release_notes: |
            このプルリクエストのために、markdownフォーマットで簡潔なリリースノートを作成してください。
            変更は次のように分類し箇条書きにすること:
              "New Feature", "Bug fix", "Documentation", "Refactor", "Style",
              "Test", "Chore", "Revert"
            例えば:
            ```
            - New Feature: モーダルコンポーネントを追加
            ```

まとめ

いかがでしたでしょうか。今回は、CodeRabbitというChatGptを活用したライブラリとGithubActionsを連携してプルリクエストのレビューと要約を自動生成する導入手順や具体的な使い方について紹介しています。こちらを使用することによって、より開発効率を向上させることが可能になりますので、是非活用してみてください。