Metaの元エンジニアは、AIツールがコードベースの大部分を生成できる一方で、長期的なスケーラビリティや高可用性を考慮しない「脆弱な」コードを生成することが多いと報告している。AI主導の開発への移行は企業の期待としてますます高まっているが、ソフトウェアが人間のユーザーや保守性ではなく、機械の論理に合わせて最適化される「enshittification(劣化)」のサイクルを生み出している可能性がある。

コードベースの脆弱性のメカニズム

AIモデルは、自身の即時的なコンテキストウィンドウ内に収まる問題を解決する傾向があり、長期的なアーキテクチャへの影響を無視することが多い。その結果、4つの主要な脆弱性のタイプが生じる。すなわち、浅いテスト、過度な複雑性、人間の理解の低下、そして人間のレビュー能力を上回るコードの生成速度である。

例えば、AIエージェントは単純なget/setメソッドに対して多数のテストを書く一方で、複雑なエンドツーエンドのシナリオをカバーできないことがある。これにより、重要なユーザーパスがテストされていないにもかかわらず、行レベルのカバレッジ指標が高く保たれるため、誤った安心感を生み出すことになる。

「AIは、その比較的小さな枠組みの中では理解できない長期的な問題には全く無頓着な一方で、コンテキストウィンドウ内に収まる問題を非常にうまく解決する傾向がある。」

— AI usage generates a fragile codebase

保守とインシデント対応への影響

AIに大きく依存するコードベースは、時間の経過とともに本番環境でのインシデント増加を経験する可能性がある。チームの人間開発者が基礎となるアルゴリズムやデータ構造を浅くしか理解していない場合、障害の根本原因を特定することがより困難になるためである。

本番環境で問題が発生した際、開発者は複雑でテストが不十分な領域をナビゲートしなければならない。この慣れの欠如は、インシデントの緩和に必要な時間を延長させ、SaaSプロバイダーにとってより大きな金銭的および運用的な損失を招く可能性がある。

人間の手触り vs 機械の論理

著者は、AIによってAIのために作られたソフトウェアには、高品質な製品に必要な「人間の手触り」が欠けていると主張している。AIは機能的なコードを生成できるものの、人間のユーザーが実際に製品とどのように対話するか、あるいは人間の開発者がそれをどのように保守する必要があるかに合わせて体験を調整することに失敗する可能性がある。

このトレードオフは、AI生成のスピードと、人間が設計したアーキテクチャの回復力の間の選択である。高品質なソフトウェアのためには、製品が魅力的で、楽しく、構造的に健全であることを保証するために、人間の視点が不可欠であると著者は示唆している。

Hacker Newsの読者の反応

  • 体験談: 7ヶ月間にわたり50万行のモバイルアプリのコードベースを管理したあるコメント主は、AI生成コードの脆弱性は実際には重要ではなく、モデルの進化によって保守はむしろ容易になったと主張した。 コメント ↗
  • 体験談: 別のユーザーは、記事の主張とは反対の経験を共有し、LLM生成コードの冗長性と硬直性が、生産バグを減らすための具体性の強制要因として機能したと述べた。 コメント ↗
  • 懐疑的: 数人のコメント主は、AI生成の脆弱性に関する懸念は誇張されている可能性があり、使用するツールに関わらず、人間が書いた大規模なコードベースも必然的に「スパゲッティコード」へと劣化していくと指摘した。 コメント ↗
  • 代替案: あるコメント主は、静的型付け言語と関数型プログラミングを使用することで、型システムが検証できないものだけにテストを限定し、コードの強度を確保できると提案した。 コメント ↗

Hacker Newsのスレッドで出た意見の要約です。事実として検証されたものではありません。 議論の全文を読む ↗