🧶

pr-agentを導入してみた話

に公開

こんにちは!
株式会社カンリーでSREをやっている井上です。

AI盛り上がってますね!カンリーでも様々な形でAIの利活用が進んでいます。
特にエンジニアだとCursor, Copilot, Devin, Clineなどのアップデート情報やナレッジを毎日聞くようになってきました。時代についていくのに必死です。

カンリーでのAI取り組みはhatamasaさんが記事を書いてくれていて面白いので、こちらもぜひ読んでみてください!
https://zenn.dev/canly/articles/701cbd3c7760ed

コードレビューもAIの時代

CursorやDevinはコード生成をしてくれたりアシストしてくれるAIですが、コードレビューもAIが実施してくれる時代です。
AIにレビューをお願いするメリットとしては以下があるかと思います。

  • レビュー依頼時点で最小限の品質が担保された状態を作れる
  • レビューに対するコミュニケーションコストを下げれる

また、カンリーではこれまでCodeRabbitを導入していましたが、以下理由により新たなツールを模索していました。

  • CodeRabbitはユーザー単位の課金で開発者が増えれば増えるほどコストがかかる
  • 可能な限り全ユーザーで利用できる状況を創出したい
    • コストとの兼ね合いも考慮しself hostedで利用できるのが理想
  • レビュー対象の主な開発言語はphp, Go, TypeScript, HCL

これらの要件を満たすため、pr-agentをPoC的に導入してみることにしました。

GitHub Copilot code review や Gemini Code Assist も利用可能になりましたが、対象の開発言語をサポートしていないなどの理由で見送りました。(2025年4月現在)
ただ、進化が早いので採用する未来はあるかもしれません。

pr-agentのインテグレーション

GitHubで利用する場合はGitHub ActionsかGitHub Appsを選択できます。
リポジトリが少ない場合は前者でもよいかと思いますが、1つずつワークフローを作っていくのは手間なのでGitHub Appsでの利用としました。構成は以下です。

こうすることでGitHub Apps側でリポジトリを許可するだけで利用できます。
Lambdaで動かす場合はECRにイメージをpushした後、デプロイする必要があります。
関数URLを発行すれば、API Gatewayなどを利用すること無くLambdaだけで完結できて便利です。
詳細は公式docsをご確認ください。

言語モデルはBedrockにてClaudeを利用しています。
LambdaのIAM Roleにbedrock:InvokeModelbedrock:InvokeModelWithResponseStreamが必要です。

肌感の精度

PR descriptionやレビュー内容を見てみると、割と的を得たことを言っている気がします。
"最小限の品質担保"という観点では、十分に担えるのではないかと思います。
特に私はTerraformを書くことが多いのですが、IAM Policyなどではセキュリティ観点でよく指摘されますw

VPC新規作成時のVPCエンドポイントで指摘された

Configを各リポジトリに配置して設定を上書きできる

Lambdaで動かす場合にはConfigもまとめてbuildすることで共通の設定となります。
ただリポジトリ毎に固有のルールやプロンプトにしたい場合はあるので、そういった際はリポジトリのルートにpr_agent.tomlを配置すれば固有の設定が可能です。
精度を高めていくためやリポジトリ固有のレビュー観点などあればここで補完できます。

リポジトリ個別設定の例

コストはどれくらいか

許可しているリポジトリ数が24のとき、直近30日間のコストは以下のようになっていました。

  • 全体:$88.79
    • Lambda:$0.55
    • Bedrock:$88.24

ユーザー数課金と比較した場合にもコストメリットがかなりありそうです。
ただこちらは許可しているリポジトリ数やコードの変更量・PR数に依存するのであくまで参考程度にとどめていただければと思います。

余談:AIvsAIが繰り広げられた

Devinを利用した開発をしているとDevinがPR作る→pr-agentがレビューする→Devinがコメントに反応して修正する→pr-agentがレビューする、というAIvsAIが繰り広げられましたw
人間が追いつけない速さでレビューと修正が発生して傍観するしかできなかったですw

Datadogのモニターにて遅延評価を300sにしろとのこと、推奨値は900s


Validationを入れましょうとのこと


そしてDevinが両方修正した

おわりに

pr-agentを導入することでコストを下げつつ最低限の品質を担保しながらレビューできる仕組みができました。OSSだと利用できる機能に制限がありますが、そこを差し置いても十分に利用できるものだと思います。
ただ冒頭にも記載した通り、AI時代で流れが早いので今後新たなサービスが出た際は積極的に検証していきたいお気持ちです!

カンリーテックブログ

Discussion