Clean Architecture は AI時代に過剰設計か、それとも救世主か
Clean ArchitectureはAI時代に過剰設計か、それとも救世主か。レイヤー分離・依存性逆転の原則・テスト容易性の観点から、2026年の現場での適否を実例で検証します。
この記事の目次
この記事でわかること:
- Clean Architectureの本質的価値と現代的課題
- AI時代における適否の判断基準
- 2026年の現場での折衷案
結論: 適切に使えば救世主、雑に使えば過剰設計
Clean Architecture(Robert C. Martin著、2017年)はAI時代に「過剰設計か、それとも救世主か」という議論が続いています。結論を先に言うと、適切に使えば救世主、雑に使えば過剰設計です。判断軸を整理します。
Clean Architectureの本質
Clean Architectureの核心は2つです。
- レイヤー分離: Entity / UseCase / Adapter / Frameworkの同心円
- 依存性逆転の原則(DIP): 内側のレイヤーは外側を知らない
これにより、ビジネスロジック(UseCase)はDB・UI・フレームワークから独立し、テストしやすく、変更に強いコードベースが作れます。
AI時代の救世主としての側面
1. テスト容易性が高い
UseCaseが純粋関数に近いため、AIエージェントが容易にテストコードを生成できます。モックも最小限で済みます。
2. 変更影響範囲が限定される
DBを切り替えてもUseCaseは変えなくてよい、UIを変えてもビジネスロジックは無傷—この性質はAIが安全に改修するうえで強力です。
3. 構造が明示的
レイヤーごとにディレクトリが分かれているため、AIが「どこに何を書くべきか」を迷いません。
過剰設計としての側面
1. ボイラープレートの多さ
1機能追加で、Entity・Repository Interface・UseCase・Controller・DTOと5ファイル以上作る必要があります。小規模プロジェクトでは明らかに過剰です。
2. AIが書く量が増える
AIに任せても5ファイル分の生成が必要で、トークン消費と時間が増えます。シンプルなCRUDなら冗長すぎます。
3. 学習コストが高い
初学者にとってレイヤー分けの原則を理解するのが難しく、結果として「形だけClean」な実装になりがちです。
判断基準
採用が向くケース
- 業務ロジックが複雑(金融、医療、保険など)
- 長期メンテナンス(5年以上)を想定
- チームに経験者がいる
- 外部依存(DB、API)が頻繁に変わる可能性
採用が向かないケース
- シンプルなCRUDが大半
- プロトタイプ・MVP段階
- 3年以内に作り直し前提
- チーム全員がClean Architectureに不慣れ
2026年の折衷案: Lightweight Clean
多くのチームは「軽量版Clean Architecture」を採用しています。レイヤーは3つ(Domain / UseCase / Adapter)に簡素化し、DTOやMapperは必要な時だけ作るアプローチです。
具体的なディレクトリ構造の例:
src/
domain/ # Entity、ValueObject
usecase/ # ビジネスロジック
adapter/ # DB、API、UI
infra/ # フレームワーク依存
これにより、Cleanの恩恵を残しつつボイラープレートを抑えられます。AIエージェントもこの3層構造ならスムーズに書けます。
事例: SaaSスタートアップ
あるBtoB SaaSでは、創業1年目は最低限のレイヤー分けで開始し、ユーザーが1万社を超えた段階で軽量Cleanに移行しました。テスト網羅率が48%から81%に上がり、AIが書いたPRのバグ率が半減しました。
逆に、創業初期からフルCleanを導入した別のスタートアップでは、機能追加速度が遅すぎて競合に先を越され、設計を捨てる結果になりました。タイミングが重要です。
AIとの相性を上げる工夫
Clean Architectureを採用するなら、以下を併用するとAI効果が最大化します。
- 各レイヤーに
README.mdを置き、責務を明記 - UseCaseのテンプレートをスニペット化
- CLAUDE.mdに「各レイヤーで書くべきこと・書くべきでないこと」を明記
- linterでレイヤー違反を検知
まとめ
Clean ArchitectureはAI時代に有効ですが、プロジェクトの段階と複雑性によって適否が変わります。MVP段階なら避け、複雑性が増したタイミングで軽量Clean に移行するのが現実解です。2026年は「原則は守りつつ、軽量化する」のがバランスの取れた選択肢です。