Codexの自動コードレビューは「@codexするだけ」では動かなかった

Codexの自動コードレビューは「@codexするだけ」では動かなかった

「PRに@codexするだけ」——のはずだった

OpenAI Codex には、GitHub のプルリクエスト(PR)を自動でレビューしてくれる機能があります。謳い文句はシンプルで、「PR に @codex とメンションするだけで、AI がコードをレビューしてくれる」。

普段から GitHub Actions でいくつかのリポジトリを回している身としては、これはありがたい。人間のレビュアーの代わり、あるいは補助になるなら使ってみたい——というわけで、実際に試してみることにしました。

この記事は、その検証ログです。先に言っておくと、結論にたどり着くまでが長かったです。「@codexするだけ」という触れ込みの裏に、それなりの沼がありました。結論を先に置かず、実際にハマった順番のまま記していきます。

準備:わざとツッコミどころを仕込んだPRを作る

レビュー能力を測るために、わざと問題を仕込んだコードを用意しました。これを PR にして、Codex が何を拾って何を見逃すかを見れば、レビュー能力が丸裸になります。

TypeScript プロジェクトに、こんな review_test.ts を追加しました。仕込んだ問題は5つです。

// 問題1: APIキーをハードコード(セキュリティ的にアウト)
const API_KEY = "sk-test-1234567890abcdef";

// 問題2: 意味不明な変数名 + any濫用
function f(a: any, b: any) {
  const x = a + b;
  return x;
}

// 問題3: nullチェック漏れ(dの中身を検証せず深く辿る)
function getUserName(d: any) {
  return d.user.name.toUpperCase();
}

// 問題4: 例外を握りつぶす
async function risky() {
  try {
    const result = await fetch("https://example.com");
    return await result.json();
  } catch (e) {
    // 何もしない
  }
}

// 問題5: 無限ループの種(i-- を書き忘れ)
function countdown(n: number) {
  let i = n;
  while (i > 0) {
    console.log(i);
    // i-- を書き忘れている
  }
}

検証用ブランチを切ってコミット・プッシュし、PR を作成。あとは PR のコメント欄で @codex review と打てば、レビューが返ってくる……はずでした。

沼1:@codex reviewしても、無音

PR のコメント欄で @codex review と送りました。@codex はちゃんと青いリンクになり、ホバーすると「OpenAI's coding agent」という説明も出る。実在する bot です。メンションのやり方は合っているはず。

ところが——20分待っても、何の反応もない。

bot のリアクション(👀)も、レビューコメントも、エラーメッセージすら出ません。完全な無音です。後で調べて分かったのですが、これは公式の issue でも数多く報告されている「サイレント失敗」という状態でした。設定が足りていないのに、エラーも出ないので何が悪いのか分からない。

ここで一度、別のリポジトリ(自分の個人アカウント配下)でも同じことを試しました。「他人のアカウントのリポジトリだから動かないのでは」と疑ったからです。しかし、自分のリポジトリでも無音。原因は所有者ではなく、別のところにありました。

沼2:原因は「連携しただけ」だった

調べて分かった原因はこうです。

最初にやった「GitHub アカウントとの連携(OAuth)」は、あくまでアカウント同士の紐付けにすぎません。@codex を bot としてリポジトリで動かすには、それとは別に、

  1. Codex の GitHub App(bot)をリポジトリにインストールする

  2. Codex 側の設定で、そのリポジトリのコードレビューを有効化する

この2つが必要でした。連携だけでは、bot はリポジトリに常駐していないので、メンションしても黙っているわけです。

設定画面(chatgpt.com/codex のコードレビュー設定)を開くと、案の定、自動レビューのトグルはすべて OFF。さらにリポジトリ一覧で検索しても「リポジトリはありません」と表示され、検証台のリポジトリが Codex に認識すらされていませんでした。

沼3:botをインストールしても、すぐには反映されない

コネクター設定から「ChatGPT Codex Connector」のインストール先を選び直しました。ここで、bot に与える権限の一覧が出ます。

注目したのは権限の中身です。pull requests への read & write 権限が含まれていました。レビューコメントを「書き込む」には、この write 権限が必須です。最初の OAuth 連携にはこれが無かった——これが無音の真の原因だったわけです。

リポジトリを Only select repositories で検証台だけに絞り、インストールを承認。ところが、設定画面に戻ってもリポジトリ一覧にはまだ出てこない。ここでもサイレントな反映ラグがありました。ページをリロードして、ようやくリストに登場。

リポジトリが登録できたら、その行で「自動コードレビュー」と「徹底的なコードレビュー」を ON にします。Codex のこの設定はトグルを切り替えた瞬間に自動保存で、保存ボタンはありません。

ここまで、トータルで1時間半以上。本来見たかった「レビュー能力」には、まだ一度もたどり着いていません。

ようやく、Codexが動いた

設定を終えて、PR で改めて @codex review。すると今度は——コメントに 👀 のリアクションが付きました。「レビュー依頼を受け付けた」というサインです。1回目は無音だったのに、bot インストール後の2回目には反応した。設定が効いた瞬間でした。

<!-- ▼画像⑦:@codex review のコメントに 👀 リアクションが付いた画面。 キャプション例:「ようやく👀が付いた。Codexがレビュー依頼を受け付けたサイン」 -->

数分後、Codex がレビューコメントを投稿しました。そして、その中身が想像以上に良かったのです。

結果:レビューの実力は、本物だった

仕込んだ5つの問題に対して、Codex の指摘はこうでした。

仕込んだ問題

Codexの指摘

優先度

結果

APIキーのハードコード

Avoid committing the API key literal

P1

✅

any濫用・雑な変数名

(指摘なし)

—

❌

nullチェック漏れ

Guard nested user data before uppercasing

P2

✅

例外の握りつぶし

Propagate failures from risky fetch

P2

✅

無限ループの種

Decrement the countdown loop counter

P1

✅

5つ中4つを的確に指摘。しかも、それぞれの指摘に「なぜ危険か」の理由がちゃんと付いていました。

  • nullチェック漏れには「null や user を持たない payload が来たら、この行は TypeError を throw する」と、具体的な壊れ方まで説明

  • 無限ループには「i が変わらないので countdown が永遠に print し続け、イベントループをブロックする」と、JS/TS 特有の影響まで言及

さらに驚いたのが、こちらが仕込んでいない問題まで発見したことです。fetch の結果を検証せずに使っている箇所について、「4xx/5xx のエラーレスポンスでも fetch は resolve するので、エラーを成功扱いしてしまう」と指摘してきました(Reject non-OK HTTP responses)。これは意図せず作ってしまった穴で、それを自力で見つけたことになります。

唯一スルーしたのは「any濫用・雑な変数名」でした。ただ、これは「バグ」ではなく「スタイル・可読性」の問題です。Codex は GitHub では高優先度のリスク(P0・P1)に絞ってコメントする設計なので、バグ・セキュリティは拾い、スタイルは流すという、実は実用的に妥当な振る舞いだったとも読めます(※これは挙動からの推測です)。

まとめ

「PR に @codex するだけ」という触れ込みは、半分本当で、半分は罠でした。

  • 動かすまでが沼だった。 OAuth 連携だけでは動かず、bot の個別インストール、リポジトリ単位の有効化が必要。しかも設定が反映されない「サイレント失敗」が何度も起き、レビューが返ってくるまで1時間半以上かかった。

  • でも、動いたあとの実力は本物だった。 仕込んだ5つの問題のうち4つを優先度付きで的確に指摘し、こちらが仕込んでいない問題まで自力で発見した。スタイル系は流す傾向で、バグ・セキュリティに集中する。

結論としては、「セットアップさえ越えれば、実用に足る AI レビュアー」です。ただし、その「セットアップさえ越えれば」のハードルが、謳い文句から想像するよりずっと高い。これから試す人は、「@codexするだけ」では動かないことを前提に、bot のインストールとリポジトリ有効化まで一気にやってしまうのがおすすめです。

機能そのものより、そこに至る導線が最大の壁だった——というのが、今回いちばんの学びでした。

「PRに@codexするだけ」——のはずだった

OpenAI Codex には、GitHub のプルリクエスト(PR)を自動でレビューしてくれる機能があります。謳い文句はシンプルで、「PR に @codex とメンションするだけで、AI がコードをレビューしてくれる」。

普段から GitHub Actions でいくつかのリポジトリを回している身としては、これはありがたい。人間のレビュアーの代わり、あるいは補助になるなら使ってみたい——というわけで、実際に試してみることにしました。

この記事は、その検証ログです。先に言っておくと、結論にたどり着くまでが長かったです。「@codexするだけ」という触れ込みの裏に、それなりの沼がありました。結論を先に置かず、実際にハマった順番のまま記していきます。

準備:わざとツッコミどころを仕込んだPRを作る

レビュー能力を測るために、わざと問題を仕込んだコードを用意しました。これを PR にして、Codex が何を拾って何を見逃すかを見れば、レビュー能力が丸裸になります。

TypeScript プロジェクトに、こんな review_test.ts を追加しました。仕込んだ問題は5つです。

// 問題1: APIキーをハードコード(セキュリティ的にアウト)
const API_KEY = "sk-test-1234567890abcdef";

// 問題2: 意味不明な変数名 + any濫用
function f(a: any, b: any) {
  const x = a + b;
  return x;
}

// 問題3: nullチェック漏れ(dの中身を検証せず深く辿る)
function getUserName(d: any) {
  return d.user.name.toUpperCase();
}

// 問題4: 例外を握りつぶす
async function risky() {
  try {
    const result = await fetch("https://example.com");
    return await result.json();
  } catch (e) {
    // 何もしない
  }
}

// 問題5: 無限ループの種(i-- を書き忘れ)
function countdown(n: number) {
  let i = n;
  while (i > 0) {
    console.log(i);
    // i-- を書き忘れている
  }
}

検証用ブランチを切ってコミット・プッシュし、PR を作成。あとは PR のコメント欄で @codex review と打てば、レビューが返ってくる……はずでした。

沼1:@codex reviewしても、無音

PR のコメント欄で @codex review と送りました。@codex はちゃんと青いリンクになり、ホバーすると「OpenAI's coding agent」という説明も出る。実在する bot です。メンションのやり方は合っているはず。

ところが——20分待っても、何の反応もない。

bot のリアクション(👀)も、レビューコメントも、エラーメッセージすら出ません。完全な無音です。後で調べて分かったのですが、これは公式の issue でも数多く報告されている「サイレント失敗」という状態でした。設定が足りていないのに、エラーも出ないので何が悪いのか分からない。

ここで一度、別のリポジトリ(自分の個人アカウント配下)でも同じことを試しました。「他人のアカウントのリポジトリだから動かないのでは」と疑ったからです。しかし、自分のリポジトリでも無音。原因は所有者ではなく、別のところにありました。

沼2:原因は「連携しただけ」だった

調べて分かった原因はこうです。

最初にやった「GitHub アカウントとの連携(OAuth)」は、あくまでアカウント同士の紐付けにすぎません。@codex を bot としてリポジトリで動かすには、それとは別に、

  1. Codex の GitHub App(bot)をリポジトリにインストールする

  2. Codex 側の設定で、そのリポジトリのコードレビューを有効化する

この2つが必要でした。連携だけでは、bot はリポジトリに常駐していないので、メンションしても黙っているわけです。

設定画面(chatgpt.com/codex のコードレビュー設定)を開くと、案の定、自動レビューのトグルはすべて OFF。さらにリポジトリ一覧で検索しても「リポジトリはありません」と表示され、検証台のリポジトリが Codex に認識すらされていませんでした。

沼3:botをインストールしても、すぐには反映されない

コネクター設定から「ChatGPT Codex Connector」のインストール先を選び直しました。ここで、bot に与える権限の一覧が出ます。

注目したのは権限の中身です。pull requests への read & write 権限が含まれていました。レビューコメントを「書き込む」には、この write 権限が必須です。最初の OAuth 連携にはこれが無かった——これが無音の真の原因だったわけです。

リポジトリを Only select repositories で検証台だけに絞り、インストールを承認。ところが、設定画面に戻ってもリポジトリ一覧にはまだ出てこない。ここでもサイレントな反映ラグがありました。ページをリロードして、ようやくリストに登場。

リポジトリが登録できたら、その行で「自動コードレビュー」と「徹底的なコードレビュー」を ON にします。Codex のこの設定はトグルを切り替えた瞬間に自動保存で、保存ボタンはありません。

ここまで、トータルで1時間半以上。本来見たかった「レビュー能力」には、まだ一度もたどり着いていません。

ようやく、Codexが動いた

設定を終えて、PR で改めて @codex review。すると今度は——コメントに 👀 のリアクションが付きました。「レビュー依頼を受け付けた」というサインです。1回目は無音だったのに、bot インストール後の2回目には反応した。設定が効いた瞬間でした。

<!-- ▼画像⑦:@codex review のコメントに 👀 リアクションが付いた画面。 キャプション例:「ようやく👀が付いた。Codexがレビュー依頼を受け付けたサイン」 -->

数分後、Codex がレビューコメントを投稿しました。そして、その中身が想像以上に良かったのです。

結果:レビューの実力は、本物だった

仕込んだ5つの問題に対して、Codex の指摘はこうでした。

仕込んだ問題

Codexの指摘

優先度

結果

APIキーのハードコード

Avoid committing the API key literal

P1

✅

any濫用・雑な変数名

(指摘なし)

—

❌

nullチェック漏れ

Guard nested user data before uppercasing

P2

✅

例外の握りつぶし

Propagate failures from risky fetch

P2

✅

無限ループの種

Decrement the countdown loop counter

P1

✅

5つ中4つを的確に指摘。しかも、それぞれの指摘に「なぜ危険か」の理由がちゃんと付いていました。

  • nullチェック漏れには「null や user を持たない payload が来たら、この行は TypeError を throw する」と、具体的な壊れ方まで説明

  • 無限ループには「i が変わらないので countdown が永遠に print し続け、イベントループをブロックする」と、JS/TS 特有の影響まで言及

さらに驚いたのが、こちらが仕込んでいない問題まで発見したことです。fetch の結果を検証せずに使っている箇所について、「4xx/5xx のエラーレスポンスでも fetch は resolve するので、エラーを成功扱いしてしまう」と指摘してきました(Reject non-OK HTTP responses)。これは意図せず作ってしまった穴で、それを自力で見つけたことになります。

唯一スルーしたのは「any濫用・雑な変数名」でした。ただ、これは「バグ」ではなく「スタイル・可読性」の問題です。Codex は GitHub では高優先度のリスク(P0・P1)に絞ってコメントする設計なので、バグ・セキュリティは拾い、スタイルは流すという、実は実用的に妥当な振る舞いだったとも読めます(※これは挙動からの推測です)。

まとめ

「PR に @codex するだけ」という触れ込みは、半分本当で、半分は罠でした。

  • 動かすまでが沼だった。 OAuth 連携だけでは動かず、bot の個別インストール、リポジトリ単位の有効化が必要。しかも設定が反映されない「サイレント失敗」が何度も起き、レビューが返ってくるまで1時間半以上かかった。

  • でも、動いたあとの実力は本物だった。 仕込んだ5つの問題のうち4つを優先度付きで的確に指摘し、こちらが仕込んでいない問題まで自力で発見した。スタイル系は流す傾向で、バグ・セキュリティに集中する。

結論としては、「セットアップさえ越えれば、実用に足る AI レビュアー」です。ただし、その「セットアップさえ越えれば」のハードルが、謳い文句から想像するよりずっと高い。これから試す人は、「@codexするだけ」では動かないことを前提に、bot のインストールとリポジトリ有効化まで一気にやってしまうのがおすすめです。

機能そのものより、そこに至る導線が最大の壁だった——というのが、今回いちばんの学びでした。

AI・システム開発のこと、VISKにご相談ください

「自社の業務にAIを活かせないか」「この作業、自動化できないか」——

そんな漠然とした段階からで大丈夫です。大阪のAI・システム開発会社VISKが、御社の課題に合わせて、企画から開発・検証までサポートします。