AIの厳格なコードレビューに従ったらシステムが壊れた話:テストもすり抜けた罠と教訓

AIによるコードレビューやリファクタリングは魔法ではありません。むしろ、ドメイン知識を持たないAIの「もっともらしいクリーンコードの提案」を鵜呑みにすると、システムは根底から崩壊してしまうと感じています。

全体で20万行と60万行規模の2つのプロジェクトにおいて、デモ直前にAIの指摘に従ってリファクタリングを実施した結果、システムが完全に動かなくなり、残業を伴うデスマーチに発展した失敗談と教訓を共有します。

課題の背景:AIによる「完璧な」レビューへの過信

あるプロジェクトで、画面遷移、保存処理(排他制御含む)、ローカルへのインポート/エクスポート、そして DBContext のリファクタリングをAIに依頼しました。

AIからは、非常に「教科書的で美しい」指摘が返ってきました。
* 「セキュリティと責務分割の観点から、クラスやインターフェースを小さく分割すべき」
* 「画面遷移のコードはパラメータ化したほうが良い」
* 「保存処理が肥大化しているため、クラスを分割すべき」

これらの指摘はアーキテクチャの原則に照らし合わせれば正論であり、実際に単体テストも通っていたため、私は多少油断して修正をマージしてしまった。

発生した悲劇(テストをすり抜けた崩壊)

いざ動かしてみると、システムは信じられないほど壊れていました。ビックリするレベルです。

  1. ログイン直後に画面遷移が死ぬ
    パラメータ化して綺麗になったはずの画面遷移が、ログイン直後の時点で全く動かなくなりました。
  2. インポート/エクスポートの権限エラー
    SQL Expressを使用していたデータ処理で、テーブルの権限周りの例外が突然発生し始めました。
  3. DI登録漏れによる即死例外
    AIの提案で DBContext を綺麗にクラス分割した結果、複数のDI(依存性の注入)登録が漏れており、デバッグ起動直後に即座に例外を起こしました。

最大の罠:「ドメインルール」を破壊するリファクタリング

最も致命的だったのは、保存処理の分割です。

このプロジェクトには「一気に複数テーブルを保存する(A画面とB画面の編集内容を、C画面で一括保存する)」という、プロジェクト特有のルール(醍醐味的な処理)が存在しました。

しかしAIは、この肥大化した処理を見て「単一責任の原則に反している」と判断したのか、私の意図を無視し、「開いている画面のデータだけを保存する処理」へと勝手に書き換えてしまっていた
結果、C画面で保存ボタンを押しても、C画面のデータしか保存されないという致命的な業務バグを生み出しました。「これは嫌だ」とルールにも書いていたのに、です。

結論と教訓

デモ間近だったこともあり、急いで修正することになり、残業が発生しました。あまりの理不尽な壊れっぷりと焦りから、思わずAIへのプロンプトに「クソが」と書き込んで八つ当たりしてしまったほどです。
この地獄から得た教訓は以下の3つです。

  1. イベント前(デモ前)に大きな改修をしてはいけない
    基本中の基本ですが、少しずつ進めてテストもある状態だったのに、ここまで壊れるとは思いませんでした。
  2. 「良さそうな提案」だからと短絡的に取り入れない
    リファクタリングもレビュー内容も吟味して「良くなるなら実施しよう」と短絡的にやるのはダメだなと強く感じました。AIはドメインの背景を知りません。
  3. 1日に少しずつ進める慎重さを持つ
    AIがあるからといって慢心せず、「1日にちょっとだけリファクタリングする」という人間のペースと慎重さが必要です。

コメント

タイトルとURLをコピーしました