Sansan Tech Blog

Sansanのものづくりを支えるメンバーの技術やデザイン、プロダクトマネジメントの情報を発信

Vol. 05【Qodo Merge(旧PR-Agent)】Bill OneでのAIコードレビューの取り組みと得られた結果

こんにちは!技術本部 Bill One Engineering Unitの中垣です。
今年も残すところわずかですね。ふと今年の抱負を達成できたのか考えてみたところ、今年の抱負がなんだったか忘れてしまったことに気づきました。

この記事は、Bill One 開発 Unit ブログリレー2024の第5弾&Sansan Advent Calendar 2024の11日目です。

Bill Oneでは2024年9月から、コードレビューの効率化・品質の向上のためにAI駆動のコードレビューツール、Qodo Merge(旧PR-Agent)を導入しています。
そこで本記事ではBill OneでのQodo Mergeを利用した取り組み、そしてどのような効果が得られているかについて紹介します。

Qodo Mergeとは

www.qodo.ai

Qodo Mergeとは、Qodo(旧Codium)によって開発されているOSSで、 AIを利用してソフトウェア開発プロセスを効率化するためのツールです。OpenAIのAPIキーを利用する従量課金制で、言語モデルの選択が可能であることも特徴の一つです。

プルリクエストの作成を便利にしたりレビューの自動化を行ったりするためのさまざまな機能が提供されており、GitHub上へのインラインコメントに対応しています。主な機能を紹介します。

PR Doc

プルリクエストの説明を作成します。*1

レビュワーは変更の内容を把握するのに活用できますし、レビュイーはDescriptionを書く労力を減らせます。

PR Reviewer Guide

プルリクエストの変更内容に対して、レビュー観点の提示が行われます。*2

レビュワーはAIの提示した観点を元にレビューをできますし、レビュイーは人によるレビューの前にAIがレビューの観点や設計が怪しいところを指摘してくれるのでブラッシュアップするのに活用できます。

PR Code Suggestions

プルリクエストの改善点がカテゴリごとに分類され、重要度の高い順に提示されます。

レビュワーはAIの指摘を元にコードの改善点をレビューをできますし、レビュイーは人によるレビューの前にAIがレビュー指摘をしてくれるのでブラッシュアップするのに活用できます。

これらの機能はChrome拡張機能を利用することで任意のタイミングで実行することもできます。

導入方法や詳しい機能についてはこちらに記載されています。

Bill OneでAIコードレビューを定着させるために取り組んだこと

専門のチームを設立した

Bill OneがAIコードレビューに取り組んだきっかけは、生産性向上の施策としてAIでのコードレビューを使ってみるのはどうかという意見が挙がったことでした。いくつかのAIコードレビューツールを比較したところ機能面に大きな差異はなく、価格面でCodo Mergeを導入してみることにしました。

一部のチームで2カ月間ほどトライアル導入を行い、生産性の向上が見込めることが判明したため、組織的に導入することを決定しました。

Bill One にはギルドというチームを横断して特定技術領域の改善やスキルアップをしていく仕組みがあります。そこで AIでのコードレビューを専門としたギルドを設立し、情報収集や、AIコードレビューの推進を通して開発組織のレビュープロセスの効率化と品質向上を企図しています。

Codo Mergeを導入してからも、開発組織でワークさせるためには、運用フローの策定・使い勝手の向上・活用のサポートなどさまざまなことが必要です。そのため専門のチームを作ることは有効的かと思います。

Qodo Mergeの使い勝手の向上

導入してから2カ月程度経った際に組織に対して利用状況のアンケートをとったところ、コメントの見やすさに改善の余地があることが分かりました。

さらに深ぼると、Qodo Mergeが自動で行うコメント量が多くてノイズになってしまっていたり、コメントの内容が冗長であったりすることが原因でした。

Qodo Mergeでは、各機能の実行条件やプロンプトを設定するファイル「.pr_agent.toml」を作成しリポジトリに追加することでカスタマイズ可能です。Bill Oneのリポジトリでは以下のような設定を追加しています。

pushのたびにコメントを発火しない設定

コメントの発火タイミングをカスタマイズすることで、コメントの量の調整が可能です。

final_update_message=false 
コメントの形式を指定する設定

コメントの形式を指定することで、冗長な表現を避けて読みやすいコメントを出力させることが可能です。

extra_instructions="""\
- 各評価観点に対して、問題点があれば以下の形式で指摘してください。
- **評価観点: 問題点の説明 (日本語 / 英語)**
- **例:**
  - Design: ドメインモデルが貧血になっている (Domain model is anemic)
"""
日本語と英語を併記する設定

Bill Oneの開発組織にはグローバルチームなど英語話者がいるため、日本語と英語を併記するようにもしています。

extra_instructions="""\
Descriptionの説明は日本語と英語を併記してください。
"""


ただ、挙動が安定しなかったり部分的に日本語にならなかったりなど、ものによってはチューニングの難易度が高いです。

社内での啓蒙活動

利用状況のアンケートから、活用方法のトレーニングやサポートが求められていることも分かりました。

そこでQodo Mergeの概要や使い方に関する資料の作成や勉強会を実施して、組織での定着を図ってきました。まだまだ全てのエンジニアがAIでのレビューを駆使している状況にはなっていないので、引き続き取り組んでいく必要がありそうです。

他には他部署への知見の共有や導入のサポート等も行っています。

AIコードレビューをさらに活用するためにこれから取り組みたいこと

ベストプラクティスの策定

Qodo MergeはGItHub Wikiを学習に使えるので、コーディングの規約やベストプラクティスをWikiに書いておくことで、開発組織のコーディング規約やベストプラクティスに従ったレビューをさせることが可能です。

開発組織にとってベストプラクティスがあれば嬉しいものですが、それらが自動でレビューされるとなるとさらに大きい価値を生むことになります。なのでベストプラクティスの策定とAIでのコードレビューは非常に相性が良いと思います。

Code Genの利用促進

www.qodo.ai

Qodo(旧Codium)はQodo Genという開発支援ツールも提供しています。JetBrainsやVSCodeなどのIDE上で、チャット形式でコードの分析・改善を行ったり、実装やテストの生成を行ったりできます。

コード自動補完もできますが、現時点では copilot の方が優れていそうです。

Qodo Merge はプルリクエストの差分のみでレビューを行うため、差分がないファイルのコンテキストを把握ができないのが欠点として挙げられます。一方で Qodo Gen ではファイルをコンテキスト指定できるので、実装に関連したファイルをまるっと指定してレビュー依頼やコード・テストの生成ができます。

そのため Qodo Gen を活用することで、コンテキストを考慮したより精度の高いレビュー依頼を実現できます。

Bill Oneでは Qodo Merge だけでなく、Qodo Genを利用することも推進していきたいと考えています。

効果を測定してみる

こういったツールはそれなりにお金がかかるので、効果を測定することも必要ですよね。💸

ということで、Qodo Mergeを導入して1.5カ月が経過した時点で実装に着手してからプルリクエストをマージするまでの時間を定量的に分析し、導入前の2.5カ月と比較してみました。

実際の数値はこんな感じです。*3

統計的な検証(t検定)を行った結果、多くの指標で有意な改善(p < 0.05)が確認されました。特にコミットからオープンまでの時間とアプループからマージまでの時間は顕著に見られていますね。

もちろんこれらのサイクルタイムはさまざまな要因によって変わってくるので一概にCode Mergeによる効果とはいえないですが、導入後の方が生産性が向上していることが分かりました。

まとめ

定量的な分析結果やアンケート等をもとにした定性的な評価としても、AIでのコードレビューはコード品質の向上やレビュー効率化に貢献すると言えます。

しかし、指摘内容の精度やコメントの見やすさなどまだまだ改善の余地があり、開発組織で利用を推進するためには活用方法のトレーニングやサポートを手厚く行う必要があります。

Qodo Merge以外にも、Gemini Code AssistGitHub Copilot code review などさまざまなAIコードレビューのサービスがリリースされ、盛り上がりを感じます。

Bill OneではこれからもAIでのコードレビューに向き合っていきます。

*1:一部の情報をマスキングしています。

*2:一部の情報をマスキングしています。

*3:Findy Team+ で計測。リリース作業のためのプルリクエストやrevertコミットを積んだだけのプルリクエストなどAIによるレビューを実施していないものは分析から除外

© Sansan, Inc.