クリーンアーキテクチャという「型」の暴力 --- 過剰な抽象化が現場を壊すメカニズム
クリーンアーキテクチャという「型」の暴力 — 過剰な抽象化が現場を壊すメカニズム @sside 氏が X で投稿した、クリーンアーキテクチャの過剰適用への批判が反響を呼んでいます。 クリーンアーキテクチャかぶれの糞プロジェクト、異なる会社で2度目撃しました。(どっちもNestJS) この投稿は、@masuda220(増田亨)氏のツイートへの引用です。増田氏は以下のように述べています。 私の狭い観測範囲ではあるけれど、クリーンアーキテクチャを取り入れていると説明されたコードを見ると、過剰な変換コードと過剰な依存性の逆転をしているものが多い。実験目的であれば、やりすぎるのもありだと思うが、実プロダクトでは、不要な複雑さを持ち込んで苦しんでいるように見える。 2 人の指摘は、日本のエンジニアコミュニティで繰り返し議論されてきた「クリーンアーキテクチャのカーゴカルト問題」を改めて可視化しています。本記事では、クリーンアーキテクチャとは何か、カーゴカルトとは何かを整理した上で、なぜこの問題が繰り返し起きるのかを構造的に分析します。 クリーンアーキテクチャとは何か 起源と系譜 クリーンアーキテクチャは、Robert C. Martin(通称 Uncle Bob)が 2012 年にブログで提唱し、2017 年に書籍『Clean Architecture: A Craftsman’s Guide to Software Structure and Design』として体系化した設計思想です。 この思想は突然生まれたものではなく、先行するアーキテクチャパターンの集大成です。 年 アーキテクチャ 提唱者 核心 2005 ヘキサゴナルアーキテクチャ(Ports and Adapters) Alistair Cockburn アプリケーションを外部から分離する 2008 オニオンアーキテクチャ Jeffrey Palermo 依存関係を内側に向ける 2012 クリーンアーキテクチャ Robert C. Martin 上記を統合し SOLID 原則と結びつける クリーンアーキテクチャが新たに発明したものは実はほとんどありません。ヘキサゴナルアーキテクチャとオニオンアーキテクチャのルールを包含し、SOLID 原則(特に依存性逆転の原則)を軸に再構成したものです。 同心円図と依存性ルール 書籍で最も有名なのが、4 層の同心円図です。 ┌─────────────────────────────────────────┐ │ Frameworks & Drivers(外側) │ │ ┌───────────────────────────────────┐ │ │ │ Interface Adapters │ │ │ │ ┌─────────────────────────────┐ │ │ │ │ │ Application Business Rules │ │ │ │ │ │ ┌───────────────────────┐ │ │ │ │ │ │ │ Enterprise Business │ │ │ │ │ │ │ │ Rules(中心) │ │ │ │ │ │ │ └───────────────────────┘ │ │ │ │ │ └─────────────────────────────┘ │ │ │ └───────────────────────────────────┘ │ └─────────────────────────────────────────┘ 依存性ルール: すべての依存は外側から内側に向かう(→ 中心) 依存性ルールがこのアーキテクチャの柱です。外側の層(フレームワーク、DB、UI)が内側の層(ビジネスロジック)に依存し、逆方向の依存は許されません。これにより、ビジネスロジックはフレームワークやデータベースの変更に影響されず、テスト可能で長寿命なコードになるとされています。 ...