Mobile Factory Tech Blog

技術好きな方へ!モバイルファクトリーのエンジニアたちが楽しい技術話をお届けします!

AIコードレビューツール Qodo Merge(旧:PR-Agent) を使ってみた

駅奪取チームの id:kimkim0106 です。

駅奪取チームで Qodo Merge(旧:PR-Agent) を使ってみた感想の記事になります。

結論から言いますと、人間のレビューや作業をある程度代替できており、業務の効率化につながっていると感じました。

Qodo Merge とは

Qodo 社(旧:Codium-AI 社)が提供する、AI コードレビューツールです。

さまざまな LLM モデルを使ってコードレビューができるほか、GitHub や GitLab などの API を使用してプルリクエストにコメントをしてくれます。

github.com

導入背景

駅奪取チームは限られたエンジニアで開発と運用を行っており、コードレビューはチームメンバー間で分担して行っています。 しかし、チームメンバーの入れ替わりにより、コードレビューできる人が少なくなり、負荷が増大していました。

また、定期的にリードタイムを計測しているのですが、ファーストレビューの遅延によりリードタイムが伸び、ユーザへの価値提供が遅くなり始めていました。

そこで、コードレビューの負担軽減を図るために Qodo Merge を検証することになりました。

検証内容

以下の点を期待して検証を行いました。

  • リードタイムの短縮
    • コードレビュー完了までの時間を短縮することで改善を見込める
  • 品質の向上
    • コードレビューの見落とし等を防ぐ
    • 不具合や障害を減らす

ただし、人間によるレビューを代替することは考えていません。 あくまで、AI による補助的なコードレビューを事前に実施し、レビュワーの負担を軽減することが目的です。

また、モデル変更によるレビュー精度の比較を行いました。 今回検証に用いたモデルは以下の 3 つです。

  • OpenAI GPT-4o (OpenAI API)
  • Anthropic Claude 3 Haiku (Amazon Bedrock)
  • Anthropic Claude 3.5 Sonnet (Amazon Bedrock)

設定内容

プルリクエスト作成時に GitHub Actions で自動実行するように設定しました。

設定方法は公式ドキュメントの通りですが、リポジトリに IP アドレスによるアクセス制限があるため社内のサーバにて Self-hosted Runner で動かしています。

qodo-merge-docs.qodo.ai

レビュー結果を日本語で出力させるため、以下のような Extra Instructions を設定しています。

PR_REVIEWER.EXTRA_INSTRUCTIONS: "日本語で記述してください。"
PR_DESCRIPTION.EXTRA_INSTRUCTIONS: "日本語で記述してください。"
PR_CODE_SUGGESTIONS.EXTRA_INSTRUCTIONS: "日本語で記述してください。"
PR_IMPROVE_COMPONENT.EXTRA_INSTRUCTIONS: "日本語で記述してください。"

また、初期設定だと、レビューしやすさなどのラベルが付与されるのですが、チームが独自に設定しているラベルの視認性が低下するため、無効にしています。 無効にしてもプルリクエスト内で確認できるため、とくに問題はありません。

PR_REVIEWER.ENABLE_REVIEW_LABELS_SECURITY: false
PR_REVIEWER.ENABLE_REVIEW_LABELS_EFFORT: false
PR_DESCRIPTION.PUBLISH_LABELS: false

検証結果

コードレビューの負担軽減に貢献しており、導入する価値があると感じました。 一方で課題もあり、人間のコードレビューを完全に代替することは難しそうです。

以下に実際に使ってみた PR のスクショを貼っておきます。 なお、使用しているモデルは Claude 3.5 Sonnet です。

このような差分のある PR を Qodo Merge にかけてみます。

PR の差分

PR を作成すると、ユーザーが記載した内容の下に Description や Changes walkthrough を生成してくれます。 プロンプトを設定しているので日本語で表示されます。

Description と Changes walkthrough 生成後

また、PR Reviewer Guide として、レビューしやすさなどの情報を出してくれます。

PR Reviewer Guide

PR Code Suggestions では、変更の提案についてスコアを含めて行ってくれます。

PR Code Suggestions

総評

  • 良かった点
    • 一般的な内容に対する指摘がありがたい
      • 例外をキャッチしているか
      • コードの可読性の向上させる改善
    • プルリクエストの変更内容のサマリーを日本語で出してくれる
      • GitHub Copilot pull request summaries は英語しかサポートされていない
  • 悪かった点
    • たまに致命的なハルシネーションがある
      • 変更内容と逆のことをサマリーを出してくる
    • 参考にできないレビューを返すこともある
    • 差分しか見てくれないので、別モジュールまで実装を追いかけてくれない

モデルによるレビュー精度

モデルによって、レビュー精度は左右されることもわかりました。

チームメンバーによる評価が高かった順は以下のとおりです。

Claude 3.5 Sonnet > GPT-4o > Claude 3 Haiku

コスト

プルリクエスト 1 件あたりのコストを算出しました。 Claude 3.5 Sonnet は GPT-4o よりも安く、レビュー精度が高いため、コストパフォーマンスに優れていました。

モデル名 コスト(ドル/件)
GPT-4o $ 0.3
Claude 3.5 Sonnet $ 0.15
Claude 3 Haiku $ 0.1

チームメンバーへのヒアリング

チームメンバーにもヒアリングを行いました。

検証を行った順番で掲載しています。

GPT-4o

良かった点

  • プルリクエストの変更内容のサマリーを日本語で出してくれる
    • 日本語なので、読みやすい
      • GitHub Copilot にも似たような機能があるが、英語でしか出せない
    • 変更内容の説明は PR-Agent に任せ、意図のみ記載する、という形で棲み分けができて、効率が良くなった
  • 一般的な注意すべき点をレビュー・サジェストしてくれる
    • 例外をキャッチしているか
    • こう書くと行数が減る・ネストが深くならない・再利用性が高まるなど
    • レビューだけでなく、suggestion のコードを書いてくれるので助かる
  • 見る目が一つ増えた
    • 特に人間が読み落としそうな浅くて些細な箇所はありがたかった

悪かった点

  • 変更内容のサマリーに、たまに致命的なハルシネーションがあるので、100%信頼はできなさそう
    • 変更内容と逆のことを出してきたことがあった
  • 一般的な内容に対する指摘はありがたい
    • 誰向けのどういった機能か、といった文脈で不要と判断した実装はいろいろある
    • けど、それは本当に不要か?といったことを考えさせてくれる
  • 参考にできない指摘もちらほらある
    • 間違っている理由を考えることで見える視点もあるだろうから、それはそれでよいけどノイズにはなる
    • どうしても 2, 3 個は suggest したいのか、無理くりなものもあるような
  • 差分しか見てくれないので、別モジュールまで実装を追いかけてくれない
    • 「正しく実装されているか確認してください」みたいなレビューしかしてくれない
    • 追いかけて返り値とかまでチェックしてくれるとうれしかったが、そこまでは厳しそう

Claude 3 Haiku

良かった点

  • とくになし

悪かった点

  • 「Respond in Japanese」とか「日本語で記述してください。」をプロンプトに入れても日本語で答えてくれない
  • 冗長になる書き方を提案したり、使わない変数をテンプレートに渡す提案をしたり、あまり有益でない提案が多かった
  • そもそも差分すら認識できておらず、レビューとして成立しない

Claude 3.5 Sonnet

良かった点

  • GPT-4o に比べ、ちょうどいい粒度の description を生成してくれる
    • ハルシネーションも少ないので、概要の手書きを PR-Agent に置き換えることができ、時短になった
  • 誤った提案は他のモデルよりは少ない印象
    • typo を指摘してくれて助かった
    • description が比較的正確だと思った

悪かった点

  • あまりない
  • 存在しないコードを作ってそれに対してレビューをする?ことがあって混乱した

ネクストアクション

Qodo Merge 導入によって、業務効率化の効果が出ているかを検証したいと思っています。 直近のリードタイムは改善して来ているのですが、Qodo Merge 導入によるものなのかはまだ明確ではありません。

また、さらに新しいモデルに入れ替えて検証したいと思っています。 LLM の評価指標には色々とありますが、アップグレード後の Claude 3.5 Sonnet や OpenAI o1-mini あたりが、現在使っている Claude 3.5 Sonnet よりも高かったので、次はこれらを試してみたいです。


モバファクでは中途採用・新卒採用ともに絶賛募集中です。
会社の情報については、モバファクブログでも発信しています。
技術好きな方、モバファクにご興味をお持ちの方は、ぜひご応募ください!
・モバファクブログ:https://corpcomn.mobilefactory.jp/
・採用サイト:https://recruit.mobilefactory.jp/