はじめに
コードレビュー業務の改善は、多くの組織で共通する課題ではないでしょうか。
今回は、弊社のGitHub OrganizationにおいてPull Request(PR)自動レビューのツールを導入した事例について、その導入方法や検討プロセスを共有します。
PR自動レビュー導入の背景と目的
近年、生成AIの発展により、開発効率を向上させるさまざまなツールやサービスが登場しています。
弊社でも、ChatGPTやGitHub Copilotをはじめとした生成AIを会社負担で利用できる体制を整え、開発効率の向上を目指してきました。
しかし、これまでは利用のタイミングや方法が個人の裁量に委ねられており、活用度合いに差が生じていました。
そこで、開発におけるAI活用の最低レベルを底上げし、効率化を図るために、PR自動レビューの導入を検討しました。
調査したPR自動レビューツール
以下のツールについて調査を行いました:
1. PR Agent
OSS(オープンソースソフトウェア)として提供されています。生成AIのプロンプトを基にGitHubなどのソースコード管理システムのPRにコメントを投稿する仕組みです。
費用はアプリケーションのホスティングや生成AIの利用料金のみで、利用頻度を調整すれば手軽に導入できます。
2. CodeRabbit
SaaS型のサービスで、開発者数に応じた月額料金が発生します。
3. Github Copilot code review
2024年12月現在、パブリックプレビュー段階です。
エディタ上で利用可能なGitHub Copilotが非常に強力なツールであることを考えると、正式リリース後の活用が期待されます。
PR Agentを選定した理由
選定にあたり、導入コストの低さを重視しました。まずはPR自動レビューの効果を体感し、具体的な効率向上を測ることを目的としました。
PR Agentを利用した場合のコストは概算値ですが、OpenAIのデフォルト設定(gpt-4-turboとgpt-4oの併用)による生成AIの利用料金に限ると、弊社環境では1件のPRあたり数円から数十円程度で運用できています。
また、弊社ではGoogle Cloudをインフラ基盤として活用し、OpenAIを含む生成AIサービスも既に利用しています。そのため、新たな契約手続きを省略し、スムーズに試験導入を進められた点が選定の決め手となりました。
導入にあたり考慮したこと
PR Agentは、以下の2つの方法で動作可能です:
1. GitHub Actions
リポジトリにYAMLファイルをコミットするだけで導入可能。ただし、リポジトリごとに設定が必要です。
2. GitHub Apps + Webサーバー
Webサーバーを構築し、GitHub Appsとして動作させることで、組織全体のリポジトリで一括管理が可能です。
弊社ではエンジニアが十数人在籍し、100以上のリポジトリを管理しているため、GitHub Apps + Webサーバー方式を採用しました。
さらに、デフォルト設定ではPRのオープン時にレビューが実行されますが、業務上必要ないPRや意図しないタイミングでの動作を避けるため、特定のコメントコマンドをトリガーとして動作するようカスタマイズしました。これにより、不必要な実行回数を抑え、コストを最適化しています。
導入後の感想
PR Agentは、ほぼデフォルト設定のままでも十分に動作するため、導入が非常に簡単でした。カスタマイズとしては、日本語でのフィードバックを指定する程度でした。
レビュー内容については、PRの内容や分野によって有効性が異なる印象です。
例えば、自分が経験の浅い領域(例:Reactのコード)では有用なフィードバックが得られる一方、馴染みのある技術やプロダクトでは的外れな指摘も散見されました。
以下の例では、pydanticモジュールの利用方法に関する改善点が提示されましたが、異なるバージョンのリファレンスに基づいた内容である可能性があります。
PR自動レビューのプロンプトがPRのdiffに限定されるため、コンテキスト不足が原因と思われます。
導入して感じたのは、自動レビューのフィードバックに対して真摯に対応する姿勢の重要性です。自動レビューを無視すると、次第に形骸化し、期待した効果が得られなくなる可能性があります。
たとえフィードバックが的外れであったり、対応不要だと判断した場合でも、その理由をコメントとして記録しておくことで、後から人間のレビュアーが内容を確認しやすくなり、レビュー全体の効率が向上するでしょう。
さらに、的外れなフィードバックを減らすためには、プロンプトを定期的に見直し、改善を繰り返す仕組みを整えることが効果的だと考えられます。
終わりに
PR Agentの導入を通じて、メンバーが本質的なレビューに集中できる環境の構築を目指しました。
今回の記事では導入背景や運用の工夫を中心にご紹介しましたが、実際のシステム構築については、今後別の記事で詳しく解説する予定です。
引き続き、明日以降のアドベントカレンダーの記事もぜひお楽しみに!