AIによるコード生成が当たり前になりました。
そして、多くのエンジニアがAIを活用してコードベースの改善に取り組んでいます。
しかし、AIに「品質を改善して」と繰り返し依頼し続けたら、何が起きるのでしょうか。
海外のRedditコミュニティで、興味深い実験が話題になっていました。
ある開発者が、AIに対して「コードベースの品質を改善してください」という指示を200回繰り返し実行させたのです。
その結果は、多くのエンジニアにとって示唆に富むものでした。
本記事では、この実験から得られる教訓について解説します。
また、AIを活用したコード改善の正しいアプローチについても触れていきます。
実験の概要と衝撃的な結果
この実験は非常にシンプルなものでした。
AIに「コードベースの品質を改善してください」という曖昧な指示を与えます。
そして、それをループで200回繰り返すというものです。
多くの人が予想できるように、結果は惨憺たるものになりました。
最初の数回は、それなりに妥当な改善提案が出てきたようです。
しかし、繰り返すにつれて状況は悪化の一途をたどりました。
コードは肥大化していきます。
同じ処理があちこちに重複して現れるようになったのです。
さらに問題だったのは、AIが有用なサードパーティライブラリを削除し始めたことです。
そして、その機能を自前で再実装していきました。
「改善」の名のもとに、保守性の高いコードが冗長で管理しにくいコードへと変貌したのです。
最終的に残されたのは、メンテナンスコストが大幅に増加した、ほとんど無意味なコードの山でした。
なぜこのような結果になったのか
この実験が失敗した原因は、主に3つあります。
まず、プロンプトが曖昧すぎました。
「品質を改善して」という指示には、品質の定義がありません。
テストの充実を意味するのか、ドキュメントの追加なのか、コード量の削減なのか。
具体的な基準がなければ、AIは何をすべきか判断できないのです。
次に、AIは「もう改善の余地はありません」と言えない傾向があります。
Redditのコメントで指摘されていたのですが、AIは常に何かしらの回答を返すよう訓練されています。
そのため、改善点がなくても無理やり「改善」を試みてしまうのです。
そして最も重要な問題は、人間のフィードバックループが存在しなかったことです。
スキルを持ったエンジニアがいれば、最初の数回で「これは間違った方向に進んでいる」と気づけたはずでしょう。
AIはコード全体を把握していない
コメント欄で興味深い指摘がありました。
AIはコードベース全体を完全に把握しているわけではありません。
そのため、重複コードの作成や過剰なソリューションを生み出しがちだというのです。
実際、AIにファイルの移動を依頼したところ、mvコマンドを使わずに1行ずつコピーし始めたという報告もありました。
AIは必ずしも効率的な解決策を選択するとは限りません。
また、DRY(Don’t Repeat Yourself)原則を明示的に指示しても、AIが既存のコードを重複して書いてしまうケースも報告されています。
これは、AIがコードベース全体のコンテキストを維持することの難しさを物語っているでしょう。
人間がループに入る重要性
この実験は、人間の介入なしにAIを走らせ続けることの危険性を如実に示しています。
あるコメントは、この実験がAIの新しいベンチマークになりうると指摘していました。
長期的な推論能力をテストできます。
また、自身の作業が品質を低下させていないかを判断する能力も測れるというのです。
現状のAIモデルには、自律的な判断を任せるには限界があります。
制約、明確な指示、そしてフィードバックループがなければ、大規模言語モデルは本来の力を発揮できません。
AIを活用したコード改善の正しいアプローチ
では、AIを使ってコード品質を改善するには、どうすればよいのでしょうか。
Redditのコメント欄には、実践的なアドバイスがいくつか寄せられていました。
コードの削減を依頼する
「品質を改善して」ではなく、「コードを減らして」と依頼するアプローチがあります。
AIは放っておくと冗長なコードを生成しがちです。
そのため、機能実装後の2番目のステップとして、コード量の削減を依頼するのが効果的でしょう。
不要な処理や重複を見つけて整理する作業をAIに任せられます。
重複コードの関数化を指示する
「2回以上使われているコードを探し出し、それを独立した関数として抽出してください」という指示も有効です。
AIに漠然と改善を求めるのではなく、具体的なリファクタリングタスクを与えます。
そうすることで、期待通りの結果を得やすくなるのです。
制約と期待値を明示する
曖昧なプロンプトは曖昧な結果を生みます。
「シンプルさを優先し、エッジケースに対応するための複雑化は避けてください」といった制約を与えましょう。
こうすることで、AIの暴走を防げます。
実用的な抑制を促すガイドラインを明示することが重要です。
三項演算子の乱用に注意
コード削減を依頼すると、AIは三項演算子を多用し始める傾向があります。
確かにコード量は減ります。
しかし、可読性は低下するのです。
「三項演算子は使わないでください」という制約を加えることで、この問題を回避できるでしょう。
将来のコード開発はどう変わるか
興味深い視点として、あるコメントが目を引きました。
「将来、Pythonコードをコンパイル後のバイナリのように扱う時代が来るかもしれない」というものです。
つまり、コードの重複や構造を細かく気にしなくなる時代です。
「このコードは遅いので性能を改善して」とだけ指示すればよくなります。
コード自体を再構築するコストが十分に安くなれば、テストケースとQAだけが重要になるかもしれません。
ただし、現時点ではまだその段階に達していません。
AIの出力を批判的に評価し、必要に応じて修正を加える人間の役割は依然として重要です。
まとめ
AIにコード品質改善を200回繰り返させた実験は、印象的な失敗例を提供してくれました。
この実験から学べる教訓は明確です。
AIは強力なツールです。
しかし、明確な指示、適切な制約、そして人間によるフィードバックがなければ、意図した結果を得られません。
「ゴミを入れればゴミが出る」という古典的な原則は、AI時代においても健在です。
曖昧なプロンプトは曖昧な結果を生みます。
最悪の場合、元のコードよりも品質の低いものを作り出してしまうのです。
AIを活用したコード改善で成功するためには、以下の点を心がけてください。
「品質」の定義を具体的に示すこと。
改善の方向性と制約を明示すること。
そして、AIの出力を常に人間の目でレビューすることです。
AIはあくまでもツールであり、それを使いこなすのは人間の仕事です。
適切に活用すれば、AIはコード品質向上の強力なパートナーになるでしょう。
