u-ryo's blog

レビュアーがいないので、AIに敵対的レビューをさせている

前回、外に出る情報だけは人間が最後の門番をやる、と書きました。今回はその続きで、門番自身の品質保証の話です。

私の担当領域は、エンジニアが私1人です。PRはself-mergeするしかない。つまりコードもドキュメントも、書いた本人以外の目を一度も通らずに世に出る構造で、長年これをどうしようもないものとして受け入れてきました。書いた本人は自分の間違いが見えない、というのは分かりきっているのに、です。

AI時代になって、これは言い訳にできなくなりました。レビュアーがいないなら、作ればいい。

素朴にやると空振りする

ただし、作業中のAIに「これレビューして」と頼むのは、ほぼ無意味です。実装の文脈を共有しているAIは、その文脈ごと肯定してきます。「はい、この設計判断は妥当です」— そりゃそうです、さっき一緒にその判断をした本人 (本AI?) なので。前回書いた通り、AIはもっともらしい文章の製造機なので、レビューをさせるともっともらしい承認が出てくるだけです。

きっかけは コードレビューをやめた という記事を読んで考え込んだことでした。うちの環境向けに設計し直して、次の3点を要件にしました。

具体的には、実装が終わったら別セッションのagentに成果物だけ渡してレビューさせ、指摘を「本物 → 直す / 妥当なnitpick → 安ければ直す / 誤検知 → 理由を記録してskip」の3分類で処理して、LGTMが出るまで往復します。

コストの実測と、粒度の調整

最初は変更のたびにかけていました。するとある日、3行のGROUP BY追加のレビューに8分・約10万トークンかかりまして。さすがに過剰です。気軽にバンバンやるものではない。

ところが面白いのは、その3行からでも本物の指摘が1件出たことです (ORDER BYの一意性が足りず、並び順が非決定的になるという指摘。テストは通るのに、ある日突然結果が入れ替わるやつです)。つまり「レビューに値しない変更」を事前に見分けるのは、思っているより難しい。

なので廃止ではなく粒度を変えました。今の運用は:

正直な限界も書いておきます

機械の方がやりやすいこと

やってみて気づいたのは、blindの徹底は人間チームより機械の方がむしろ簡単だ、ということです。人間のレビュアーに「実装の経緯は忘れて、文脈を知らないふりをして読んでください」とは頼めません。同僚は事情を知ってしまっているし、書いた人への遠慮もある。文脈を持たない読者と、遠慮という機能そのものが無いレビュアーを、数分で好きなだけ呼び出せるようになった — 1人開発の「レビュアー不在」が言い訳にならなくなった、というのはそういう意味です。タダではありませんが (前述の通り時間もトークンも食います)、人間のレビュアーを1人雇うのに比べれば誤差です。

次回は、AIとの共同作業で溜まった自分側の失敗ログを218件数えて分類した話を書く予定です。

(この連作は、AIエージェントを業務のレガシーシステム保守で半年ほど運用して溜まった実践則を、1本1則で書いていくものです)