世界一わかりやすいClean Architecture - 技術レイヤー分割より大切なモノ

218.6K Views

April 29, 25

スライド概要

profile-image

「持続可能なソフトウェア」の探求がライフワーク。C#、.NET、WPFあたりが住処。Microsoft MVP for Development Technologies(2017/01〜)。

シェア

またはPlayer版

埋め込む »CMSなどでJSが使えない場合

(ダウンロード不可)

関連スライド

各ページのテキスト
1.

世界一わかりやすいClean Architecture ~ 技術レイヤー分割より大切なモノ ~ Atsushi Nakamura Copyright 2025 @nuits_jp

2.

Easiest Clean Architecture Goals of this session Copyright 2025 @nuits_jp Slide 2

3.

Goals of this session 全員が 「クリーンアーキテクチャチョットデキル」 ようになること Copyright 2025 @nuits_jp Slide 3

4.

Easiest Clean Architecture Overview Copyright 2025 @nuits_jp Slide 4

5.

Overview Clean Architectureの次の点についてお話させていただきます。 • 誤解されがちな二つのこと • Clean Architectureの本質 • 技術レイヤー分割より大切なこと • おさえるべき三つのこと Copyright 2025 @nuits_jp Slide 5 Slide 5

6.

Easiest Clean Architecture 注意事項 Copyright 2025 @nuits_jp Slide 6

7.

注意事項 今日お話しすることは、あくまで私の解釈です • 極端に要約しているので、これがすべてではありません • またあえて拡大解釈している箇所もあります • 書籍の記載とやや矛盾する点もあります しかし、私は今日お話しする内容こそ、Clean Architecture の本質だと思っています。 Copyright 2025 @nuits_jp Slide 7

8.

異論・反論大歓迎 異論・反論大歓迎です。 ぜひご意見を聞かせてください。議論しましょう! Copyright 2025 @nuits_jp Slide 8

9.

Easiest Clean Architecture About Me Copyright 2025 @nuits_jp Slide 9

10.

About Me 中村 充志 / Atsushi Nakamura • • • • リコージャパン株式会社 所属 Enterprise(おもに金融)系SIerのITアーキテクト 最近はプロダクトオーナー風なことも 「持続可能なソフトウェア」の探求がライフワーク • Blog • Twitter(X) • GitHub https://zenn.dev/nuits_jp @nuits_jp https://github.com/nuitsjp Copyright 2025 @nuits_jp Slide 10

11.

Easiest Clean Architecture Today’s Contents Copyright 2025 @nuits_jp Slide 11

12.

ブログ 本日お話する内容は、下記のブログに原稿と合わせて公開します。 https://zenn.dev/nuits_jp/articles/2025-04-30-easiest-clean-architecture サンプルコードおよびPowerPointはGithubに「CC BY-SA 4.0」で公開してい ます。 https://github.com/nuitsjp/Easiest-Clean-Architecture Copyright 2025 @nuits_jp Slide 12

13.

Easiest Clean Architecture 誤解されがちな二つのこと Copyright 2025 @nuits_jp Slide 13

14.

Clean Architectureといえば・・・ 出典:The Clean Architecture https://blog.cleancoder.com/uncle-bob/2012/08/13/the-clean-architecture.html Copyright 2025 @nuits_jp Slide 14

15.

この図が良くできてい過ぎて誤解を招く Copyright 2025 @nuits_jp Slide 15

16.

ひとつ目の誤解 Clean Architectureとは 「関心をControllerやUse Case, Entityに分離しろ」 という意味ではないし 「レイヤーをこれらに分割しろ」 という意味でもない Copyright 2025 @nuits_jp Slide 16

17.

ふたつ目の誤解 MVC Model(出展Wikipedia) 「データや処理の流れを一方通行にしろ」 という意味ではないし 「PresentationをMVC的に分離しろ(MVVMなどの否定)」 という意味でもない Copyright 2025 @nuits_jp Slide 17

18.

では、どういう意味か? Copyright 2025 @nuits_jp Slide 18

19.

本当に大切なことは一つだけ 「依存性は、内側(上位レベルの方針)だけに 向かっていなければいけない。」※ ※出典:Clean Architecture 達人に学ぶソフトウェアの構造と設計 Copyright 2025 @nuits_jp Slide 19

20.

実現手段の図示 内側の変化に応じて、外側を呼び出したい場合どうすればよいのか? こうすればよい ※ ※ より厳密な意図は後述 Copyright 2025 @nuits_jp Slide 20

21.

それあってますか? Copyright 2025 @nuits_jp Slide 21

22.

はい(当者比) Copyright 2025 @nuits_jp Slide 22

23.

Clean Architecture 発表前夜 当時、以下のようなArchitectureが着目されていました。 • Hexagonal Architecture • Onion Architecture • Screaming Architecture • DCI • BCE Copyright 2025 @nuits_jp Slide 23

24.

Clean Architectureの図は・・・ Hexagonal architecture 共通する特徴をまとめ、汎化・例示したものにすぎない 汎化 Onion Architecture:https://jeffreypalermo.com/2008/07/the-onion-architecture-part-1/ Hexagonal architecture:https://en.wikipedia.org/wiki/Hexagonal_architecture_(software) Copyright 2025 @nuits_jp Slide 24

25.

あくまで例示であると取れる記載もある Clean Architecture説明の冒頭に、著名なアーキテクチャ(Hexagonal, Onion, etc...)には類似の共通点が見られるとある。 そして続けてこう記載されている。 The diagram in Figure is an attempt at integrating all these architectures into a single actionable idea. (邦訳:図は、これらのすべてのアーキテクチャを単一の実行可能なアイデアに統合し たものである。) Copyright 2025 @nuits_jp Slide 25

26.

すべてが同一アーキテクチャに帰結するとすれば 以下は、あくまで一例であることは自明 • レイヤーが4つ※1 • UIがMVC的である • Web限定 • Output PortはUse Caseとの間「だけ」にある※2 • などなど ※1 とは限らないと書籍にも明記されている ※2 eventみたいなPub/SubがUse Case限定じゃ困っちゃう Copyright 2025 @nuits_jp Slide 26

27.

あの図は・・・ 全てのアーキテクチャはClean Architectureで説明可能であることを例示 したモデル。 Clean Architectureを採用したソフトウェアの具体例の一つにすぎない Copyright 2025 @nuits_jp Slide 27

28.

著者は明言しています - The architecture rules are the same! (邦訳:アーキテクチャのルールはどれも同じである!) Copyright 2025 @nuits_jp Slide 28

29.

誤解を恐れず言えば・・・ Copyright 2025 @nuits_jp Slide 29

30.

誤解を恐れず言えば・・・ • 「あの図」の構成要素に本質的な価値はない • 本当に価値があるのは以下である • 「あの図」が実現しようとした目的 • 「あの図」に至った背景 • 「あの図」を実現する手段 Copyright 2025 @nuits_jp Slide 30

31.

誤解を恐れず言えば・・・ • 「あの図」の構成要素に本質的な価値はない • 本当に価値があるのは以下である • 「あの図」が実現しようとした目的 • 「あの図」に至った背景 • 「あの図」を実現する手段 Copyright 2025 @nuits_jp Slide 31

32.

目的とは 以下のような状態を実現すること 1. フレームワーク非依存 2. テスト可能 3. UI非依存 4. データベース非依存 5. 外部エージェント非依存 Copyright 2025 @nuits_jp Slide 32

33.

一読の価値あり 目的・背景・手段 が凝縮されている Copyright 2025 @nuits_jp Slide 33 Slide 33

34.

Easiest Clean Architecture おさえるべき三つのこと Copyright 2025 @nuits_jp Slide 34

35.

おさえるべき三つのこと 1. 依存性は、より上位レベルの方針にのみ向けよ Copyright 2025 @nuits_jp Slide 35

36.

おさえるべき三つのこと 1. 依存性は、より上位レベルの方針にのみ向けよ 2. 制御の流れと依存方向は分離しコントロールせよ Copyright 2025 @nuits_jp Slide 36

37.

おさえるべき三つのこと 1. 依存性は、より上位レベルの方針にのみ向けよ 2. 制御の流れと依存方向は分離しコントロールせよ 3. 上位レベルとは相対的・再帰的であることに留意せよ Copyright 2025 @nuits_jp Slide 37

38.

Easiest Clean Architecture さあ具体例を見てみよう! Copyright 2025 @nuits_jp Slide 38

39.

Application Overview ※ アプリケーション「HatPepper」 • 位置情報から周辺の店舗を検索する 「コンソールアプリケーション」 • 「リクルートWebサービス」の 「グルメサーチAPI」を利用させてい ただく (いつもお世話になっております。) ※「ホットペッパー」は株式会社リクルート様の登録商標です。 ※「HatPepper」は登録商標ではありません。安心。 Copyright 2025 @nuits_jp Slide 39

40.

Easiest Clean Architecture Layered Architecture Copyright 2025 @nuits_jp Slide 40

41.

コンポーネント図 Copyright 2025 @nuits_jp Slide 41

42.

クラス図 Copyright 2025 @nuits_jp Slide 42

43.

クラス図 Copyright 2025 @nuits_jp Slide 43

44.

クラス図 Copyright 2025 @nuits_jp Slide 44

45.

シーケンス図 Copyright 2025 @nuits_jp Slide 45

46.

シーケンス図 一見、そんなに 悪くなさげ? Copyright 2025 @nuits_jp Slide 46

47.

シーケンス図 一見、そんなに 悪くなさげ? 何が悪いのか? Copyright 2025 @nuits_jp Slide 47

48.

安定度と柔軟性のバランス配分に問題あり Copyright 2025 @nuits_jp Slide 48

49.

柔軟性と安定度 柔軟性 安定度 Copyright 2025 @nuits_jp 高 低 中 中 低 高 Slide 49

50.

依存関係による安定度と柔軟性のトレードオフ Copyright 2025 @nuits_jp Slide 50

51.

依存関係による安定度と柔軟性のトレードオフ 依存する側 依存される側 安定度 柔軟性 Copyright 2025 @nuits_jp Slide 51

52.

依存関係による安定度と柔軟性のトレードオフ 依存する側 依存される側 変更! 安定度 柔軟性 Copyright 2025 @nuits_jp Slide 52

53.

依存関係による安定度と柔軟性のトレードオフ 影響発生 依存する側 依存される側 変更! 安定度 柔軟性 Copyright 2025 @nuits_jp Slide 53

54.

依存関係による安定度と柔軟性のトレードオフ 影響発生 依存する側 安定度 依存される側 変更! 低 高 柔軟性 Copyright 2025 @nuits_jp Slide 54

55.

依存関係による安定度と柔軟性のトレードオフ 依存する側 依存される側 低 高 変更! 安定度 柔軟性 Copyright 2025 @nuits_jp Slide 55

56.

依存関係による安定度と柔軟性のトレードオフ 依存する側 依存される側 低 高 別に興味 ないなあ… 変更! 安定度 柔軟性 Copyright 2025 @nuits_jp Slide 56

57.

依存関係による安定度と柔軟性のトレードオフ 依存する側 依存される側 安定度 低 高 柔軟性 高 低 別に興味 ないなあ… 変更! Copyright 2025 @nuits_jp Slide 57

58.

依存関係による安定度と柔軟性のトレードオフ 依存する側 依存される側 安定度 低 高 柔軟性 高 低 安定度と柔軟性は トレードオフ! Copyright 2025 @nuits_jp Slide 58

59.

逆説的に考えると・・・ Copyright 2025 @nuits_jp Slide 59

60.

依存関係による安定度と柔軟性のトレードオフ 依存する側 依存される側 安定度 低 高 柔軟性 高 低 変更頻度の高いオブジェクトは、依存する側に設計すべし Copyright 2025 @nuits_jp Slide 60

61.

依存関係による安定度と柔軟性のトレードオフ 依存する側 依存される側 安定度 低 高 柔軟性 高 低 アプリケーションの本質的な価値を提供するオブジェク トは、軽微な変更の影響を受けてはいけない。 つまり依存される側に設計すべし。 Copyright 2025 @nuits_jp Slide 61

62.

さて、振り返ってみよう Copyright 2025 @nuits_jp Slide 62

63.

柔軟性と安定度 柔軟性 安定度 依存の方向 Copyright 2025 @nuits_jp 高 低 中 中 低 高 Slide 63

64.

どこの柔軟性がもっとも重要ですか? Copyright 2025 @nuits_jp Slide 64

65.

柔軟性と安定度 柔軟性 安定度 高 低 中 中 低 高 最重要 Copyright 2025 @nuits_jp Slide 65

66.

このアプリケーションの本質的な価値とは? Copyright 2025 @nuits_jp Slide 66

67.

Application Overview ※ アプリケーション「HatPepper」 • 位置情報から周辺の店舗を検索する 「コンソールアプリケーション」 • 「リクルートWebサービス」の これこそが価値の本質 「グルメサーチAPI」を利用させてい ただく (いつもお世話になっております。) ※「ホットペッパー」は株式会社リクルート様の登録商標です。 ※「HatPepper」は登録商標ではありません。安心。 Copyright 2025 @nuits_jp Slide 67

68.

柔軟性と安定度 柔軟性 安定度 高価値 Copyright 2025 @nuits_jp 高 低 中 中 低 高 Slide 68

69.

柔軟性と安定度 柔軟性 安定度 高 高価値 低 中→低 中→高 低→高 高→低 Copyright 2025 @nuits_jp Slide 69

70.

柔軟性と安定度 柔軟性 安定度 依存の方向 高 低 中→低 中→高 低→高 高→低 Copyright 2025 @nuits_jp Slide 70

71.

Easiest Clean Architecture 依存性は、より上位レベルの方針にのみ向けよ Copyright 2025 @nuits_jp Slide 71

72.

柔軟性と安定度 柔軟性 安定度 依存の方向 高 低 中→低 中→高 低→高 高→低 Copyright 2025 @nuits_jp Slide 72

73.

実現可能なのか? Copyright 2025 @nuits_jp Slide 73

74.

柔軟性と安定度 柔軟性 安定度 依存の方向 制御の方向 高 低 中→低 中→高 低→高 高→低 Copyright 2025 @nuits_jp Slide 74

75.

Easiest Clean Architecture 制御の流れと依存関係の分離 Copyright 2025 @nuits_jp Slide 75

76.

制御の流れと依存関係の分離 一般的に 凡例 制御の流れ=依存方向 になりがち 制御の流れ 依存方向 <<具象概念>> <<具象概念>> クライアント オブジェクト サーバー オブジェクト Copyright 2025 @nuits_jp Slide 76

77.

制御の流れと依存方向は分離しコントロールできる Copyright 2025 @nuits_jp Slide 77

78.

制御の流れと依存関係の分離 そのためには関係のコントラクト(契約・仕様・お約束) 凡例 のコンテキスト(文脈)を制御する 制御の流れ 依存方向 <<具象概念>> クライアント オブジェクト <<抽象概念>> コントラクト <<具象概念>> サーバー オブジェクト それぞれの具象概念は抽象的な契約(仕様)に依存する Copyright 2025 @nuits_jp Slide 78

79.

契約の文脈をコントロールする <<具象概念>> クライアント オブジェクト <<抽象概念>> コントラクト <<具象概念>> サーバー オブジェクト 凡例 制御の流れ 依存方向 文脈 Copyright 2025 @nuits_jp Slide 79

80.

契約の文脈をコントロールする <<具象概念>> クライアント オブジェクト <<具象概念>> クライアント オブジェクト <<抽象概念>> コントラクト <<具象概念>> サーバー オブジェクト <<具象概念>> <<抽象概念>> コントラクト サーバー オブジェクト 凡例 制御の流れ 依存方向 文脈 Copyright 2025 @nuits_jp Slide 80

81.

契約の文脈をコントロールする <<具象概念>> クライアント オブジェクト <<具象概念>> クライアント オブジェクト <<抽象概念>> コントラクト <<具象概念>> サーバー オブジェクト <<具象概念>> <<抽象概念>> コントラクト 依存性逆転の原則 サーバー オブジェクト 凡例 制御の流れ 依存方向 文脈 Copyright 2025 @nuits_jp Slide 81

82.

具体例を見てみよう Copyright 2025 @nuits_jp Slide 82

83.

柔軟性と安定度 この部分の 「コントラクト」 に注目する Copyright 2025 @nuits_jp Slide 83

84.

クラス図 Copyright 2025 @nuits_jp Slide 84

85.

クラス図 APIクライアントの 呼び出しにフォーカ スしてみる Copyright 2025 @nuits_jp Slide 85

86.

シーケンス図 Copyright 2025 @nuits_jp Slide 86

87.

クラス図 依存させたい方向 ここが 「コントラクト」 Copyright 2025 @nuits_jp Slide 87

88.

クラス図 依存させたい方向 二つの問題がある ここが 「コントラクト」 Copyright 2025 @nuits_jp Slide 88

89.

ひとつ コントラクトがGateway側に定義されている Copyright 2025 @nuits_jp Slide 89

90.

ふたつめ コントラクトがWeb APIの文脈で記述されている Copyright 2025 @nuits_jp Slide 90

91.

クラス図 { "results": { "results_start": 1, "results_returned": "2", "api_version": "1.26", "shop": [ { "name": "彩羽鶏 いろはどり 新宿東口店", "genre": { "catch": "新宿 月あかり 個室 居酒屋…", … }, "budget": { "average": "2500円(通常平均)…", "name": "2001~3000円", "code": "B002" }, "mobile_access": "JR新宿駅東口より徒1分… Copyright 2025 @nuits_jp Slide 91

92.

どうすれば? Copyright 2025 @nuits_jp Slide 92

93.

契約の文脈をコントロールする <<具象概念>> 変更前 Application <<抽象概念>> コントラクト Copyright 2025 @nuits_jp <<具象概念>> Gateway Slide 93

94.

契約の文脈をコントロールする <<具象概念>> 変更前 変更後 Application <<具象概念>> Application <<抽象概念>> コントラクト <<抽象概念>> コントラクト Copyright 2025 @nuits_jp <<具象概念>> Gateway <<具象概念>> Gateway Slide 94

95.

というわけで・・・ Copyright 2025 @nuits_jp Slide 95

96.

クラス図 Copyright 2025 @nuits_jp Slide 96

97.

クラス図 Copyright 2025 @nuits_jp Slide 97

98.

クラス図 Copyright 2025 @nuits_jp Slide 98

99.

クラス図 循環参照 Copyright 2025 @nuits_jp Slide 99

100.

クラス図 Copyright 2025 @nuits_jp Slide 100

101.

クラス図 Copyright 2025 @nuits_jp Slide 101

102.

クラス図 Copyright 2025 @nuits_jp Slide 102

103.

クラス図 依存の方向 制御の方向 Copyright 2025 @nuits_jp Slide 103

104.

本当に実装できるの? Copyright 2025 @nuits_jp Slide 104

105.

クラス図 Copyright 2025 @nuits_jp Slide 105

106.

クラス図 Copyright 2025 @nuits_jp Slide 106

107.

制御の流れと依存関係の分離 柔軟性 安定度 依存の方向 制御の方向 Copyright 2025 @nuits_jp 高 低 低 高 高 低 Slide 107

108.

クラス図 Copyright 2025 @nuits_jp Slide 108

109.

クラス図 Copyright 2025 @nuits_jp Slide 109

110.

クラス図 Copyright 2025 @nuits_jp Slide 110

111.

コンポーネント図 Copyright 2025 @nuits_jp Slide 111

112.

アプリケーション構造 Controller Application Device Domain View HotPepper Copyright 2025 @nuits_jp Slide 112

113.

おさえるべき三つのこと 1. 依存性は、より上位レベルの方針にのみ向けよ 2. 制御の流れと依存方向は分離しコントロールせよ 3. 上位レベルとは相対的・再帰的であることに留意せよ Copyright 2025 @nuits_jp Slide 113

114.

視点を上げてみよう Copyright 2025 @nuits_jp Slide 114

115.

Application Overview ※ アプリケーション「HatPepper」 • 位置情報から周辺の店舗を検索し 予約するグルメサイト • 「リクルートWebサービス」の 「グルメサーチAPI」を利用させてい ただく (いつもお世話になっております。) ※「ホットペッパー」は株式会社リクルート様の登録商標です。 ※「HatPepper」は登録商標ではありません。安心。 Copyright 2025 @nuits_jp Slide 115

116.

コンテキストマップ HatPepper <core-domain> 検索 <core-domain> 予約 Copyright 2025 @nuits_jp <support-domain> ・・・・ Slide 116

117.

コンテキストマップ HatPepper <core-domain> 検索 <core-domain> 予約 <bounded context> 検索App <bounded context> 予約App <bounded context> 検索Gateway <bounded context> 予約Gateway Copyright 2025 @nuits_jp <support-domain> ・・・・ Slide 117

118.

コンテキストマップ HatPepper <generic-domain> HatPepper <bounded context> HotPepper <core-domain> 検索 <core-domain> 予約 <bounded context> 検索App <bounded context> 予約App <bounded context> 検索Gateway <bounded context> 予約Gateway Copyright 2025 @nuits_jp <support-domain> ・・・・ Slide 118

119.

コンテキストマップ HatPepper <generic-domain> HatPepper <bounded context> HatPepper <bounded context> Orchestrator <core-domain> 検索 <core-domain> 予約 <bounded context> 検索App <bounded context> 予約App <bounded context> 検索Gateway <bounded context> 予約Gateway Copyright 2025 @nuits_jp <support-domain> ・・・・ Slide 119

120.

コンテキストマップ HatPepper <generic-domain> HatPepper <bounded context> HatPepper <bounded context> Orchestrator <bounded context> Bootstrapper <core-domain> 検索 <core-domain> 予約 <bounded context> 検索App <bounded context> 予約App <bounded context> 検索Gateway <bounded context> 予約Gateway Copyright 2025 @nuits_jp <support-domain> ・・・・ Slide 120

121.

コンテキストマップ HatPepper <generic-domain> HatPepper <bounded context> HatPepper <bounded context> Orchestrator <bounded context> Bootstrapper <core-domain> 検索 <core-domain> 予約 <bounded context> 検索App <bounded context> 予約App <bounded context> 検索Gateway <bounded context> 予約Gateway Copyright 2025 @nuits_jp <support-domain> ・・・・ Slide 121

122.

Easiest Clean Architecture 上位レベルとは相対的・再帰的であることに留意せよ Copyright 2025 @nuits_jp Slide 122

123.

ソフトウェアのフラクタル 境界付けられたコンテキスト 技術レイヤー 技術レイヤー Copyright 2025 @nuits_jp Slide 123

124.

ソフトウェアのフラクタル サブドメイン 境界付けられたコンテキスト 境界付けられたコンテキスト 技術レイヤー 技術レイヤー 技術レイヤー 技術レイヤー Copyright 2025 @nuits_jp Slide 124

125.

ソフトウェアのフラクタル ドメイン サブドメイン サブドメイン 境界付けられたコンテキスト 境界付けられたコンテキスト 技術レイヤー 技術レイヤー 技術レイヤー 技術レイヤー Copyright 2025 @nuits_jp Slide 125

126.

ソフトウェアのフラクタル ドメイン サブドメイン 境界付けられたコンテキスト 技術レイヤー 技術レイヤー サブドメイン 境界付けられたコンテキスト 技術レイヤー 技術レイヤー ソ フ ト ウ ェ ア オ ブ ジ ェ ク ト ソフトウェア オブジェクトすべてに、ここまでの話は適用可能 • 要素間のインターフェースの文脈により、制御の流れと依存関係は制御可能 • 依存関係によって、安定性と柔軟性をコントロール可能 Copyright 2025 @nuits_jp Slide 126

127.

アプリケーション構造 Controller Application Device Domain View HotPepper Copyright 2025 @nuits_jp Slide 127

128.

コンテキストマップ HatPepper <generic-domain> HatPepper <bounded context> HatPepper <bounded context> Orchestrator <bounded context> Bootstrapper <core-domain> 検索 <core-domain> 予約 <bounded context> 検索App <bounded context> 予約App <bounded context> 検索Gateway <bounded context> 予約Gateway Copyright 2025 @nuits_jp <support-domain> ・・・・ Slide 128

129.

コンテキストマップ <core-domain> 検索 <bounded context> 検索App <bounded context> 予約App <bounded context> 検索Gateway <bounded context> 予約Gateway Copyright 2025 @nuits_jp Slide 129

130.

- The architecture rules are the same! - Copyright 2025 @nuits_jp Slide 130

131.

Easiest Clean Architecture What is Software Architecture? Copyright 2025 @nuits_jp Slide 131

132.

!ここからは私見成分高め! Copyright 2025 @nuits_jp Slide 132

133.

ソフトウェア アーキテクチャといえば何を思い浮かべますか? 1. MVC 2. MVP 3. MVVM 4. MVPVM 5. クリーン アーキテクチャ 6. レイヤー アーキテクチャ 7. オニオン アーキテクチャ などなど これらはソフトウェア アーキテクチャの類型的なパターン群です Copyright 2025 @nuits_jp Copyright 2017 @nuits_jp Slide 133

134.

ソフトウェア アーキテクチャとは何か? ソフトウェアアーキテクチャでは、ソフトウェア システムの構成に関する一連 の重要な判断を網羅しています。これには、システムを構成する要素とイン ターフェイスの選択、要素間のコラボレーションとして指定される動作、この ような構成と動作の要素のより大きなサブシステムに対する構成、この構成の 指針となるアーキテクチャスタイルが含まれます。また、機能性、ユーザビリ ティ、復元性、パフォーマンス、再利用性、理解できること、経済的な制約、 テクノロジの制約、トレードオフ、および外観への配慮も必要です。 by Philippe Kruchten, Grady Booch, Kurt Bittner, Rich Reitman Microsoft 「アプリケーション アーキテクチャ ガイド2.0」より引用 Copyright 2025 @nuits_jp Copyright 2017 @nuits_jp Slide 134

135.

ソフトウェア アーキテクチャとは何か? アーキテクチャは、システムを大きなレベルで分解したもので、決定事項の変 更は困難です。システムには複数のアーキテクチャが存在し、アーキテクチャ にとって重要な事項はシステムの運用中に変化します。要するに、重要な要素 は、すべてアーキテクチャということになります。 by Martin Fowler Microsoft 「アプリケーション アーキテクチャ ガイド2.0」より引用 Copyright 2025 @nuits_jp Copyright 2017 @nuits_jp Slide 135

136.

ソフトウェア アーキテクチャとは何か? ソフトウェアアーキテクチャとは、抽象化と問題の分割によって複雑性を減ら すことを主に念頭に置いたものである。ただし、今までのところ、「ソフト ウェアアーキテクチャ」という用語に関して、万人が合意した厳密な定義は存 在しない Wikipedia「ソフトウェアアーキテクチャ」より引用 Copyright 2025 @nuits_jp Copyright 2017 @nuits_jp Slide 136

137.

とは言え、おおよその共通認識はある Copyright 2025 @nuits_jp Copyright 2017 @nuits_jp Slide 137 Slide 137

138.

ソフトウェア アーキテクチャとは何か?かみ砕くと… 1. ソフトウェアアーキテクチャとは システムアーキテクチャのうち、ソフトウェア領域のアーキテク チャである この時「システム」とは「IT」だけではなく、それらを取り巻く社 会やビジネスを含めた「仕組み」を指すことも多い ※ 元来「System」とは制度・組織・体系・系統などのこと Copyright 2025 @nuits_jp Copyright 2017 @nuits_jp Slide 138

139.

ソフトウェア アーキテクチャとは何か?かみ砕くと… 2. ソフトウェア アーキテクチャとは 1. ソフトウェアにおける重要な決定事項全てである 2. その中でも特につぎの2点が重要 1. ソフトウェア全体を、どのように分割するか 2. 分割した部分同士を、どう結合し相互作用させるか Copyright 2025 @nuits_jp Copyright 2017 @nuits_jp Slide 139

140.

ソフトウェア アーキテクチャとは何か?かみ砕くと… 3. ソフトウェアアーキテクチャを構築するのはなぜか? • 「システムの実現をサポートする」 • 「持続可能なソフトウェア」を • 「バランスよく」構築するため 4. ソフトウェアアーキテクチャのバランスとは? 1. Quality(機能・非機能) 2. Cost 3. Delivery(開発期間) アーキテクチャは非機能要求からも大きく影響をうける Copyright 2025 @nuits_jp Copyright 2017 @nuits_jp Slide 140

141.

ソフトウェア アーキテクチャとは何か?かみ砕くと… 5. Clean Architectureによると・・・ アーキテクチャは、次のものを与えてくれます • フレームワーク非依存 • テスト可能 • UI非依存 • データベース非依存 • 外部エージェント非依存 Copyright 2025 @nuits_jp Slide 141

142.

Easiest Clean Architecture Clean Architectureを考えるうえで重要なポイント Copyright 2025 @nuits_jp Slide 142

143.

ソフトウェア アーキテクチャとは何か?かみ砕くと… 2. ソフトウェア アーキテクチャとは 1. ソフトウェアにおける重要な決定事項全てである 2. その中でも特につぎの2点が重要 1. ソフトウェア全体を、どのように分割するか 2. 分割した部分同士を、どう結合し、相互作用させるか Copyright 2025 @nuits_jp Copyright 2017 @nuits_jp Slide 143

144.

ソフトウェア アーキテクチャとは何か?かみ砕くと… 2. ソフトウェア アーキテクチャとは 1. ソフトウェアにおける重要な決定事項全てである 2. その中でも特につぎの2点が重要 1. ソフトウェア全体を、どのように分割するか 2. 分割した部分同士を、どう結合し、相互作用させるか ソフトウェアアーキテクチャ3種の神器 Copyright 2025 @nuits_jp Copyright 2017 @nuits_jp Slide 144

145.

ソフトウェアアーキテクチャ3種の神器 1. 関心の分離(SoC:Separation of concerns) 2. 疎結合 3. 依存性逆転の原則 Copyright 2025 @nuits_jp Slide 145

146.

ソフトウェア アーキテクチャの3種の神器 上位の関心 Copyright 2025 @nuits_jp Slide 146

147.

ソフトウェア アーキテクチャの3種の神器 上位の関心 関心の分離 個別の関心 個別の関心 Copyright 2025 @nuits_jp Slide 147

148.

ソフトウェア アーキテクチャの3種の神器 上位の関心 関心の分離 上位の関心 個別の関心 ドメイン 個別の関心 サブドメイン個別の関心 サブドメイン 境界付けられたコンテキスト 境界付けられたコンテキスト 技術レイヤー Copyright 2025 @nuits_jp Slide 148

149.

ソフトウェア アーキテクチャの3種の神器 上位の関心 直交する関心に注意 関心の分離 上位の関心 個別の関心 ドメイン 個別の関心 サブドメイン個別の関心 サブドメイン 境界付けられたコンテキスト 境界付けられたコンテキスト 技術レイヤー Copyright 2025 @nuits_jp Slide 149

150.

ソフトウェア アーキテクチャの3種の神器 上位の関心 関心の分離 個別の関心 個別の関心 Copyright 2025 @nuits_jp Slide 150

151.

ソフトウェア アーキテクチャの3種の神器 上位の関心 関心の分離 疎結合 個別の関心 コントラクト (≒Interface) Copyright 2025 @nuits_jp 個別の関心 Slide 151

152.

ソフトウェア アーキテクチャの3種の神器 上位の関心 関心の分離 疎結合 個別の関心 コントラクト (≒Interface) 個別の関心 依存性逆転の原則 ( 上位の安定度と、下位の柔軟性を高めよ) Copyright 2025 @nuits_jp Slide 152

153.

What is Clean Architecture? Copyright 2025 @nuits_jp Slide 153

154.

Clean Architecture is ... クリーンアーキテクチャとは 「ソフトウェアアーキテクチャ3種の神器を適用した リファレンスアーキテクチャのひとつ」 Copyright 2025 @nuits_jp Slide 154

155.

Easiest Clean Architecture まとめ Copyright 2025 @nuits_jp Slide 155

156.

まとめ Clean Architectureとは、どんなソフトウェアにも適用可能な 普遍的なアーキテクチャの原則である Copyright 2025 @nuits_jp Slide 156

157.

Clean Architecture is ... クリーンアーキテクチャとは 「ソフトウェアアーキテクチャ3種の神器を適用した リファレンスアーキテクチャのひとつ」 Copyright 2025 @nuits_jp Slide 157

158.

ソフトウェア アーキテクチャの3種の神器 上位の関心 関心の分離 疎結合 個別の関心 コントラクト (≒Interface) 個別の関心 依存性逆転の原則 ( 上位の安定度と、下位の柔軟性を高めよ) Copyright 2025 @nuits_jp Slide 158

159.

おさえるべき三つのこと 1. 依存性は、より上位レベルの方針にのみ向けよ Copyright 2025 @nuits_jp Slide 159

160.

おさえるべき三つのこと 1. 依存性は、より上位レベルの方針にのみ向けよ 2. 制御の流れと依存方向は分離しコントロールせよ Copyright 2025 @nuits_jp Slide 160

161.

おさえるべき三つのこと 1. 依存性は、より上位レベルの方針にのみ向けよ 2. 制御の流れと依存方向は分離しコントロールせよ 3. 上位レベルとは相対的・再帰的であることに留意せよ Copyright 2025 @nuits_jp Slide 161

162.

誤解されがちな二つのこと Clean Architectureは、次のふたつを誤解されがち 1. 参考図の通りに関心を分離するのがClean Architectureである 2. データや処理の流れを一方通行にしろ 上記は、陥りがちな誤りであり、Clean Architectureの本質とは異なり ます。 Copyright 2025 @nuits_jp Slide 162

163.

Clean Architectureの本当の価値 • 「この図」が実現しようとした目的 • 「この図」に至った背景 • 「この図」を実現する手段 Copyright 2025 @nuits_jp Slide 163

164.

一読の価値あり 目的・背景・手段 が凝縮されている Copyright 2025 @nuits_jp Slide 164 Slide 164

165.

という訳で・・・ Copyright 2025 @nuits_jp Slide 165

166.

Today’s Goal みなさん 「クリーンアーキテクチャチョットデキル」 ようになりましたね? Copyright 2025 @nuits_jp Slide 166

167.

Thank You! Any Questions? Copyright 2025 @nuits_jp Slide 167