😇

Geminiでコードレビューを!OpenRouter + GitHub Actions

2025/01/21に公開

はじめに

Googleの強力なAIであるGeminiは、高いコード理解能力を持ち、コードレビューを効率化・高度化できる可能性を秘めています。私も、Geminiにプルリクエストのコードレビューをして欲しいと常々考えていました。

しかし、GitHub ActionsでGeminiを直接使えるアクションがあまりなく、実現は難しいかなぁ…なんて思っていましたが...

結論:OpenRouterを使えばイケるんです!

OpenRouterとは

OpenRouterとは、様々な大規模言語モデル(LLM)を統一されたAPIで利用できるようにするプラットフォームです。OpenRouterを使うと、簡単にLLMを切り替えて試したり、比較したりできるんですよね。また、OpenRouterは複数のLLMプロバイダーをサポートしているので、特定のベンダーにロックインされることなく、最適なモデルを選択できるってのも嬉しいポイントです。

もちろん、Geminiも利用可能ですし、DeepseekとかClaudeとか、数多くの主要なLLMにも対応しています。

さらに、OpenRouterのAPIはOpenAIと互換性のあるインターフェースを持っているため、OpenAIのAPIに対応したツールであれば、OpenRouterのエンドポイントとAPIキーを設定するだけで、他のイケてる言語モデルも扱うことが可能になっちゃいます。この互換性のおかげで、既存のOpenAIのツールやライブラリをそのまま活用しつつ、簡単に異なるLLMを試せるので、開発の柔軟性と効率がめっちゃ上がるんですよね。

https://openrouter.ai/

準備するもの

プルリクエストのワークフローを作成する前に以下のものを準備しておきましょう。

OpenRouterのAPIキー

言語モデルの種類

  • https://openrouter.ai/models)から利用したい言語モデルを検索して、詳細画面からモデル名をコピーしましょう。
  • 今回はGemini Flash 2.0 Experimentalを利用したいので、検索してみたらモデル名はgoogle/gemini-2.0-flash-exp:freeでした。

GitHub Actionsのワークフロー作成

次に、GitHubリポジトリでコードレビューを自動化するためのGitHub Actionsワークフローを作成します。

ChatGPT-CodeReviewを使う

今回は、ChatGPTでコードレビューができる、イケてるChatGPT-CodeReviewを利用しています。

https://github.com/anc95/ChatGPT-CodeReview

  1. コードレビューを行いたいGitHubリポジトリに移動しましょう。
  2. .github/workflowsディレクトリを作成します。
  3. このディレクトリ内に、codereview.ymlとか、イケてる名前で新しいファイルを作成しましょう。
  4. 以下の内容をcodereview.ymlに記述してください。
name: Code Review

permissions:
  contents: read
  pull-requests: write

on:
  pull_request:
    types: [opened, reopened, synchronize]

jobs:
  codereview:
    # タイトルに`:review`が含まれている場合のみ実行
    if: ${{ contains(github.event.pull_request.title, ':review') }}
    runs-on: ubuntu-latest
    steps:
      # プルリクエストのタイトルを表示
      - name: Display PR title
        run: |
          echo "PullRequest: ${{ github.event.pull_request.title }}"
      # ChatGPT-CodeReviewを実行
      - uses: anc95/ChatGPT-CodeReview@main
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          OPENAI_API_KEY: ${{ secrets.REVIEW_API_KEY }}
          LANGUAGE: Japanese
          # OpenRouterのエンドポイントを指定
          OPENAI_API_ENDPOINT: https://openrouter.ai/api/v1
          # 利用するモデルを指定
          MODEL: google/gemini-2.0-flash-exp:free
          # プロンプトをカスタマイズ
          PROMPT: |
            あなたは経験豊富なRust開発者として、以下のRustコードをレビューし、`報告形式`に従って重大な問題点のみを簡潔に報告してください。

            **報告形式以外の内容は一切記述しないでください。**
            **レビュー観点などについては記述しないでください。**

            報告形式:
            ```
            ### 問題点

            *   **観点:** (例: バグとエラー)
            *   **問題の簡潔な説明:**
            *   **改善提案:**
            *   **コード例 (必要な場合):** 差分がわかりやすいように記述
            ```

            レビュー観点:
            - バグ: 実行時エラー、クラッシュ、未定義動作を引き起こす可能性のあるもの
            - セキュリティ: 重大な脆弱性
            - パフォーマンス: 著しいボトルネック
            - 設計: 保守性を著しく損なう構造
            - 可読性:可読性が極めて低い箇所
            - テスト: テストが不足し、クリティカルな問題につながる場合

            軽微な問題、好みの問題は無視してください。
          top_p: 1
          temperature: 1
          max_tokens: 4096
          MAX_PATCH_LENGTH: 4096
          IGNORE_PATTERNS: '*.md'
          INCLUDE_PATTERNS: '*.rs'

ポイント:

  1. OPENAI_API_ENDPOINTには、OpenRouterのAPIエンドポイントを指定しましょう。
  2. MODELには、コピーした言語モデル名を指定しましょう。
  3. プルリクエストのタイトルに:reviewという文字列が含まれている場合のみ、コードレビューが実行されるようにしています。

Actions secrets and variablesにAPIキーを設定する

次に、Github Actionsのワークフローで参照するAPIキーをリポジトリのシークレットに追加します。

  1. GitHubリポジトリの「Settings」タブを開きましょう。
  2. 左側のメニューから「Secrets and variables」→「Actions」を選択します。
  3. 「New repository secret」ボタンをクリック。
  4. 「Name」にREVIEW_API_KEY、「Secret」にさっきコピーしたOpenRouterのAPIキーを入力し、「Add secret」をクリックしてください。

プルリクエストの作成

これで、Geminiによるコードレビューが設定できました! 実際にプルリクエストを作成すると、Geminiから以下のようなレビューコメントがもらえます!(天才!)

このように、コードの良い点と改善点の両方を指摘し、具体的な改善提案をしてくれるんです。

ただし、指定するプロンプトによっては、文章が崩れたり、期待する回答がされなかったりするので、調整が必要になりますね

ちなみに、今回以下のリポジトリで試しているので、参考程度に見てみてください。

https://github.com/takemo101/any-ai-codereview-test

まとめ

OpenRouterとGitHub Actionsを組み合わせれば、Geminiなどの強力なLLMを活用したコードレビューが簡単に実現できます! OpenRouterを使えば、Geminiだけじゃなくて、他のイケてるLLMも簡単に試せるので、プロジェクトのニーズや好みに合わせて最適なモデルを選択できるんです。

AIによるコードレビューは、今後のソフトウェア開発においてますます重要な役割を果たしていくこと間違いなし! ぜひ、OpenRouterを使って、色々な言語モデルのコードレビューを体験してみてください!

株式会社ソニックムーブ

Discussion