クリーンアーキテクチャ、誤解されがちなポイントを語る
※この記事は、掲題についてAIと会話した内容を、読み手に伝わりやすいようにAIに整形して書いてもらったものです。
登場人物
- 嬢(私):クリーンアーキテクチャについてもやもやしている
- ジム(執事):ちょっとシニカルで理論派
- アベル(兄貴分):カジュアルで直感的、実務視点が強い
序章:クリーンアーキテクチャって、なんか誤解されてない?
嬢「最近さ、クリーンアーキテクチャについて話してる人を見かけるんだけど、『クリーンアーキテクチャで作りました』とか『このケースではクリーンアーキテクチャは向かない』みたいな言い方をしてるのを聞くと、なんか違和感があるのよね。クリーンアーキテクチャって、そもそも『こういう型で作ればOK』っていうものじゃなくて、変更に強いシステムを設計するための考え方 じゃない?」
アベル「ああ、それあるな。まるでフレームワークとかテンプレートみたいな扱いされがちなんだけど、本来は『どう設計すれば変更に強くなるか?』っていう原則の話なんだよな。」
ジム「まさに。『クリーンアーキテクチャで作りました』という表現自体が誤解を生んでいるんですよね。本来は『クリーンアーキテクチャの原則を意識して設計した』というのが正しい言い方になるはずです。」
誤解① クリーンアーキテクチャの形を真似すれば正しい設計になる?
嬢「あとね、たまに『クリーンアーキテクチャを使ったけどうまくいかなかった』って言う人もいるけど、それって考え方の活かし方を間違えただけじゃないの? クリーンアーキテクチャ自体が悪いわけじゃなくて、設計の仕方の問題なんじゃないかな。」
ジム「その通りです。クリーンアーキテクチャがうまく機能しないケースがあるとすれば、それは『原則の理解が足りていない』か『ビジネス要件に合った形で設計できていない』かのどちらかですね。」
アベル「結局のところ、設計の仕方がすべて なんだよな。例えば、シンプルなCRUDアプリなのに、やたらと細かいレイヤーを分けすぎて、かえって複雑になってるケースとか。でも、それってクリーンアーキテクチャの原則を活かすどころか、むしろ形だけ真似してしまった結果なんだよ。」
ジム「そうですね。クリーンアーキテクチャは『こういうことを考慮した設計なら変更に強い』という考え方であって、盲目的に構造を決めればいいわけではありません。」
誤解② UIの設計は最後にすべき?
嬢「私がクリーンアーキテクチャの本を読んだきっかけは、昔、後輩が『クリーンアーキテクチャを実践するなら、画面設計は工程の最後に行うべき』って言ってて、それを聞いて、ん? って思ったからなのね。UIの設計って、ユーザーの行動を想像しながら内部設計と行ったり来たりしながら進めるものじゃない? だから、そんな単純に『最後にする』なんてことあるのかなって。」
アベル「それ、後輩くんの解釈、ちょっとズレてるな。クリーンアーキテクチャでは、ビジネスロジックをUIの影響から独立させることは大事だけど、それと『UI設計は最後にする』っていうのは別の話だよ。」
ジム「おそらく後輩くんは、『ビジネスルールはUIに依存しないようにするべき』という考え方を、『UIのことは後回しにすべき』と誤解してしまったのでしょう。しかし、実際のシステム設計では、UIと内部ロジックを往復しながら調整していくのが普通です。」
アベル「そうそう。UIって結局、システムとユーザーの接点だから、ちゃんと設計に組み込まないと『使いにくいけどクリーンアーキテクチャだから!』みたいな意味不明なものが出来上がっちまう。」
ジム「設計はフィードバックの中で洗練されるものです。最初にUIを考えずにビジネスロジックを固めてしまうと、後からUIと合わせる段階で無駄な修正が発生し、かえって柔軟性を失う可能性があります。」
嬢「やっぱりそうよね。実際に本を読んでみたら、やっぱり後輩の解釈がズレていたってわかったのよね。クリーンアーキテクチャの本って、システム設計の経験が浅い人が読むと、一部の概念を誤解しやすいのかも。」
まとめ:クリーンアーキテクチャは考え方であって、型ではない
嬢「こうやって話してみると、やっぱりクリーンアーキテクチャって『こういう形にすればいい』っていう型の話じゃなくて、『どうやって変更に強い設計をするか』っていう考え方の話なのよね。」
ジム「ええ。そのため、『クリーンアーキテクチャで作りました』という表現よりも、『クリーンアーキテクチャの原則を意識して設計しました』という方が適切です。」
アベル「結局、重要なのは『変更に耐えられるシステムを作ること』であって、クリーンアーキテクチャの形を真似ることじゃないんだよな。考え方を理解しないまま表面的に取り入れてしまうと、逆に柔軟性のないシステムになっちまう。」
ジム「そうですね。クリーンアーキテクチャの目的は、『長期的に変更しやすい設計を実現すること』です。そのためには、ただ形式に従うのではなく、ビジネス要件に合わせてどのように設計するのが最適かを考え続ける必要があります。」
嬢「だよね。結局、クリーンアーキテクチャを意識するにしても、その目的を見失わずに、システムの性質に応じた設計を考えること が大事。『これが正解!』っていう答えがあるわけじゃなくて、考え続けること自体がクリーンアーキテクチャの本質 なんだと思うわ。」