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チェック漏れには「nulluser を持たない 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チェック漏れには「nulluser を持たない 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 のインストールとリポジトリ有効化まで一気にやってしまうのがおすすめです。

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