Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
誤解 クリーンアーキテクチャ
Search
satokoki
June 12, 2024
0
140
誤解 クリーンアーキテクチャ
おれはダーティアーキテクチャだった・・・・・・
satokoki
June 12, 2024
Tweet
Share
More Decks by satokoki
See All by satokoki
Re:ゼロから始めるドメイン駆動設計
kxuxl
0
91
Docker_OSS_ホスティング入門
kxuxl
0
250
事例で学ぶ プロダクト開発
kxuxl
0
66
WEBフロントエンドの秩序を保つ
kxuxl
0
88
Featured
See All Featured
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
356
29k
The World Runs on Bad Software
bkeepers
PRO
65
11k
The Art of Programming - Codeland 2020
erikaheidi
52
13k
A Modern Web Designer's Workflow
chriscoyier
693
190k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
28
9.1k
Reflections from 52 weeks, 52 projects
jeffersonlam
346
20k
Statistics for Hackers
jakevdp
796
220k
4 Signs Your Business is Dying
shpigford
180
21k
Fireside Chat
paigeccino
34
3k
GitHub's CSS Performance
jonrohan
1030
460k
Visualization
eitanlees
145
15k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
16
2.1k
Transcript
誤解 クリーンアーキテクチャ
佐藤 功樹(25)
None
None
これを書くにあたり
これを書くにあたり 本を読みました。 この発表を聞いて「なんかおかしいな~」と思ったら お気軽にフィードバックをお願いします。 また、発表を聞いて興味を持った方はこの本を読んだ ことがない人はぜひ読んでみてください。 わりと賛否両論分かれるところがあるので、自分の中 でスタンスを取っておくにも良い一冊です。 わたしの姿勢としては、 このスライドの最後にお伝えします。
もくじ 1. 誤解 クリーンアーキテクチャ 2. 物語 クリーンアーキテクチャ 3. 実践 クリーンアーキテクチャ 4. なんかつらい 5.
つらくない実装
誤解 クリーンアーキテクチャ
Sec. 誤解 クリーンアーキテクチャ 誤解1
Sec. 誤解 クリーンアーキテクチャ - 誤解1 クリーンアーキテクチャはすごい クリーンアーキテクチャのでは、 右記の同心円図(通称たまねぎ図)が有名です。 名前がずるいため、なんだか最強のフレームワークの ように感じます。 画像出典:
Robert C. Martin 「The Clean Architecture」 しかし、クリーンアーキテクチャは数ある技術的な概 念なかの一つでしかありません。 むしろ、すごいと思いすぎるとクリーンな実装に振り 回され、結果時間がかかってしまうことになります。
Sec. 誤解 クリーンアーキテクチャ 誤解2
Sec. 誤解 クリーンアーキテクチャ - 誤解2 クリーンアーキテクチャは難しい 簡単なことではないですが、 警戒する必要もないという話をします。 そもそも、クリーンアーキテクチャは何を目的をした モデルなのでしょうか? ここでは、新規機能の開発が簡単であったり、保守・
運用がやりやすいものが優れているとあります。 単純に、リリースごとに労力が増えていくのであれ ば、それは優れた設計ではありません。
Sec. 誤解 クリーンアーキテクチャ 誤解3
Sec. 誤解 クリーンアーキテクチャ - 誤解3 クリーンアーキテクチャは銀の弾丸である 銀の弾丸とは「どういうケースでも撃てば解決する最強 のソリューション」として扱われることがあります。 クリーンアーキテクチャはそうではありません。 画像出典: 漫画「銀の弾」-
南 導入すれば複雑性が増し、SPAの実装などでは冗長な設 計となります。 他にも、初期学習フェーズで手間がかかるために短納期 でのプロジェクトにも不向きです。 エンジニア一人ひとりが、ケースごとに設計を考えてい くことが大事になります。
Sec. 誤解 クリーンアーキテクチャ 誤解4
Sec. 誤解 クリーンアーキテクチャ - 誤解4 小規模プロジェクトに向かない 💡 小規模プロジェクトとは ここでは、1〜5人程度のプロジェクトのことを指します。 とはいえ、メンバーが10人までならギリギリ小規模って言えるかも。 大規模に導入することで効果が出ると思われがちですが、
キックオフの段階で大規模であることはそうありません。 最初から段階的に実装を進める必要があります。 クリーンアーキテクチャは一つの概念だけではなく、 複数の概念で成り立っています。 一つひとつを注視して、 プロジェクトに導入したいものから導入するべきです。
物語 クリーンアーキテクチャ
Sec. 物語 クリーンアーキテクチャ 同心円について触れてませんね?
Sec. 物語 クリーンアーキテクチャ 触れましょう
Sec. 物語 クリーンアーキテクチャ あるところに、魔法使いの国がありました。 この国では、魔法陣を作って色々な物事をすることを生業にしている人がいました。
Sec. 物語 クリーンアーキテクチャ - 円のルール 魔法を行使する際は、魔法陣を書いて実行する必要があります。
Sec. 物語 クリーンアーキテクチャ - 円のルール 魔法陣の円の中心部分には、一番大事なルールが書かれています。
Sec. 物語 クリーンアーキテクチャ - 円のルール 円の外側に行くにつれて、変更しやすいものが書かれています。
Sec. 物語 クリーンアーキテクチャ - 円のルール この構造にすることで、魔法使いが魔法陣を変更しやすくなります。
実践 クリーンアーキテクチャ
Sec. 実践 クリーンアーキテクチャ 結果→わかんないよ!
実際にコードベースで見る Sec. 実践 クリーンアーキテクチャ
ざっくりこんなのがあるよ ・Entities ・Gateways ・Usecases ・Controller ・Presenter 上記の項目をこれから扱っていきます。 画像出典: Robert
C. Martin 「The Clean Architecture」 Sec. 実践 クリーンアーキテクチャ 細かい部分はここでは取り扱わないので、 知りたいものは書籍や各種サイトにてご覧ください。
エンタープライズビジネスルール Sec. 実践 クリーンアーキテクチャ
Entities エンティティといえば、他の項目でも使われるためそ ちらを意識する人もいるかもしれません。 正確には、 ビジネスルールをカプセル化、閉じ込めたものです。 ここでは、ビジネスルールのことを指します。 ドメインモデルとも言われ、データベースをオブジェ クト化したものと囚われがちですが、そうではありま せん。 参考:ドメイン駆動設計のエンティティとクリーンアーキテクチャのエンティティ
Sec. 実践 クリーンアーキテクチャ - エンタープライズビジネスルール
アプリケーションビジネスルール Sec. 実践 クリーンアーキテクチャ
Usecases ユースケースは、 ・アプリケーション固有のビジネスルール ・DDDにおけるアプリケーションサービス などを定義します。 エンティティと含めて、 この部分までがドメイン層になります。 Sec. 実践 クリーンアーキテクチャ -
アプリケーションビジネスルール また、外部の層が依存するためのインターフェースも ここで作成します。 アプリケーション内のAPI的な役回りが主です。
インターフェースアダプター Sec. 実践 クリーンアーキテクチャ
インターフェースアダプターとは? ドメイン層からフレームワークなどへ求められた データを送る便利な層です。 Sec. 実践 クリーンアーキテクチャ - インターフェースアダプター インターフェースアダプターおばあちゃん 使いやすいように 2本セットにしたから
・使いやすいようにデータを変換する ・プロトコル(通信規格)を合わせる ・実装をビジネスロジックから関心を分離する 右記ではおばあちゃんがデータを変換しています。
Gateways Gatewaysはひとつの言い方で、Repositoryとも呼ばれ ます。ユースケースとの接続がなされていれば呼び方 はどっちでも良いみたいです。🙆 リポジトリ(=倉庫)は、ソフトウェアにおけるデー タの永続化をするオブジェクトです。 Sec. 実践 クリーンアーキテクチャ - インターフェースアダプター
乱暴な言い方をすると、データの永続化ができればな んでもよいです。 データベースでも、CSVファイルでもどこのメモリで もOKです。 揮発するメモリだとだめです(フロントの状態とか)
Controller Controllers は入力をアプリケーションが要求する形に 変更して伝えるのが役目です。 その名の通り、 ゲームのコントローラーのような役割を担います。 Sec. 実践 クリーンアーキテクチャ - インターフェースアダプター
さっきのおばあちゃんで言うところの、人間の インプットから形式を合わせる外部アダプターです。 おばあちゃん? 0101010… 欲しいものを言う 人間 ABC
Presenter Sec. 実践 クリーンアーキテクチャ - インターフェースアダプター さて、一番わかりにくい項目です。 なぜ分かりにくいのかというと、ここまではMVCの概 念が理解出来ていれば分かるからです。 Presenterの役割はCとVの間に入れることで、データ をビュー変換するロジックを担うことです。
なので、Presenter層を取り入れる場合は既存のMVC からやや格好を崩す形になります。 WEBフロントエンドで言うとバリデーションなどの ロジックを全部任せることを指します。
なんかつらい
実装してみたらめっちゃつらい ここまで解説しましたが、 あんまり直感的ではないですよね。 Sec. なんかつらい 概念一つひとつは理解出来ますが、 コードに落とし込むとなると途端に難しくなります。 これってクリーンなんだっけ?という思考をひとつ挟 むので、速度も出なくなってしまいました。 だんだんクリーンにすることが目的になってしまい、
掃除するためにコーディングしてるんじゃないんだけ どな・・・となっていきます。 掃除するひと
つらくない実装
しっかり自分の中の軸を持つ 理解が出来ていれば、 エッセンスは取り入れることができます。 Sec. つらくない実装 ドメイン駆動設計なども流行っているので、 そのあたりだけ抑えつつ進めるのも🙆 最後に、この本の著者である「ボブおじさん」の言葉 を引用して終わります。 速く進む唯一の方法は、うまく進むことである。
──RobertC.Martin
余談
余談 パロディです オライリーの詳解シリーズにインスピレーションを受 けて書きました。 このあたりも面白いのでぜひ!気になる一冊手にとっ て見てください。 オライリー本はいいぞ。