プルリクしたら Bedrock にコードレビューしてもらいたい
こんにちは。
ご機嫌いかがでしょうか。
"No human labor is no human error" が大好きな吉井 亮です。
プロダクトチーム内の雑談タイムで「コードレビューを強化したいね」という話が出ました。AI/LLM にレビューしてもらったら楽しいだろうということで、Bedrock にコードレビューしてもらうことにしました。
プロダクト自体が AWS 上に構築されているので、同じ AWS で使用できる Bedrock から Claude を選択します。
プロダクトチームでは GitHub を使っています。PR 時に走らせる Actions はこちらを利用しました。ありがとうございます。
モデル有効化
今回は、claude-3-haiku と claude-3-5-sonnet を使いました。AWS マネジメントコンソールからこれらのモデルを利用可能にしておきます。
手順は Add or remove access to Amazon Bedrock foundation models に従います。
OIDC Provider の設定
GitHub Actions ワークフローで AWS クレデンシャルを使用しなくても済むように、OIDC Provider を設定します。
これらのドキュメントを参考に設定します。
アマゾン ウェブ サービスでの OpenID Connect の構成
Create an OpenID Connect (OIDC) identity provider in IAM
または、上で紹介したリポジトリbedrock-pr-reviewerで the CloudFormation template が用意されています。こちらのテンプレートを用いても設定できます。
GitHub Actions ワークフロー
bedrock-pr-reviewer にサンプルが記載されています。サンプルを元に自身の環境に合わせて作成します。
まず自分達のリポジトリの環境変数およびシークレットを設定します。
- AWS_OIDC_ROLE_ARN: OIDC Provider で作成したロールの ARN
- BEDROCK_LIGHT_MODEL: claude-3-haiku のモデル名
- 例: anthropic.claude-3-haiku-20240307-v1:0
- BEDROCK_HEAVY_MODEL: claude-3-5-sonnet のモデル名
- 例: anthropic.claude-3-5-sonnet-20240620-v1:0
環境変数およびシークレットを読み込ませるように YAML を記述します。
ブランチ戦略によると思いますが、私は main ブランチに PR が来た時にレビューを走らせるように設定しました。
bedrock-pr-reviewer のオプションは action.yml に定義されています。
language: ja-JP
を設定すると日本語で回答してくれます。まだ1週間しか使っていませんが、日本語で問題は起きていません。
path_filters
でレビュー対象・非対称のファイルを指定できます。レビューしてほしいファイルだけを含めるようにしましょう。
system_message
を細かく記述してレビューの期待値をコントロールします。最初はデフォルト設定で使い始めて、徐々にカスタマイズしていくのが良いと思います。
以下は記述例です。参考になれば嬉しいです。
name: AI Code Review
permissions:
id-token: write
contents: read
pull-requests: write
on:
pull_request:
branches:
- main
pull_request_review_comment:
types: [created]
concurrency:
group:
${{ github.repository }}-${{ github.event.number || github.head_ref ||
github.sha }}-${{ github.workflow }}-${{ github.event_name ==
'pull_request_review_comment' && 'pr_comment' || 'pr' }}
cancel-in-progress: ${{ github.event_name != 'pull_request_review_comment' }}
jobs:
review:
name: Review
runs-on: ubuntu-latest
steps:
- name: configure aws credentials
uses: aws-actions/configure-aws-credentials@v4
with:
role-to-assume: ${{ secrets.AWS_OIDC_ROLE_ARN }}
aws-region: ap-northeast-1
- name: PR review
uses: tmokmss/bedrock-pr-reviewer@main
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
debug: false
review_simple_changes: false
review_comment_lgtm: false
bedrock_light_model: ${{ vars.BEDROCK_LIGHT_MODEL }}
bedrock_heavy_model: ${{ vars.BEDROCK_HEAVY_MODEL }}
language: ja-JP
やってみた
それではやってみます。どのようなレビューが返ってくるのか楽しみです。
サマリーとウォークスルーはどの PR でも作成されるようです。
サマリー
サマリーを作ってくれます。PR 作成時のコメントや差分を読み取って判断してくれているようです。すごい。
ウォークスルー
隠してばかりで申し訳ないのですが、変更があったファイル名と変更内容がテーブル形式で表示されます。
褒めてくれる
ファイル名、diff にレビューコメントを添えて PR にコメントしてくれます。
で、これが最高に嬉しいのですが、褒めてくれます。ほっこりします。
修正コードを提示してくれる
問題点を指摘しつつ、コードの修正案を提示してくれます。便利。
タイポを指摘してくれる
ちょっと手が滑ってしまったタイポを指摘してくれます。人間が気づきにくいところなのでありがたいです。
会話できる
レビューコメントに対して返信すると、会話ができます。しかも謙虚です。レビュー内容に不明点があったり、腑に落ちない場合は質問してみましょう。
完璧ではない
この指摘は謎指摘です。こういうことが起こりますので、そういう前提で使用することが大事です。
誤った指摘などは適切に指摘してあげることで、次からのレビューがより良いものになると思います。(おそらく)
感想
しばらく試用してみた感触としては「使える」です。
熟練開発者によるレビューの代わりにはなりませんが、誤字脱字やちょっとしたコーディングテクニックのアドバイスは助けになると思います。
使い方としては、ドラフト PR でまず AI レビュー、AI の指摘をあらかた取り込んだら Ready for Review という方法が良さそうです。
参考
Discussion