クリーンアーキテクチャはアーキテクチャではない
はじめに
この記事は、クリーンアーキテクチャは各モジュールをどこに配置すればよいかを明確に定めているわけではないことを解説する記事です。
クリーンアーキテクチャ = 有名なあの図通りに各モジュールを配置すること
と考える人がどうやら多いようです。
詳しくは後述しますが、そのように捉えてしまうと応用範囲が狭くなってしまいもったいないです。
この記事を読むことで、クリーンアーキテクチャの正しい立ち位置が理解できると思います。
この気づきを通して、今よりももっとクリーンアーキテクチャを業務に活かせるようになっていただけたら嬉しいです。
アーキテクチャとは
クリーンアーキテクチャの説明の前に、アーキテクチャという言葉の意味を確認します。
ソフトウェアにおけるアーキテクチャの定義は、各モジュールをどこに配置すればよいか明確に定めたもの(※1)とします。
(※1)諸説あり
たとえば、有名なアーキテクチャの一例であるMVCアーキテクチャを考えます。
モデル、ビュー、コントローラがあって、それぞれの意味はこれこれで、こういう役割のモジュールをここに配置します…というのが明確に決まっています。
こういうのが、アーキテクチャという言葉が持つ意味合いです。
クリーンアーキテクチャとは
クリーンアーキテクチャとは、以下のようなアドバイスを指します。
本質・非本質でレイヤー分けしよう
依存方向は非本質から本質に向けよう
そろそろタイトル回収をします。
クリーンアーキテクチャは、各モジュールをどこに配置すればよいかを明確に定めているわけではありません。
つまり、有名なあの図の通りに実装すべきだと定めているわけではありません。
あくまで例として扱っているにすぎません。
実際、クリーンアーキテクチャの実装例を検索すると色々なリポジトリがヒットしますが、ディレクトリ構成は千差万別です。
各モジュールをどこに配置すればよいかを明確に定めているのがアーキテクチャであれば、クリーンアーキテクチャはアーキテクチャではない、といえるわけです。
クリーンアーキテクチャは、我々がアーキテクチャを考える際の足がかりとなってくれているにすぎません。
たまに耳にする「クリーンアーキテクチャでいこう」というのは「このプロジェクトでは読みやすいソースコードを書こう」くらい何も決まっていない状態(※2)だと認識しましょう。
(※2)この表現は『ちょうぜつソフトウェア設計』から拝借しました
足がかりにすぎないからと言って価値がないわけではありません。
何もない状態からアーキテクチャを決定するより、はるかに我々を楽にしてくれます。
レイヤー分けの方針と、それらの依存方向まで定めてくれているのですから。
盲目的に有名なあの図の通りに実装しようとするだけだと、クリーンアーキテクチャが語ってくれている上述のアドバイスが見えなくなります。
それが見えなくなると応用範囲が狭まることになり、非常にもったいないわけです。
まとめ
アーキテクチャとは各モジュールをどこに配置すればよいか明確に定めたもの
クリーンアーキテクチャは以下方針を示すもの
本質・非本質でレイヤー分けしよう
依存方向は非本質から本質に向けよう
クリーンアーキテクチャはあくまで方針なので、各々が適切だと思うアーキテクチャを考案しましょう、それがあなたの腕の見せどころ
さいごに
はじめてキャッチーなタイトルをつけてみました。
もちろんキャッチーさを優先して嘘をついたりはしていません。
少しでも明日の開発に役立ててくれたら嬉しいです。
最後までご覧いただきありがとうございました。