TL;DL
- Clean Architecture と The Clean Architecture は違う
- The Clean Architecture ⊂ Clean Architecture
- 同心円の図は The Clean Architecture ⊂ Clean Architecture
- 重要なのは Clean Architecture の思想
- 日本語にすると Clean Architecture も The Clean Architecture もクリーンアーキテクチャ
- この記事は整理を目的としており、Clean Architecture や The Clean Architecture の方法論については書かれていない
はじめに
タイトルにもあるように『Clean Architecture』と『The Clean Architecture』は違うという話をしたい。この話題自体は、n 番煎であり、既に多くの方がブログや X (旧 Twitter) で発言している。
- (The) Clean Architecture と clean architecture を区別する · mochieer.tech
- 世界一わかりやすいClean Architecture - 技術レイヤー分割より大切なモノ | ドクセル
- The Clean ArchitectureがWebフロントエンドでしっくりこないのは何故か / Why The Clean Architecture does not fit with Web Frontend - Speaker Deck
クリーン・アーキテクチャという形式的なアーキテクチャパターンがあるわけではなくクリーンなアーキテクチャを実現する原則や観点をまとめたものが「クリーン・アーキテクチャ」。ボブおじさんが例示したHowを無根拠になぞることがクリーン・アーキテクチャではない、という理解でいいと思う
— 加藤潤一(かとじゅん) (@j5ik2o) April 28, 2021
『Clean Architecture』の話をするとき「Clean Architectureというアーキテクチャは無いと考えてください」という話をして「!?」という反応になるのだけど、実際は原則の実践例の1つとしてあのドーナツが、しかも "The Clean Architecture" という名前で存在してしまっていて混乱に拍車をかけている
— Takuto Wada (@t_wada) April 28, 2021
しかし、『Clean Architecture』と『The Clean Architecture』を混同しているような記事が Qiita や Zenn で投稿され続けているのではないだろうか。
これから Clean Architecture を学ぶ人にとってノイズにしなからないため、改めて Clean Architecture 達人に学ぶソフトウェアの構造と設計 が何を言っているのかについて書いていこう。
諸悪の根源
英語では Clean Architecture と The Clean Architecture で The の有無によって何を指しているのか区別されているのに対して、日本語では Clean Architecture も The Clean Architecture も『クリーンアーキテクチャ』となる。両者は似て非なるものにもかかわらず、日本語話者にとってはその区別が英語表記されない限り難しい。
Clean シリーズ
Clean Architecture は Clean シリーズと呼ばれている Robert C. Martin が執筆した書籍 のうちの一つだ。
- Clean Code アジャイルソフトウェア達人の技
- Clean Coder プロフェッショナルプログラマへの道
- Clean Architecture 達人に学ぶソフトウェアの構造と設計
- Clean Agile 基本に立ち戻れ
- Clean Craftsmanship 規律、基準、倫理
Clean をシリーズとして冠しており、そのうちのアーキテクチャについて書かれた本で紹介されたアーキテクチャのため Clean Architecture となっている、と思っている。この命名については、クリーンアーキテクチャの功罪でも触れられているように Clean Architecture という名前は誤解を招く。
Clean Architecture
Clean Architecture を振り返る
Clean Architecture はあまりにも同心円の図で表現された The Clean Architecture が有名だが、そこに至るまでにソフトウェア開発においてよく知られた一般的なプラクティスやプログラミングの技法についての説明がされている。
第1部では、設計とアーキテクチャがソフトウェア開発に与える影響や価値について。第2部では、構造化プログラミング、オブジェクト指向プログラミング、関数型プログラミングについて。第3部では、頭文字を取って SOLID と呼ばれる 5 つの設計の原則について。第4部では、コンポーネントの原則について。そして、第5部で Clean Architecture と有名な The Clean Architecture に至る解説がなされている。
この中で第1部から第4部までは、Clean Architecture とは関係無く、保守可能なソフトウェアを開発する上で一般常識にあたる内容となっている。また、第2部を読めば特定の XXX 指向を語るプログラミング言語の機能を持ってプログラミングパラダイムを批判することが如何に意味がないことが理解できるだろう。少し前に書いた記事で触れたように Java の言語機能を持ち出してオブジェクト指向は〜という発想にはならないし、カプセル化、継承、ポリモーフィズムをもってしてオブジェクト指向という主張に惑わされることもないのではないだろうか。
The Clean Architecture
Clean な Architecture の一例としての The Clean Architecture について見てみよう。
ref: Clean Coder Blog
Clean Architecture から学べること
「Clean Architecture を振り返る」のセクションでも書いたが、Clean Architecture 達人に学ぶソフトウェアの構造と設計 には当たり前のことしか書かれていない。しかし、書かれている内容が基本的な知識となっている人にとってはあえてこの本を読んで学ぶようなものではなく、個々のトピックについてより詳しく解説された本が存在することを知っているため、そちらを読んだ方がよいという判断をするのではないだろうか。実際に、私がこの本を読んだのは 2019 年か 2020 年頃だったと思うが、7 年ほどエンジニアとして働いて思ったことは、世のコーダーは Clean Architecture に書かれていることを知った上でコーディングをして欲しいというとだ。 Clean Architecture に書かれていることを実践するべきかどうかはその組織やシステムに依存するが、 Clean Architecture で述べられている基本的なこと (The Clean Architecture に至るまでに書かれていること) は前提知識として共有されていて欲しい。

