変わることのない『Clean Architecture』の原則

『Clean Architecture 達人に学ぶソフトウェアの構造と設計』は、オブジェクト指向プログラミング、アジャイル開発の第一人者であるボブおじさん。Robert C. Martin の著作だ。長年の経験をもとに良いアーキテクチャに共通する設計原則を解説した本である。

 

一時期あの謎円が話題になったこともあり、ソフトウェア開発に関わる人なら1度は耳にした本だろう。クリーンアーキテクチャというキャッチーな言葉だけが独り歩きしてるが、本書を薦めるソフトウェアエンジニアは多い。

では、少しだけ本書の内容を紹介しよう。

アーキテクチャの原則

本書で紹介される設計原則は、有名なSOLID原則と非循環依存の原則、安定依存の原則等である。特に重要で何度も繰り返されるのは、依存性逆転の原則と安定依存の原則だ。これらの原則はレイヤーを変えて度々登場する。

簡単にいえばアーキテクチャの原則は、

「コンポーネント、モジュール、クラスを正しく分割し、より変更されにくいものに依存せよ」

である。すなわち下位モジュールではなく、上位モジュールに、詳細ではなく抽象に依存するということだ。それを実現するためには、依存性の逆転が必要である。

実はあの有名な同心円もこの原則を図にしたものに過ぎない。真ん中に行くほど、上位モジュールとなり、外側ほど実装の詳細である。そして依存の方向性は常に円の真ん中を向くべきである。

f:id:tax1729:20220213235428p:plain

クリーンアーキテクチャ

アーキテクチャの境界

ボブおじさんは、ソフトウェアアーキテクトの仕事は境界線を引くことだと言う。この境界は「重要なもの」と「重要でないもの」の間にある。例えば、ビジネスルールとデータベースの間にこの境界は存在する。

ソフトウェアにおいて、重要なのはビジネスルールだ。DDDの文脈であればドメインルールと呼ばれる。境界を横切るようにデータベースからビジネスルールへと依存関係の線が引かれる。つまり、「重要でないもの」から「重要なもの」への依存だ。

アーキテクトの仕事は、境界を認識しどのタイミングで境界に線を引くかを判断することだ。時には境界を線に引くことを先延ばにし、部分的にのみ境界線を引く。ときに境界を引くのがコストに見合わないこともある。それを判断するのがアーキテクトである。

著者はどんなときでも、クリーンアーキテクチャを目指すべきと主張しているわけではない。優れたアーキテクチャを作るのは、コストがかかる。大事なのは上位モジュールと下位モジュールの間の境界を認識し注意深く監視することである。

感想

非常に良い本であるが、読み解くにはそれなりに骨が折れた。いくらか現場で経験を積み、本書以外で基本的な設計論を学んでないと難しく感じると思う。

説明されるのは、非常に抽象的なアーキテクチャの原則だ。さらに説明に使われる例は結構古い。実際、かなり理解に時間がかかる章もある。

しかし、扱っているプログラミング言語やフレームワーク、システムがひと昔前だったとしても、本書の価値が変わることはない。著者のいう通り、ソフトウェアアーキテクチャのルールはいつの時代も同じだからである。

古い例が今の時代になっても使えることが、アーキテクチャのルールが時間の経過に対して、堅牢である証拠である。

おそらく僕も一度読んだだけでは、真髄を理解し切れていないだろう。時間を置いて再度読んでみたい。そして設計に迷った時は、いつでも参考にしたい。