無料でたっぷり使えるGitHub PRレビューbotを作りました
動機
「個人開発でもそろそろ生成AIのレビューbotを入れたい!」
「でも、何かの拍子にpackage.lock.json
みたいな大容量ファイルをうっかり投げた日には生成AI破産💰💥が怖い…🙀」
「そうだ!無料でたくさん使えて高性能と噂のGemini 2.0 Flashを使おう!」
「うーん、Geminiが使えるいい感じのレビューbotが見つからない…」
「作っちゃえ!」
できたもの
こんなのができました。Google AI StudioからAPI keyを取得すれば無料で使えます。よければ使ってみてください。開発にも生成AIをフル活用しました。
設定が簡単で、コード行に対してコメントを返してくれたり、優先度を含めてコメントを残してくれるのがこだわりです。
こだわり
- ちゃんとコード行に対して引用コメントを返します。
こんな感じ
これがお好みでない方のために、USE_SINGLE_COMMENT_REVIEW
環境変数も用意しました。trueにすることで、1つのコメントでレビューを行います。
今はお節介なくらいコメントを入れてくれるので、Priorityが低いコメントは投稿しないようにする機能をつける予定です。(logLevelみたいなイメージ)
-
EXCLUDE_PATHS
が使えます。
ビルド後のアセットやpackage.lock.json
など、レビューを求めないファイルはEXCLUDE_PATHS
環境変数にパスを指定すれば除外してプロンプトを組み立てます。
生成AIレビューツールを探していてこの機能がないものも意外とありました。。
- 設定側のworkflow ymlが短めです。
実行されるスクリプトの方でOctokitを使ってデータフェッチをするのでactions/checkout
なども不要な作りにしました。
name: "Run ai-reviewer"
permissions:
pull-requests: write
contents: read
on:
pull_request:
types: [opened, synchronize, reopened]
workflow_dispatch:
jobs:
run-review:
runs-on: ubuntu-latest
steps:
- name: Gemini Review Bot
uses: Nasubikun/ai-reviewer@v1
with:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
GEMINI_API_KEY: ${{ secrets.GEMINI_API_KEY }}
LANGUAGE: "Japanese"
EXCLUDE_PATHS: "**/pnpm-lock.yaml"
こんな感じで設定します。
実装
実装はvercel/aiを使っています。以前Geminiを使った時にLangchainのwithStructuredOutput
が安定しなかったので、その名残りでvercel/aiのgenerateObject
を使っています。[1]
コード行のそれぞれにコメントを残すために、Github REST APIで必要なcommentsのパラメーター(body, line)などzodスキーマで定義し、Geminiに返させています。
また、生成AIが行数を数えやすいようにpatchの内容はjsdiffでobjectにし、各行に行数を付与するようにしています。
あとがき
いずれAmazon Bedrockも使えるようにします!いずれ!
Discussion