Skip to content
ソフトウェア自動開発のメモ帳

AI コードレビューで見るべきは拡張容易性

AI がコードを書く時代に、レビューで何を見るべきか。「バグがないか」「テストが通るか」は AI 自身がある程度カバーできる。では、人間のレビューに残る仕事は何か。

2026 年 3 月に公開された論文 SlopCodeBench が、この問いに対してデータを出している。同論文の実験では、テストが通っていても、AI が書いたコードは反復するたびに劣化していた。そして、この劣化をテストは検出できなかった。

仕様を繰り返し追加すると何が起きるか

従来のコーディングベンチマーク(SWE-bench など)は、仕様を渡して一発でコードを書かせる評価だ。しかし実際の開発では、コードは何度も拡張される。SlopCodeBench はそこを突いた実験だ。

20 問×93 チェックポイント の構成で、仕様が段階的に追加される。エージェントは自分が前に書いたコードを繰り返し拡張していく。11 のモデルで検証された結果は厳しいものだった。全問を end-to-end で解けたエージェントはゼロ、最高のチェックポイント通過率でも 17.2% にとどまった。80% のトラジェクトリで複雑度が少数の関数に集中し、89.8% で冗長なコードが増加。人間の OSS コードと比較して 2.2 倍 冗長だった。

注目すべきは、プロンプトを改善しても初期品質は上がるが、劣化の傾向は止まらなかった 点だ。少なくともこの実験の範囲では、指示の改善だけでは劣化を止められなかった。

コードが膨らむ問題と、構造が壊れる問題は別物

SlopCodeBench は 2 つの品質指標を分けて計測している。

一つは、論文が「冗長性(verbosity)」と呼ぶ指標だ。重複コードやコピペ的な膨張を指す。同じロジックが複数の場所に現れる。これはレビューで比較的見つけやすく、「この部分、上の関数と同じでは?」と指摘できる。

もう一つは「構造劣化(structural erosion)」と呼ばれる指標で、複雑度が少数の関数に集中していく現象を測っている。仕様が追加されるたびに既存の関数に分岐が足され、一つの関数があらゆる責務を抱える。テストは通る。動作も正しい。だが次の仕様変更が来たとき、その関数に手を入れるコストが跳ね上がっている。

論文の計測では、人間が書いた OSS コードは時間が経ってもこの構造劣化の指標がほぼ横ばいだった。一方、AI が書いたコードは反復ごとに悪化し続けた。人間はリファクタリングや責務の再配置を自然にやっているのかもしれないが、少なくともこの実験では AI にその振る舞いは見られなかった。

レビューの焦点:「次の変更が楽になるか」

冗長性の除去は重要だが、レビューの本質はそこではない。冗長性は「今のコードが汚い」という現在の問題に過ぎない。より深刻なのは、次の変更のコストが上がっている ことだ。これはテストが通っている限り表面化しない。

レビュワーのマインドセットとして有効なのは、diff の正しさではなく、diff が残す地形 を見ることだ。

一言でいえば、拡張容易性が維持されているか。SlopCodeBench の結果は、現時点の AI モデルがこの観点を自力で維持するのは難しいことを示唆している。ここが人間のレビューの仕事になる。

定期的な大掃除より、毎回の小さな検査

構造の劣化への対処として「10 ステップごとにリファクタリングする」というアプローチが考えられる。しかしこれは劣化が蓄積してからまとめて直すやり方だ。SlopCodeBench のデータが示すように劣化は反復ごとに進行するので、蓄積後の修正コストは高い。そして「動いているコードを大きくリファクタする」のは AI が最も苦手な作業でもある。

より現実的なのは、各反復で構造メトリクスを確認する ことだ。関数の行数、循環的複雑度、重複率などを前回と比較して、悪化していればその場で対処する。差分が小さい段階なら、AI でも修正できる。

「定期的な大掃除」ではなく「毎回の小さな検査」。この考え方が AI コードレビューの現場でもそのまま使える。

人間が導く必要がある理由

「構造の劣化を検出する AI レビュワーを導入すればいい」という発想は自然だ。実際、循環的複雑度の計測や重複検出は自動化できる。

しかし SlopCodeBench の結果で示唆的なのは、数値が悪化したときにどう直すかの判断 だ。「この関数が大きすぎる」と指摘されたとき、エージェントがやりがちなのは関数の分割程度だ。設計を見直して責務を再配置する、つまり「この機能群はこういう構造で表現すべきだ」という判断は、コードベース全体の方向性を理解している人間にしかできない。

メトリクスの計測は自動化する。だが「どう直すか」の方向づけは人間が行う。AI コードレビューにおける人間の役割は、拡張容易性の維持と冗長性の除去を、設計意図に沿って導くこと だといえる。

参考リンク