はじめに

Pull Request(PR)のレビューは、開発品質を保つうえで欠かせない工程です。しかし、実際の現場では

  • レビュー待ちで PR が滞留する
  • 忙しいと「小さなミス」を見逃す

といったことが起こりがちではないでしょうか。

そこで今回は、
GitHub Actions と OpenAI Codex を使って、PR を作ったら自動でレビューしてくれるシステム
を試しに作ってみました。

作り方

ここからは、実際に GitHub Actions × OpenAI Codex の PR 自動レビュー を
どうやって作ったかを順番に紹介します。


1) OpenAI の API キーを用意

まずは、OpenAI の API キーを用意します。
OpenAI の管理画面から API キーを作成し、あとで使うので控えておきます。


2) GitHub リポジトリに Secret を追加

先ほど作成した API キーを GitHub の Secrets に登録します。
今回は GitHub リポジトリの画面からではなく、ターミナルから登録します。

まず、GitHub CLI がインストールされているか確認します。

gh --version

コマンドが見つからない場合は、公式サイトの手順に従ってインストールしてください。

次に、GitHub へログインします。

gh auth login

表示される質問に従って進めると、ブラウザが開き、認証コードの入力を求められます。
認証が完了すると、ターミナルから GitHub を操作できるようになります。

ログイン後、対象リポジトリのディレクトリで以下のコマンドを実行します。

gh secret set OPENAI_API_KEY

実行すると、OpenAI の API キーの入力を求められるので、そのまま貼り付けて Enter を押します。
なお、OPENAI_API_KEY はあくまで例なので、別の名前を使いたい場合は、各自で変更してください。

これで登録は完了です。


3) GitHub Actions の Workflow を作成

次に、PR が作成・更新された際に自動でレビューを実行するための GitHub Actions の Workflow を作成します。

リポジトリのルートに、以下のファイルを作成します。ファイル名は各自で変更してください。

code .github\workflows\codex-pr-review.yml

中身は次のようにします。

name: Codex Pull Request Review

on:
  pull_request:
    types: [opened, synchronize]

permissions:
  contents: read
  pull-requests: write

jobs:
  codex_review:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout repository
        uses: actions/checkout@v4
        with:
          fetch-depth: 0

      - name: Run Codex PR Review
        id: run_codex
        uses: openai/codex-action@v1
        with:
          openai-api-key: ${{ secrets.OPENAI_API_KEY }}
          prompt: |
            あなたはシニアエンジニアです。Pull Request の差分をレビューしてください。
            以下の順で、日本語で簡潔に出してください。

            1. 重大(必ず直す):バグ、例外、セキュリティ、破壊的変更、データ不整合
            2. 改善(推奨):可読性、設計、命名、責務、パフォーマンス

            各指摘には、必ず「ファイル名」と「該当する行番号(diff上)」を明記してください。

      - name: Post Codex feedback to PR
        if: steps.run_codex.outputs.final-message != ''
        uses: actions/github-script@v7
        with:
          github-token: ${{ github.token }}
          script: |
            await github.rest.issues.createComment({
              owner: context.repo.owner,
              repo: context.repo.repo,
              issue_number: context.payload.pull_request.number,
              body: process.env.CODEX_FINAL_MESSAGE,
            })
        env:
          CODEX_FINAL_MESSAGE: ${{ steps.run_codex.outputs.final-message }}

これで、PR が作成または更新された際に OpenAI Codex による自動レビューが実行されるようになります。


4) 動作確認(実際に PR を作ってみる)

ここまでできたら、実際に PR を作って、動くかを確認します。
今回は「わざと小さなミスを入れたコード」を PR に含めて、Codex が指摘してくれるかを検証します。

まずは、ベースとなる「正しいコード」を main ブランチに入れておきます。

class Calculator
{
    /**
     * 割り算を行う
     *
     * @param int|float $a
     * @param int|float $b
     * @return float
     * @throws InvalidArgumentException
     */
    public function divide(int|float $a, int|float $b): float
    {
        if ($b == 0.0) {
            throw new InvalidArgumentException('0 で割ることはできません');
        }

        return $a / $b;
    }
}

次に、検証用のブランチを作って、あえて “人間でもやりがちな小さなミス” を混ぜます。
今回は例として、次の2点を入れてみます。

  • ミス1:== 0.0=== 0 にする
  • ミス2:return $a / $b;return (int) ($a / $b); にする

作成した PR 自動レビューの仕組みは、次のような流れで動いています。

Pull Request 作成 / 更新
        ↓
GitHub Actions 起動
        ↓
リポジトリを checkout(差分取得)
        ↓
OpenAI Codex が差分をレビュー
        ↓
レビュー結果を PR のコメントとして投稿

実際に、今回の PR では以下のように Codex のレビューコメントが投稿されました。

今回は「わざと小さなミスを入れたコード」を PR に含めて、Codex が指摘してくれるかを検証しましたが、
Codex による自動レビューで狙い通り、それらを正確に指摘できていることが確認できました。

おわりに

今回、GitHub Actions と OpenAI Codex を使って、PR を自動でレビューしてくれるシステムを作りましたが、
小さなミスを機械的に拾ってくれる点は想像以上に有用だと感じました。

一方で、レビューの質は プロンプトの書き方に大きく左右される ということも強く実感しました。
プロンプトを各々の開発環境に合った形に調整していくことで、より価値のある PR 自動レビューにできそうです。

このシステム自体は、人間のレビューをそのまま置き換えるものではありませんが、
レビューの負担を少しでも減らしたい、見落としを減らしたいと感じている方は、ぜひ一度試してみてください。