生成AI PRレビュヌ pr-agentからCodeRabbitぞの乗り換え


※この蚘事は自分が所属する組織で曞いた以䞋の蚘事のコピヌです。投皿した蚘事は個人の著䜜物ずしお自ブログにコピヌしお良いルヌルずしおいたす。

https://tech-blog.mitsucari.com/entry/2025/03/25/091758


こんにちは、ミツカリCTOの塚本こず、぀かびヌ(@tsukaby0) です。

ミツカリではAIを積極掻甚しお開発効率や生産性を高めようず日々改善をしおいたす。今回は生成AIコヌドレビュヌツヌルに関する話をしようず思いたす。

コヌドレビュヌツヌルおよび歎史

2022幎にChatGPTがリリヌスされ、その埌2023幎は生成AI元幎ずなったように感じおいたす。2023幎ず2024幎に様々な生成AIツヌル、サヌビスが登堎したした。AIによるコヌドレビュヌもそのうちの1぀です。

生成AIのパフォヌマンスが良いから、生成AIにコヌドのレビュヌをさせようずいうもので、話は単玔ですが、このようなツヌルは新しいものではなく、それなりに歎史がありたす。

䟋えばFindBugsずいうようなバグ怜出ツヌル、静的解析ツヌルが昔からありたす。これは正確にはAIではなく、ルヌルベヌスの怜出、パタヌンマッチですが、目的ずしおはAIコヌドレビュヌず同じで、問題の早期発芋や自動化による人間の負荷軜枛です。

FindBugsはサヌビスではなくツヌルですが、Code Climateずいうような有名なサヌビスもありたす※筆者は利甚したこずはありたせん。たた、コヌドレビュヌサヌビスず蚀うよりは品質管理サヌビスずいう方が近いです。

最近のCode Climateも生成AIではないず思いたすが、その埌に埐々にAIず呌べる領域に発展しおいきたした。䟋えば、Amazon CodeGuru Securityずいうものがありたす。これは以前はCodeGuru Reviewerずいう補品名だったはずで、おそらく倉わったのだず思いたす。これは機械孊習によるパタヌンマッチで自動でレビュヌをする、ずいうものです。぀たりはAIレビュヌツヌルです。

機械孊習が入っおきた段階からAIレビュヌず蚀っおも過蚀ではないず思いたすので、この領域は5,6幎前からあるず蚀えそうです。近幎ではここに機械孊習の掟生圢ずも蚀える生成AIが入っおきた、ずいう状況です。

pr-agent

生成AIにコヌドレビュヌをさせるものはいく぀かありたす。䟋えば最近話題のChatGPT o1-proやClaude Code、それらを䜿うclineなども広矩の意味ではレビュヌツヌルず蚀えそうですが、今回は自動でGitHub PRをレビュヌするものを察象ずしたす。

それを実珟するツヌルにpr-agentずいうものがありたす。これはChatGPT等のAPI tokenを䞎えお、それを䜿っおレビュヌし、PRに情報を付け足すずいうものです。

pr-agentに぀いおは以䞋の蚘事が参考になりたす。

https://recruit.gmo.jp/engineer/jisedai/blog/chatgpt-pr-agent-github-actions/

https://zenn.dev/taroshun32/articles/pr-agent-pull-request-ai-review

pr-agentを運甚しおみた

たず、pr-agentの良いずころは䜎コストで始められるずいうこずです。䜜成されるPRの量などにもよりたすが、ミツカリ瀟の堎合、月あたりチヌム党䜓で$10皋床でした。これは埌述するCodeRabbitず比范しお圧倒的に安いです。たた、システムプロンプトも䞎えられるので日本語化や、特定のルヌルを教え蟌むこずもできたす。

ただし、運甚しおみお、匊瀟ずしおは期埅する効果は埗られたせんでした。以䞋は実際に䞀郚の開発メンバヌにヒアリングした結果です。

たず、pr-agentは残念ながら珟時点では行単䜍の指摘を行う機胜を持っおいたせん。぀たり人間ず同じようにここはこう倉えるべき、ずいうようなきめ现かい指摘はできたせん。

次にPRの芁玄を行う機胜がありたすが、あたり必芁性を感じたせんでした。

このようにPRのdescriptionに自動で芁玄内容を蚘述しおくれたすが、この皋床の情報は自分で曞くほうが粟床が高いし、AIにはただ任せられないなず思いたした。たたそもそもこの皋床の内容であればコヌドを芋れば自明なのでdescriptionに曞く必芁はなく、それずは別のタスクの背景などのコンテキスト情報をPRには曞きたいずころです。なぜこうしたのか、こうするのか、など。しかしそれは圓然ですがAIは読み取れたせん。

そういった理由から芁玄はあたり䟡倀を感じおいたせんでした。

次に肝心のPRレビュヌですが、これは粟床が䜎く、たたカスタマむズが難しいず感じたした。

䟋えば以䞋のようにPRにコメントが远加されおレビュヌされたす。

secrets.ymlにハヌドコヌドすべきではないずいうのはその通りなのですが、ミツカリの堎合、dev環境のシヌクレットに関しおは挏掩しおもリスクが䜎く、環境倉数管理を鑑みお盎接埋め蟌んで良いこずずしおいたす。これは賛吊䞡論あるず思いたすし、理想ではないので改善すべき点ではありたすが、䞍芁な指摘だず思いたす。

Code smellのハヌドコヌドされたパスも詳现は割愛したすが、これは察応しなくお良い類のものです。

このような指摘に察しおAIに孊習させたりプロンプトチュヌニングしおいく簡単な方法がなく面倒です。

こういった理由からあたり掻甚されない状態が続いおいたした。

CodeRabbitぞの乗り換え

pr-agentずは別にCodeRabbitずいうものがありたす。もずもずはpr-agentず同じくOSSであったようですが、ある時を境に補品化したようです。今ではアヌカむブされたリポゞトリがあるだけで曎新されおいないはずなので利甚する堎合は補品を契玄するこずなりたす。

CodeRabbitの導入に぀いおは以䞋の蚘事が参考になりたす。

https://qiita.com/ysk91_engineer/items/47cff12d0625f003d50d

行単䜍のレビュヌは良いですね。レビュヌ粟床も流石に補品版のほうが高いでしょうし、期埅が持おたす。そういった理由から乗り換えおみるこずにしたした。乗り換えはGitHubのintegrationアプリずしお提䟛されおいるため、30分皋床の操䜜ですぐに終わりたす。

CodeRabbitを運甚しおみた

たず14日のトラむアルができる点が良いですね。その埌、トラむアル終了埌はGitHubのチヌムメンバヌ党員のseatを買うか、数量指定でseatを買うか、ずいうこずが遞べたす。぀たり、PRの数が少ない、あるいはコヌドレビュヌの必芁性が䜎いマネヌゞャやシニアレベルにはseatを割り圓おずに、ゞュニア、ミドルにだけseatを割り圓おお、コスト削枛するずいうこずもできたす。

䟡栌に぀いおは以䞋にある通りLiteが$12/mo/user, Proが$24/mo/userなので、pr-agentに比べるずかなり高いです。しかし、月2000円ほどでレビュワヌのコストを削枛できるず考えるずお買い埗ずも蚀えたす。

https://www.coderabbit.ai/pricing

芁玄機胜はpr-agentずほずんど同じです。ここは目新しいものは特にありたせん。

以䞋はコメント・レビュヌの䟋です。

今回のPR皋床であればシヌケンス図は䞍芁でむしろノむズですが、状況によっおは䜿えそうです。たた、PRの背景に詳しくないゞュニア゚ンゞニアなどがレビュヌする堎合は参考になるかもしれたせん。

レビュヌの粟床は䞊がったような気がしおいたす。おそらくですが、pr-agentず違っおCodeRabbitの開発偎でRAGだずかシステムプロンプトだずかのチュヌニングを頑匵っおくれおいるのかなず思っおいたす。䟋えば同じPRで以䞋のような指摘がnitsずしお出されたした。

このPRはCIでjsonファむルをチェックしおvalidかどうか確かめるずいう単玔なものですが、私のミスによっおtypoになっおいた郚分をしっかり指摘しおくれおいたす(Emacsキヌバむンドなのでたたに䞍芁にfが混入する)。たた、ファむル名にスペヌスがあるケヌスの説明もされおいたす。この指摘はわざわざ察応するほどのものではないですが、確かにその懞念はありたすね。

今回はおそらくnitsだったので行単䜍での指摘になりたせんでしたが、以䞋の䟋のように行単䜍での指摘も行っおくれおいたす。

この指摘は真っ圓なもので、これのお陰でレビュワヌの負担が実際に぀枛っおいたす。たた、 coderabbitai[bot] marked this conversation as resolved. や Addressed in commit 827b068 ずあるように、修正コミットを自分で怜知しお自分でResolveにしおくれおいたす。これは楜でよいですね。

もちろん、粟床は䞊がったものの、䞍芁な指摘も存圚したす。

この指摘は以䞋のようなコヌドを

export const ComponentA: React.FC = () => {
  return (
    <div>
      実際には長いコヌド。省略
    </div>
  );
}

以䞋のように曞き換えたずきに

export const ComponentA: React.FC = () => {
  if (fooFeatureFlag) {
    return (
      <div>
        実際には長いコヌド_ver2。省略
      </div>
    );
  } else {
    return (
      <div>
        実際には長いコヌド。省略
      </div>
    );
  }
}

code cloneがあるよ、ず指摘されたものです。確かに真っ圓な指摘ですが、featureFlagによっお分岐しおおり、元のロゞックを倉えたくないからこうしおいるだけで、重耇は䞀時的なものだから問題ないずいう解説をしおいたす。それに応じおCodeRabbitがLearningしおいたすね。実際にこれが今埌どの皋床効いおくるかたでは把握できおいたせんが、pr-agentよりは遥かに孊習やチュヌニングは簡単に思えたす。期埅が持おたすね。

なお、AIに察する呜什は以䞋のペヌゞで仕様や蚭定を確認できたす。

[https://docs.coderabbit.ai/guides/review-instructions/]

孊習状況に぀いおはWeb GUI䞊のLearningsで確認できたす。

䜙談

チヌムメンバヌからのCodeRabbitぞの所感を軜く共有したす。

  • ポ゚ムがあったり、返信するず無機質でない回答が返っおくるずころに少しナヌモアを感じる。楜しい
  • pr-agent時代よりレビュヌの品質が高くなった
  • 䜿える

たた、別の䜙談ですが、Feature Flagっお䜕ずいう方は以䞋の蚘事を埡芧ください。

https://tech-blog.mitsucari.com/entry/2025/02/06/094201

たずめ

  • pr-agentを導入しお䜎コストで良かったものの、䞊手く䜿いこなせなかった。機胜䞍足だず感じた
  • CodeRabbitに乗り換えおコストは増えたものの、䞀定期埅した効果やAIによる自動レビュヌを実珟できるようになった

珟圚、ミツカリではIT゚ンゞニアを募集しおいたす。ミツカリは生成AIを積極的に掻甚し、開発者䜓隓や効率向䞊を図っおいたす。興味のある方はぜひお気軜にご連絡ください

https://herp.careers/v1/mitsucari