書籍「Clean Architecture」を読んだまとめ

2018年9月2日 engineering

普段からソフトウェアの設計やアーキテクチャに関心があり色々調べていたのですが、 最近発売された、「Clean Architecture」がとても良さそうなので読みました。

結果すごく良かったのでエッセンスをまとめます。

書籍「Clean Architecture」

Clean Architecture 達人に学ぶソフトウェア構造と設計

この本は、「ソフトウェアの価値とはなんなのか」という着眼点から始まり、プログラミングのパラダイムに軽く触れたのちに、アーキテクチャの話に深く入っていきます。

題名から、いわゆる設計手法としての「Clean Architecture」についての話かと思いがちですが 内容はアーキテクチャとは何か、どういった目的意識があるのかいうアーキテクチャ全体的な概念などの非常にためになる話が多くいくつも気づきがありました。

以下、簡単にまとめます。

ソフトウェアの価値とは

ソフトウェアの価値は、「提供する機能」と「更新できること」にあります。

「提供する機能」とはそのままの意味で、そのソフトウェアが問題を解決することに価値があるということです。

「更新できること」は需要や周りの環境の変化に応じてソフトウェアが変化できること自体に価値があるということです。
ソフトウェアの「ソフト」とは柔軟に変化できることを表していて、継続的に更新できることは大きな価値になり得ます。

アーキテクチャとオブジェクト指向

アーキテクチャの目的とは、ソフトウェア継続的に更新し続けられる柔軟な状態にすることにあると言えるでしょう。
このため、変更が頻繁に起きるところと少ない箇所を分離しお互いが影響しないように適切にソフトウェアの境界を引いて行くことが重要です。

またソフトウェアには「方針」と「詳細」があるという風に言われています。 方針はソフトウェアがどのように問題を解決するかの方針、つまりはビジネスロジックのことを指します。
詳細とはデータベースや、フレームワーク、UIなどのことを指します。 この二つのうち、変更が頻繁に起こるのは「詳細」の方だと思います。

ソフトウェアの目的は「方針」側にあります。 (データベースの種類や、どのフレームワークを使用するかなどの詳細はソフトウェアの本質ではないということ)
この「方針」が「詳細」の変更に影響されないように(詳細に依存しないように)依存関係を管理することがアーキテクトの腕の見せ所です。

依存関係を完全に管理するためには、オブジェクト指向プログラミング (以下OOP) のパラダイムが非常に役に立ちます。
OOPの特徴であるポリモーフィズムにより、オブジェクト (あるいはコンポーネント) 同士の依存の方向を制御することができます。

具体的には、SOLIDの原則のDIP (依存関係逆転の法則) で依存の方向を逆転させることで、方針が詳細に依存しないようにして行くことができます。


ちなみに、SOLIDの原則については以下の本に非常に詳しく書かれています。

アジャイルソフトウェア開発の奥義 第2版 オブジェクト指向開発の神髄と匠の技

私もこの本に出会うまでは、SOLIDの原則について全く知りませんでした。 非常に分厚く読み応えがすごいですが、今ではプログラミングをする上の指針となる大事な原則を得られ、読んで良かったと思える一冊です。


話を戻しまして、書籍「Clean Architecture」には、ソフトウェアのどこに境界を引くのか、依存関係をどうやって管理するのか、についての具体的なエッセンスが多く書かれていました。

ここでは詳細には触れませんが、どのようにコンポーネントを分離するのかや、設計手法であるクリーンアーキテクチャの紹介などが印象的でした。

アーキテクチャの概念等の抽象的な話題から、実際にどうアーキテクチャを考えて行くかの指標になる具体的な話題まで揃っていて非常にお得感のある本でした。

感想

最初にこの本を読もうと思ったのが、kindle版の無料サンプルで公開されている以下の文を読んでこれは面白そうだぞっと感じたのがきっかけです。

崩壊したコードを書くほうがクリーンなコードを書くよりも常に遅い
Robert C.Martin; 角 征典; 高木 正弘. Clean Architecture 達人に学ぶソフトウェアの構造と設計 (アスキードワンゴ) (Kindle の位置No.460). 株式会社ドワンゴ. Kindle 版.

他には、

「あとでクリーンにすればいいよ。先に市場に出さなければ!」開発者たちはそうやっていつもごまかす。だが、あとでクリーンにすることはない。市場からのプレッシャーは止まらないからだ。「先に市場に出さなければ」ということは、後ろに競合他社が大勢いるということである。競合他社に追い抜かれないためには、 これからも走り続けるしかない。
Robert C.Martin; 角 征典; 高木 正弘. Clean Architecture 達人に学ぶソフトウェアの構造と設計 (アスキードワンゴ) (Kindle の位置No.448-452). 株式会社ドワンゴ. Kindle 版.

といった分も心に刺さりました。

まとめ

この本を読み、コードを書くときの自分の中の指標がアップデートされたので純粋に読んで良かったと思います。

アーキテクチャが必要な規模のソフトウェアに携わっていて、興味はあるけど日々悩みながら開発しているような方にお勧めできる良い本でした。