AI時代において、DRYとSOLIDはこれまで以上に重要である
著者は、AIコーディングツールの普及に伴い、DRYとSOLID原則(特に単一責任、オープン/クローズド、インターフェース分離)の重要性が増していると主張する。AIはコードの再利用を考慮せず、重複コードを生成しがちで、それがメンテナンス上の問題を引き起こす。これらの原則を守ることでAIがより良いコードを生成できるようになり、反復的な開発と品質重視のアプローチが推奨される。
AI時代において、DRYとSOLIDはこれまで以上に重要である
AIコーディングツールの普及に伴い、DRY(Don't Repeat Yourself)とSOLID原則の有効性について議論が再燃している。AIが重複コードを処理できるようになったため、重複はむしろ有益だという意見もある。しかし、長年のプログラミング経験とAIツールとの実践に基づき、著者のJan Cizmarは逆の結論に達した。AI時代こそ、DRYとSOLIDの一部原則がより重要になると述べている。
著者は、SOLID原則のうちリスコフの置換原則(L)と依存性逆転の原則(D)は実際の開発では価値が限定的だと指摘する。リスコフの原則は深い継承階層でのみ意味を持つが、現代のコードベースはコンポジションとインターフェースを好む。依存性逆転の原則は不必要なインターフェース抽象化につながりがちで、著者は本当に必要なときだけインターフェースを作成すべきと主張する。実際に重要なのは、単一責任(S)、オープン/クローズド(O)、インターフェース分離(I)であり、これらをSOIと呼んでいる。
AI生成コードには再利用を無視する傾向がある。2億1100万行のコードを分析したGitClearの研究によると、2020年から2024年にかけてコピーペーストされたコードが48%増加し、リファクタリングされたコードは24%から10%未満に減少した。これはAIコーディングツールの急成長と時期的に一致する。AIは特定のタスクに集中するため、既存コードに同様の機能がないかを考慮せず、再利用可能なコンポーネントを抽出しない。その結果、バックエンドでは機能が重複し、フロントエンドではコンポーネントのスタイルが統一されなくなる。
著者は「AIがすべての重複コードを更新する」という考えも否定する。AIはあるコードを修正する際に、他の場所にある同じロジックを自動的に検索して同期することはない。実際に、AIがコードをコピーした際にロジックの一部を欠落させ、バグを引き起こすケースも報告されている。時間が経つにつれて、異なる場所のコピーにずれが生じ、検出が難しい技術的負債となる。
「より詳細な仕様を書く」という解決策については、開発者に余分な負担をかけ、設計が最初から完璧であることを前提としていると批判する。優れたアーキテクチャは多くの場合、反復的な改良を通じて生まれる。
著者の推奨は、基本原則に立ち返ることだ。コードをDRYに保ち、SOIに従い、拡張と再利用が容易で、直接変更する必要のないコードを書く。例えば、Material UIはオープン/クローズドの原則に従い、ソースコードを変更せずにカスタマイズできる。コードベースが整理されていれば、AIもより良い結果を生み出す。さらに、著者は反復的な開発アプローチを提唱する。少しずつ構築し、レビューし、テストし、コードをクリーンアップする。生成されたコードを完全に理解することが重要で、一度に大量のコードを生成して軽くレビューするだけでは、所有権と責任を放棄することになる。
最終的に、著者はAIが大量のコードを簡単に生成できるようになったが、世界が必要としているのはより多くのコードではなく、より高品質のコードだと強調する。いわゆる「バイブコーディング」で構築されたソフトウェアはスケールせず、コード品質へのこだわりが持続可能なメンテナンスにつながる。