Pull requestのタイトルや説明文を書いている時、「これ絶対AIでできるよな」と感じたことがある開発者は少なくないと思います。
もちろん変更の経緯や背景など、コードの差分からは読み取れない情報もありますが、コードの差分からわかることはAIが書いてくれるといいですよね。
この願いを叶えてくれるのがCodiumAIが提供しているPR-Agentです。GitHub Actionで実行でき、OpenAIはもちろんAzure OpenAIやAmazon Bedrockも使えます。
PR-Agentはすでにいろいろなところで取り上げられています*1 *2 *3ので、このブログ記事では、これまでにあまり紹介されていないPR-AgentでLLMとしてAzure OpenAIで使う方法と、使ってみた感想を紹介します。
どうしてPR-Agentを使うのか
コードレビューをできるAIエージェントはいくつかあります。今回は、以下の3つの理由で、CodiumAIが提供している、PR-Agentを選択しました。
- 実行環境にGitHub Actionsがあり、アカウント作成が不要
- データのプライバシーが明記されている
- Azure OpenAIを使うことができる
また、Pull requestの要約であれば、GitHub のCopilot pull requestでも可能ですが、PR-Agentは要約に加えて、以下のような機能があり、それらを試してみたい気持ちもありPR-Agentを使いました。
機能 | 説明 |
---|---|
DESCRIBE | PRの説明(タイトル、種類、概要、コードの解説、ラベル)を生成します |
REVIEW | PRについて調整可能なフィードバック、可能性のある問題、セキュリティ上の懸念、レビュー作業量などを提供します |
IMPROVE | PRを改善するためのコード提案を行います |
UPDATE CHANGELOG | 変更ログを自動的に更新します |
ADD DOCS 💎 | PRで変更されたメソッド/関数/クラスのドキュメントを生成します |
TEST 💎 | PRのコード変更に基づいて、特定のコンポーネントの単体テストを生成します |
IMPROVE COMPONENT 💎 | PRで変更された特定のコンポーネントに対するコード提案を行います |
ANALYZE 💎 | PRで変更されたコンポーネントを特定し、各コンポーネントに対してテスト、ドキュメント、コード提案を対話形式で生成できるようにします |
ASK | PRについての自由記述形式の質問に答えます |
GENERATE CUSTOM LABELS 💎 | ユーザーが定義した特定のガイドラインに基づいて、PRのカスタムラベルを生成します |
CI FEEDBACK 💎 | 失敗したCIジョブに対するフィードバックと分析を生成します |
CUSTOM SUGGESTIONS 💎 | ユーザーが定義した特定のガイドラインに基づいてのみ、PRコードを改善するためのカスタム提案を生成します |
SIMILAR ISSUE | 自動的に類似のイシューを検索して提示します |
💎がついてるものは、PR-Agent ProというのPR-Agentのhostingサービスを利用し月額利用料を支払うことで利用できます。 また、SIMILAR ISSUE機能を使うにはVectorDBとしてPineconeかLanceDBを準備する必要があります。
GitHub ActionでPR-Agentを実行する
PR-AgentはGitHubやGitLabなどのGitプロバイダーに導入することができます*4。今回は、GitHubに導入する方法を紹介します。また、GitHubでの実行方法には「GitHub Action」と「GitHub App」が用意されており、今回はGitHub Actionを利用します。GitHub Appを使う場合は、GitHub Appの作成とDocker Repositoryの準備が必要ですが、より細かい設定が可能です。
GitHub ActionでPR-Agentを実行する方法はドキュメントにも記載されている*5ので、ここでは、LLMをAzure OpenAIに変更し、表示言語を日本語にしたワークフローを紹介します。
on: pull_request: types: [opened, reopened, ready_for_review] issue_comment: jobs: pr_agent_job: if: ${{ github.event.sender.type != 'Bot' }} runs-on: ubuntu-latest permissions: issues: write pull-requests: write contents: write name: Run pr agent on every pull request, respond to user comments steps: - name: PR Agent action step id: pragent uses: Codium-ai/pr-agent@1701eb5b0757cac9a2342d15cfcd8fc2a2d98e8b env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} AZURE_OPENAI_API_KEY: ${{ secrets.OPENAI_KEY }} OPENAI_API_TYPE: "azure" OPENAI_API_VERSION: "2024-03-01-preview" OPENAI.API_BASE: "https://<Azure OpenAIのリソース名>.openai.azure.com" OPENAI.DEPLOYMENT_ID: "Azure OpenAIのデプロイID" PR_DESCRIPTION.EXTRA_INSTRUCTIONS: "answer in Japanese" PR_REVIEWER.EXTRA_INSTRUCTIONS: "answer in Japanese" PR_CODE_SUGGESTIONS.EXTRA_INSTRUCTIONS: "answer in Japanese"
環境変数の命名規則が少し特殊で.
が使われていますが、そういうものだと思って設定してください。
また、この設定はLLMのベースモデルにGPT-4.0を使っています。GPT-3.5を利用する場合は、もう少し設定が必要です。
Azure OpenAIを使うための設定
LLMにOpenAIを使う場合は、環境変数OPENAI_API_KEY
を指定するだけで良いのですが、Azure OpenAIを使う場合は、OPENAI_API_TYPE
、OPENAI_API_VERSION
、OPENAI.API_BASE
、OPENAI.DEPLOYMENT_ID
を指定します。
OPENAI_API_TYPE
は固定値azure
で良いですが、ほかの環境変数はAzureのポータルから取得する必要があります。取得内容が正しいかは以下のスクリプトで確認できます。
AZURE_OPENAI_API_KEY="Azure OpenAIのAPIキー" OPENAI_API_VERSION="2024-03-01-preview" OPENAI.API_BASE="https://<Azure OpenAIのリソース名>.openai.azure.com" OPENAI.DEPLOYMENT_ID="Azure OpenAIのデプロイID" curl $OPENAI.API_BASE/openai/deployments/$OPENAI.DEPLOYMENT_ID/completions?api-version=$OPENAI_API_VERSION \ -H "Content-Type: application/json" \ -H "api-key: $AZURE_OPENAI_API_KEY" \ -d "{\"prompt\": \"Once upon a time\"}"
表示言語を日本語にするための設定
また、PR-Agentの表示言語を日本語にするために、PR_DESCRIPTION.EXTRA_INSTRUCTIONS
、PR_REVIEWER.EXTRA_INSTRUCTIONS
、PR_CODE_SUGGESTIONS.EXTRA_INSTRUCTIONS
を指定しています。
例えばPR_DESCRIPTION.EXTRA_INSTRUCTIONS
にanswer in Japanese
と指定すると、以下のようなプロンプトになります。
You are PR-Reviewer, a language model designed to review a Git Pull Request (PR). Your task is to provide a full description for the PR content - files walkthrough, title, type, and description. - Focus on the new PR code (lines starting with '+'). - Keep in mind that the 'Previous title', 'Previous description' and 'Commit messages' sections may be partial, simplistic, non-informative or out of date. Hence, compare them to the PR diff code, and use them only as a reference. - The generated title and description should prioritize the most significant changes. - If needed, each YAML output should be in block scalar indicator ('|-') - When quoting variables or names from the code, use backticks (`) instead of single quote ('). Extra instructions from the user: ===== answer in Japanese ===== The output must be a YAML object equivalent to type $PRDescription, according to the following Pydantic definitions: ===== class PRType(str, Enum): bug_fix = "Bug fix" tests = "Tests" enhancement = "Enhancement" documentation = "Documentation" other = "Other" # 以下省略 # 全文は # https://github.com/Codium-ai/pr-agent/blob/e429c5d012b05523e9a2bf53274b5ffd946ddae7/pr_agent/settings/pr_description_prompts.toml # をご確認ください
PR-Agentの出力内容の紹介
ワークフローを作成するエディタの技術検証に作成したプロトタイプのPull requestを対象にPR-Agentを実行した結果を紹介します。
Describe
Pull requestをOpenして1分ほど経つと以下のように説明文が生成されます。私がPull request作成時に入力した内容これまではブラウザで擬似的にワークフローを実行していましたが〜
も保持されています。
Review
説明文が生成されてからさらに1分ほど経つと、以下のようにレビューが生成されます。レビューにかかる労力を5段階で示すEstimated effort to review
が良いですね。
Possible issues
も適切な内容だと思います(技術検証用のプロトタイプなので意図的にそうしているのですが、実際のプロダクト開発でこういう指摘がされた時は対応したいですね)。
Ask
このプロトタイプでは社内での利用事例が少ないDrizzleというORMを使ったので、その紹介を兼ねてask
コマンドを実行しました。
1分ほど待つと以下のようなコメントが追加されました。
Drizzleの紹介と利用用途を簡潔に書いてくれていていいですね。自分で書くとついつい長くなって個人的に書いたブログ記事とか紹介してしまうので、これくらいで書いてくれるのは助かります。
まとめ
PR-Agentは、GitHubワークフローでAIを活用したコードレビューを実現する優れたツールです。GitHub Actionsで実行できるため、導入が簡単です。さらに、Azure OpenAIをLLMとして利用することで、セキュリティとプライバシーの面でも安心して利用できます。
この記事ではPR-Agentが提供する主要機能である「Describe」、「Review」、「Ask」を試しました。いずれの機能も適切な出力を生成しており、開発チームのコードレビューの効率化に大いに役立つと感じました。特に「Review」機能の「Possible issues」や「Estimated effort to review」は、レビューの質と一貫性を高める上で非常に有用でした。
AIを活用したコードレビューの導入を検討している開発チームには、ぜひPR-Agentを試してみてほしいと思います。
*1:PR-Agent を使って Pull Request をAIレビューしてみた。(日本語対応もしてみた)
*2:PR-Agent を使用してプルリクを AI で自動レビューする
*3:【ChatGPT + PR Agent + GitHub Actions】 プルリクの AI コードレビューを10分で自動化し、レビューのルールを詳細にカスタマイズする
*4:詳しくはこちらをご確認ください。https://pr-agent-docs.codium.ai/installation/#self-hosted-pr-agent
*5:https://pr-agent-docs.codium.ai/installation/github/#run-as-a-github-action