はじめに

「AIに“これは書くべきでないコードか?”を聞いて判断する」

そんな運用が一部の現場で始まっています。ChatGPTをはじめとするAIレビュー支援ツールに、NGパターンや禁止設計の判定まで任せる試みです。

しかし、果たしてその判断は信頼して良いのでしょうか?
本記事では、「これは書いてはいけないコードか?」というレビュー判断をAIに任せることの危うさと、レビューアーが補完すべき観点を明確化します。

AIは“何をもってNGか”を知らない

まず前提として、ChatGPTやCodeRabbitのようなAIは、「これは書いてはいけない」という判断を行う際に、以下のような前提を持っていません:

  • プロジェクトごとの禁止構造
  • 組織独自の技術的債務防止方針
  • 将来の拡張要件との整合
  • ドメイン特有の業務設計知識

つまり、AIの「これはNGです」は、汎用的なコーディングパターンの傾向に基づくものにすぎません。

AIは「よくあるアンチパターン」には反応できますが、「このプロジェクトで許されない設計判断」を知ることはできません。

よくあるNGコード例とAIの反応傾向

例1:同期APIの多重呼び出し(パフォーマンス劣化)

await fetchData();
await fetchConfig();
await fetchUser();

AIの指摘(不十分)

Comment
@AI: These calls could potentially be parallelized for better performance.

補足が必要なレビュー視点

  • fetchData()はログイン認証トークンを内包しており、他APIの前提になっている
  • 単純な並列化では副作用を誘発するリスクがある

例2:ビジネスロジックのUI層記述

const onClick = () => {
  if (user.balance > 100000) {
    navigate("/admin-panel");
  }
};

AIの指摘(浅い)

Comment
@AI: Consider separating business logic from UI handlers.

補足が必要なレビュー視点

  • 本来この判定はAuthorizationService内で扱うべき
  • テスト不可能な構造になっており、保守性と再利用性に悪影響

「NGかどうか」は文脈によって変わる

レビューアーにとって重要なのは、コードの存在そのものではなく、“それが文脈として妥当かどうか”です。

例:例外の握り潰し

try {
  doSomething();
} catch (e) {
  // 処理なし
}

ChatGPTは「例外を握り潰している」と正しく指摘しますが、開発者があえて握り潰す選択をした場合には話が変わります。

Comment
@Developer: この例外、業務上ユーザーには通知しない設計になっています。ログ出力だけにしてます。
Comment
@Reviewer: 了解しました。`console.error()`など最低限のトレース出力だけ入れておくと、障害時に分析しやすくなります。

こうした意図との突合・妥当性判断はAIにはできません

NGコードの判断構造とAIの限界

UML Diagram

判断ミスを防ぐためにレビューアーが担うべきこと

1. “構文NG”と“設計NG”を分離して認識する

  • forEachmapの誤用のような構文上のNGはAIに任せられる
  • 責務分離や設計原則違反のような構造上のNGは人間の判断が必要

2. プロジェクト独自の“NGリスト”を明文化する

## 技術的NG構造(例)

- localStorageを業務ロジック内で使う(環境依存)
- API呼び出しを非同期チェーンせず順に並べる
- Redux以外の状態管理を混在させる

これをChatGPTに「このコードは上記のNG構造にあたるか?」と聞くことで、AIの精度を補完付きで運用できる。

3. コメントに“理由”を添える

AIの指摘は意図がわかりづらいため、レビューアーが補足することで判断が明確になる。

Comment
@Reviewer: このロジックは将来的にカテゴリ追加時の拡張を阻害する構造になっています。今のうちに `switch-case` ではなく `Map` 構造に置き換えておいた方が安全です。

結論:NG判定はAIに任せすぎてはならない

AIは「よくあるアンチパターン」に強くても、「プロジェクト固有の禁止構造」や「文脈上のNGコード」の判断には弱い。
そのため、レビューアーは以下のような軸を持ち続ける必要があります。

  • 「それが書かれている理由」を常に問う
  • 「ルール違反」ではなく「判断の妥当性」を見る
  • AIの指摘を鵜呑みにせず、設計意図を照らして評価する

コードが「ダメ」かどうかを決めるのは、構文でもルールでもなく、設計と意図の整合性です。
レビューアーはその整合性を判断する“設計の通訳者”であり、AIが入り込めない領域に立っています。

AIに「NGかどうか」を聞くのではなく、“なぜこれは許容できるか?”を説明できるレビュー”が、今後ますます重要になります。