AIの使用は脆弱なコードベースを生み出す
AI usage generates a fragile codebase (evanxmerz.com)
要約
この記事は、AI(特にLLM)をコーディングツールとして多用することが、長期的に見て脆弱で保守性の低いコードベースを生み出す原因になると論じています。AIは表面的なテストしか書かず、コードの複雑性を増大させ、人間の開発者の理解を低下させ、品質基準の維持を困難にすると指摘しています。その結果、インシデントの増加、インシデントからの復旧時間の長期化、ユーザーにしか見えないエラーの発生、そして最終的にはユーザー体験の悪化につながると警鐘を鳴らしています。
全文翻訳
AIの使用は脆弱なコードベースを生み出す
私がMetaを5月に解雇された理由は推測するしかないのですが、同僚よりもAI/LLMをコーディングツールとして採用することに少し抵抗があったことが理由の一つだと疑っています。誤解しないでください、最後の数ヶ月間はAIを使ってコードの90%以上を生成していましたが、これはまともな評価を得るための最低限でした。しかし、AIは私が書くコードの量を10倍にはしませんでした。2倍にもなりませんでした。
私はコードの品質に焦点を当てていました。AIに大きく依存している同僚たちがプッシュしていたコードを見て、それが脆いコードであることに気づきました。長期的に技術的負債につながる多くの微妙な問題があり、非常に優秀なプログラマーでさえ、明白な問題を見過ごしていました。例えば、私のチームで最高のプログラマーの一人が、マウスオーバーCSS効果のためにJavaScriptイベントを使用するコードをマージしようとしているのを見かけましたが、これはマウスオーバーを書く上で全くスケーラブルでない方法です。
今、私は別の大手テクノロジー企業に勤めており、AIを使ってコードの100%を生成するという完全な切り替えを行いました。それが今日の期待だからです。それでも、多くの人々が、これが大規模なSaaS製品の開発を続ける持続可能な方法ではないことに気づき始めているのを見ることができます。AIは、そのコンテキストウィンドウ内に収まる問題を非常によく解決しますが、比較的狭いフレームでは理解できない長期的な問題には全く無頓着です。
この記事では、AIの使用が、高可用性と高スケーラビリティのSaaSアプリケーションの要求に対して回復力のない脆弱なコードベースをもたらす4つの方法を挙げます。
ちなみに、この記事のすべての単語は人間によって書かれました。以下の画像はAIによって生成されましたが、この記事はAIのスラッジではありません。
[画像: 心配そうなロボットが、ぐらつくトランプの家として描かれたコードベースに、別のコード片を置いている。]
AIがコードベースを脆弱にする4つの方法
AIが脆弱なコードベースを生成する最も一般的な4つの方法を以下に示します。
1. AIは浅いテストを書く
現代のLLMの最も明白な失敗の一つは、人間にとって重要なことをカバーしない単純な自動テストケースを書きがちなことです。頻繁に、AIエージェントが、些細で通常あまりテストを必要としないget/setメソッドのテストを大量に書いているのを見かけます。AIがE2Eテストを書く場合、それらはコードベースで既にカバーされているケースのみをカバーする傾向があります。つまり、AIは単一のユーザータイプ、または表面的なインタラクションのみをカバーするテストを書きます。これにより、ラインレベルのカバレッジメトリックでは捕捉されない、テストカバレッジの巨大なギャップが生じます。
2. AIは過度に複雑なコードを書く
AIはまた、過度に複雑なコードを書く傾向があります。単一のヘルパーメソッドで十分な場合でも、しばしば2つか3つのヘルパーメソッドを使用します。DRY(Don't Repeat Yourself)のようなコーディングガイドラインを、それがコードを人間の開発者にとってデバッグや理解をより困難にするという、その厳格さの代償を払ってまで、過度に追求します。
3. AIへの依存は人間の理解を低下させる
そして、AIコードベースの3つ目の問題はこれです:人間はそれらを理解しません。企業がコード生成のためにAIエージェントに依存する期間が長くなるほど、コードベースを理解する開発者は少なくなります。これは、開発者が回復力のあるコードベースを構築するために必要なことをできないことを意味します。彼らは、プルリクエストに既存の構造と互換性のない新しい抽象化が含まれている場合にそれを見抜くほど、データ構造とアルゴリズムを十分に理解していません。
4. AIは高品質の基準を維持するには速すぎる
AIは、人間の開発者が高品質の基準を維持するには速すぎます。各プルリクエストは前のものよりも速く来て、さらに短い時間でレビューされなければなりません。これにより、開発者はコードを skimming し、長期的な技術的負債につながる重要な詳細を見落とすことになります。テストのギャップや不適切な変数名のような小さな品質問題は、コードベースに蓄積され、最終的にはスパゲッティコードの泥沼になります。
脆弱なコードベースであることの4つの兆候
コーディングエージェントがコードベースを損なっているかどうか確信が持てない場合は、脆弱でAI生成されたコードベースの以下の症状を探してみてください。
1. AI生成コードベースはインシデントが多い
部門をエージェント型コーディングに切り替えてから、インシデントの数はゆっくりと増加し始めましたか?最初は、私たち全員がエージェントを使って大量のコードを生成していたとき、従来のコーディングとそれほど違いはないように見えました。PRは来てマージされ、すべて順調に見えました。しかし、その月末にp0が1つ発生し、翌月には2つのSEVが発生しました。そして翌月にはさらに多くなりました。今では、エージェント型コーディングを1〜2年行った後、週末ごとにインシデントが発生しているようです。AIコーディングエージェントが、顧客に影響を与えるインシデントが増加している理由です。
2. AIコードベースではインシデントからの回復に時間がかかる
インシデントが増えるだけでなく、インシデントの緩和にも時間がかかります。事実として、チームの人間開発者はコードベースに対する理解が浅くなっています。コーディングエージェントが顧客が直面している問題を見つけられない場合、人間は非常に複雑でテストが不十分なコードベースを掘り下げることになります。彼らは基本的に未知の領域に入ることになるため、何が間違っているのかを理解するのに時間がかかります。したがって、企業は解決に時間がかかるインシデントによって、ますます多くのお金を失っています。
3. AI生成コードベースはユーザーにしか見えないエラーを作成する
人間がコードに時間を費やさないと、すべてのユースケースを見逃します。AIが適切に分析を計装し、すべてのエラーをキャッチしていることを確認していないため、実際の人間がコードをどのように使用しているかを理解できません。したがって、コードベースに目に見えないエラーが出現し始めます。エラーは捕捉されず、自動テストや開発者の手動テストでテストされているユーザータイプとは対照的に、実際のユーザーにのみ見えます。
4. AIはユーザー体験の低下につながる
そして、AIコードベースの究極の問題につながります:それらは人間向けに作られていません。AIコードベースは、AIがAIのために作ったソフトウェアです。それらは、人間のユーザーが製品を使用する方法に合わせて調整されておらず、人間開発者が製品を保守する必要がある方法に合わせて調整されていません。ユーザーと開発者の両方の側で体験が悪化し、エンシュティフィケーション(enshittification)の悪循環につながります。
人間向けに作られた製品には人間のタッチが必要
事実として、製品が人間の顧客を満足させるためには、人間の視点から情報を提供する必要があります。レストランで機械に注文することを誰も好みません。ウェブサイトで服を探しても、対面で買うよりもフィット感が悪くなることは常にあります。SaaS製品も同様です。SaaS製品を機械に任せると、ユーザーにとって価値のある人間のタッチを失うことになります。これは、価格だけで競争する最も安価な製品では機能するかもしれませんが、高品質のソフトウェア製品は人間のタッチを持ち続けるでしょう。最高で最も高価な製品は、人間の開発者によって人間のユーザーに合わせて調整されます。それらは魅力的で使いやすいものになるでしょう。それらは主にAIによって開発されていないため、脆弱ではありません。