SlideShare a Scribd company logo
AWS Dev Day2021
「ドメイン駆動設計のマイクロサービスへの活用
とデベロッパーに求められるスキル」
参考資料
2021.9.30
松岡 幸一郎 (@little_hand_s)
1
自己紹介
2
● 名前
○ 松岡 幸一郎 (@little_hand_s)
● 所属
○ 株式会社ログラス
経営管理領域でDDDを実践中
● 運営コミュニティ
○ DDD community jp主催
○ Agile Developers Community主催
● 発信
○ 「ドメイン駆動設計サンプルコード&FAQ」(10月発売予定)
○ 「ドメイン駆動設計モデリング/実装ガイド」執筆
○ 質問箱 (DDD関連の匿名質問受付)
○ DDD関連の技術ブログ
○ Youtube DDD解説動画チャンネル
● その他活動
○ 企業様へのDDD導入/設計サポートなど
自己紹介
3
● ドメイン駆動設計モデリング/実装ガイド
● 2020年3月発売
● DDDの目的やその用語について、
基礎から概念をしっかり解説します
○ モデリングからコーディングまでの流れ、
レイヤーごとの責務についてそれぞれ解説
執筆書籍紹介(1/2)
4
執筆書籍紹介(2/2)
● ドメイン駆動設計サンプルコード
&FAQ
● 2021年10月発売
● DDDを実践する上でつまずきがちな問題を解消します
○ 「モデリング/実装ガイド」で解説しきれなかった、
「モデリング」「集約の実装」「テスト」について
数十ページに及んで解説
○ 質問箱寄せられた約600の質問の中から、
頻出の質問について解説
○ モデル図、サンプルコードを大量掲載
5
● DDD勉強会
「ライブモデリングとコーディングで理解するDDD」
● DDDを実践する上でどのようなモデリングを行い、
どのようにコードに落とすのかを具体的に解説します。
● 10月発売予定の書籍
「ドメイン駆動設計サンプルコード
&FAQ」の
題材をもとに解説します
● 日付:
2021年10月30日(土) 19:00〜
● URL:
https://ddd-community-jp.connpass.com/event/226482/
勉強会紹介
6
DDDとは
7
DDDとは
● DDD とは
○ ドメインモデリングによってドメインを深く理解し、
ソフトウェアの価値を高めることを目指す開発手法
● ドメインとは
○ ソフトウェアで問題解決しようとする対象領域
8
端的に要約すると以下の2つ
● ①ソフトウェアの機能性を高めること
● ②ソフトウェアの保守性を高めること
DDDの目的
9
端的に要約すると以下の2つ
● ①ソフトウェアの機能性を高めること
→ 役に立つものを作る
 「作ったけど使えない」を避ける
● ②ソフトウェアの保守性を高めること
DDDの目的
10
端的に要約すると以下の2つ
● ①ソフトウェアの機能性を高めること
→ 役に立つものを作る
 「作ったけど使えない」を避ける
● ②ソフトウェアの保守性を高めること
→ 長期間開発しても機能拡張が容易でありつづける
  「技術的負債でどんどん開発速度が低下する」を避ける
DDDの目的
11
● ①機能性向上へのアプローチ
● ②保守性向上のためのアプローチ
DDDのアプローチ(1/2)
12
● ①機能性向上へのアプローチ
→ ドメインエキスパートと共に行うドメインモデリング
● ②保守性向上のためのアプローチ
DDDのアプローチ(1/2)
13
● ①機能性向上へのアプローチ
→ ドメインエキスパートと共に行うドメインモデリング
○ 「ドメインモデル」という抽象化物にドメインの知識を反映することで、
役に立つものになる可能性を高める
● ②保守性向上のためのアプローチ
DDDのアプローチ(1/2)
14
● ①機能性向上へのアプローチ
→ ドメインエキスパートと共に行うドメインモデリング
○ 「ドメインモデル」という抽象化物にドメインの知識を反映することで、
役に立つものになる可能性を高める
○ 開発初期だけではなく、各フェーズで得られた発見をこまめに
フィードバックすることで改善頻度を上げる
● ②保守性向上のためのアプローチ
DDDのアプローチ(1/2)
15
● ①機能性向上へのアプローチ
→ ドメインエキスパートと共に行うドメインモデリング
○ 「ドメインモデル」という抽象化物にドメインの知識を反映することで、
役に立つものになる可能性を高める
○ 開発初期だけではなく、各フェーズで得られた発見をこまめに
フィードバックすることで改善頻度を上げる
● ②保守性向上のためのアプローチ
→ 頻繁なモデルの更新に耐えられる実装パターン
DDDのアプローチ(1/2)
16
● ①機能性向上へのアプローチ
→ ドメインエキスパートと共に行うドメインモデリング
○ 「ドメインモデル」という抽象化物にドメインの知識を反映することで、
役に立つものになる可能性を高める
○ 開発初期だけではなく、各フェーズで得られた発見をこまめに
フィードバックすることで改善頻度を上げる
● ②保守性向上のためのアプローチ
→ 頻繁なモデルの更新に耐えられる実装パターン
○ モデルの形をそのままコードで表現することで、
頻繁なモデルの更新を反映しやすくる
DDDのアプローチ(1/2)
17
DDDのアプローチ(1/2)
● ①機能性向上へのアプローチ
→ ドメインエキスパートと共に行うドメインモデリング
○ 「ドメインモデル」という抽象化物にドメインの知識を反映することで、
役に立つものになる可能性を高める
○ 開発初期だけではなく、各フェーズで得られた発見をこまめに
フィードバックすることで改善頻度を上げる
● ②保守性向上のためのアプローチ
→ 頻繁なモデルの更新に耐えられる実装パターン
○ モデルの形をそのままコードで表現することで、
頻繁なモデルの更新を反映しやすくる
○ 頻繁な更新に耐えられるように、
保守性の高いデザインパターンを適用する
18
DDDのアプローチ(2/2)
よく「DDDならモデリングしないと意味ないよ」と言われがちだが…
● 2つのアプローチは、目的さえ明確であれば個別でも十分に価値を発揮する
● ただし、2つのアプローチは「ドメインモデル」で繋がっており、
一緒に適用するとより大きな価値を発揮する
19
境界づけられたコンテキスト
20
境界づけられたコンテキストの概念説明(1/3)
● ex) 「商品」というモデルの例
● 販売部と配送部で「商品」といった時にイメージするものは全く違う
21
境界づけられたコンテキストの概念説明(1/3)
● ex) 「商品」というモデルの例
● 販売部と配送部で「商品」といった時にイメージするものは全く違う
22
境界づけられたコンテキストの概念説明(2/3)
● 異なる文脈の「商品」をごっちゃにしてしまうと、
大きな混乱のもとになってしまう
23
境界づけられたコンテキストの概念説明(3/3)
● 混乱を避けるためため、
「どの文脈(コンテキスト)の『商品』か」を明示しましょう、という考え
● これが「境界づけられたコンテキスト」
24
明示的な
境界
● マイクロサービス文脈では、
「境界づけられたコンテキストという切り口は、
 マイクロサービス分割単位に適しているのでは?」とされて注目された
境界づけられたコンテキストとマイクロサービスの関係
25
マイクロサービス1
マイクロサービス2
ドメインモデリングの例
26
● DDDではモデリング手法は様々なものがあるが、
一例としてオブジェクト図&ドメインモデル図を作成するような手法がある
● オブジェクト図(モデリング対象の具体例を示す図)の例
モデリングのイメージ図(1/2)
27
モデリングのイメージ図(2/2)
● ドメインモデル図(モデルのオブジェクトの切り方、ルール/制約を示す図)の例
28
集約の単位でリポジトリを作成するた
め、このモデル図の段階で
コードの形がある程度見えている
サポート事例(ブログ公開事例のみ)
● Gaudiy様
○ DDDを試行錯誤しながら実践するチームの学びをまとめてみた
● Base様
○ ドメイン駆動設計モデリングデモ会を開催しました!
● Holmes様
○ プロダクトにドメイン駆動設計を適用するためにはじめたこと
● エムスリー様
○ ドメイン駆動設計座談会& モデリングハンズオンを開催しました
● ハンズラボ様
○ ドメイン駆動設計のモデリングハンズオンを開催して頂きました!
● フェンリル様
○ 特別ゲストを招いてDDD 勉強会やりました!
● マーベリック様
○ 松岡さんを招待してDDDモデリング・ハンズオンを開催しました

More Related Content

PPTX
モノリスからマイクロサービスへの移行 ~ストラングラーパターンの検証~(Spring Fest 2020講演資料)
PDF
マイクロサービス化デザインパターン - #AWSDevDay Tokyo 2018
PDF
そんなトランザクションマネージャで大丈夫か?
PPTX
Azure AD とアプリケーションを SAML 連携する際に陥る事例と対処方法について
PDF
マルチテナントのアプリケーション実装〜実践編〜
PDF
ゲームアーキテクチャパターン (Aurora Serverless / DynamoDB)
PDF
ドメイン駆動設計 基本を理解する
PDF
[AWS EXpert Online for JAWS-UG 18] 見せてやるよ、Step Functions の本気ってやつをな
モノリスからマイクロサービスへの移行 ~ストラングラーパターンの検証~(Spring Fest 2020講演資料)
マイクロサービス化デザインパターン - #AWSDevDay Tokyo 2018
そんなトランザクションマネージャで大丈夫か?
Azure AD とアプリケーションを SAML 連携する際に陥る事例と対処方法について
マルチテナントのアプリケーション実装〜実践編〜
ゲームアーキテクチャパターン (Aurora Serverless / DynamoDB)
ドメイン駆動設計 基本を理解する
[AWS EXpert Online for JAWS-UG 18] 見せてやるよ、Step Functions の本気ってやつをな

What's hot (20)

PPTX
NTTデータ流Infrastructure as Code~ 大規模プロジェクトを通して考え抜いた基盤自動化の新たな姿~(NTTデータ テクノロジーカンフ...
PDF
DevOps with Database on AWS
PPTX
「関心の分離」と「疎結合」 ソフトウェアアーキテクチャのひとかけら
PDF
ドメイン駆動設計の正しい歩き方
PDF
ドメイン駆動設計 本格入門
PDF
Dapr × Kubernetes ではじめるポータブルなマイクロサービス(CloudNative Days Tokyo 2020講演資料)
PPTX
DeNA の AWS アカウント管理とセキュリティ監査自動化
PDF
ソーシャルゲームのためのデータベース設計
PDF
AWSではじめるMLOps
PPTX
さくっと理解するSpring bootの仕組み
PDF
ユーザーストーリー駆動開発で行こう。
PDF
マイクロサービスに至る歴史とこれから - XP祭り2021
PDF
Infrastructure as Code (IaC) 談義 2022
PDF
3週連続DDDその1 ドメイン駆動設計の基本を理解する
PDF
ドメイン駆動設計のためのオブジェクト指向入門
PDF
20200526 AWS Black Belt Online Seminar AWS X-Ray
PDF
君はyarn.lockをコミットしているか?
PDF
Springを何となく使ってる人が抑えるべきポイント
PDF
ホットペッパービューティーにおけるモバイルアプリ向けAPIのBFF/Backend分割
PDF
ドメイン駆動設計に15年取り組んでわかったこと
NTTデータ流Infrastructure as Code~ 大規模プロジェクトを通して考え抜いた基盤自動化の新たな姿~(NTTデータ テクノロジーカンフ...
DevOps with Database on AWS
「関心の分離」と「疎結合」 ソフトウェアアーキテクチャのひとかけら
ドメイン駆動設計の正しい歩き方
ドメイン駆動設計 本格入門
Dapr × Kubernetes ではじめるポータブルなマイクロサービス(CloudNative Days Tokyo 2020講演資料)
DeNA の AWS アカウント管理とセキュリティ監査自動化
ソーシャルゲームのためのデータベース設計
AWSではじめるMLOps
さくっと理解するSpring bootの仕組み
ユーザーストーリー駆動開発で行こう。
マイクロサービスに至る歴史とこれから - XP祭り2021
Infrastructure as Code (IaC) 談義 2022
3週連続DDDその1 ドメイン駆動設計の基本を理解する
ドメイン駆動設計のためのオブジェクト指向入門
20200526 AWS Black Belt Online Seminar AWS X-Ray
君はyarn.lockをコミットしているか?
Springを何となく使ってる人が抑えるべきポイント
ホットペッパービューティーにおけるモバイルアプリ向けAPIのBFF/Backend分割
ドメイン駆動設計に15年取り組んでわかったこと
Ad

Similar to Aws Dev Day2021 「ドメイン駆動設計のマイクロサービスへの活用とデベロッパーに求められるスキル」参考資料(松岡パート) (20)

PDF
ドメイン駆動設計のプラクティスでカバーできること、できないこと[DDD]
PDF
始めよう! ドメイン駆動設計&マイクロサービス開発 ~C# と Azure Service Fabric で最高の DDD 開発を~
PDF
【de:code 2020】 Microsoft 自身の事例から学ぶクラウド移行の価値
PDF
Microsoft Build 2021をさらに楽しむためのおすすめセッション/サンプル コード Powered by Microsoft MVPs
PDF
ドメイン駆動設計とは何か 【入門編】
PDF
くまあず Nchikita 140628-2
PDF
2022_sakura-yube_ddd.pdf
PDF
「実践ドメイン駆動設計」 から理解するDDD (2018年11月)
PDF
Microsoft MVPとは?コミュニティ活動のすすめ
PPTX
20151110 ドメイン駆動設計によるサービス開発
PDF
M12_数百台の開発サーバをリフトアンドシフト! Azure Migrate 活用ポイント [Microsoft Japan Digital Days]
PDF
JPC2018[H4]マイクロソフトの Azure オープン ソース戦略とパートナー エコシステム
PDF
Microsoft Build 2022をさらに楽しむためのおすすめセッション/サンプル コード Powered by Microsoft MVPs
PDF
Microsoft azureで実装するwebserviceondocker
PDF
Visual Studio 2019 GA ! ~ 最新情報 & これからの開発スタイル
PDF
【de:code 2020】 IT インフラをモダナイズ?今、検討すべきクラウドの活用方法
PPTX
Windows 365 Enterprise に触れてみよう
PDF
ドメイン駆動設計再入門
PPTX
NS study8 DDD Microservices Azuer Service Fabric
PDF
ドメイン駆動設計 モデリング_実装入門勉強会_2020.3.8
ドメイン駆動設計のプラクティスでカバーできること、できないこと[DDD]
始めよう! ドメイン駆動設計&マイクロサービス開発 ~C# と Azure Service Fabric で最高の DDD 開発を~
【de:code 2020】 Microsoft 自身の事例から学ぶクラウド移行の価値
Microsoft Build 2021をさらに楽しむためのおすすめセッション/サンプル コード Powered by Microsoft MVPs
ドメイン駆動設計とは何か 【入門編】
くまあず Nchikita 140628-2
2022_sakura-yube_ddd.pdf
「実践ドメイン駆動設計」 から理解するDDD (2018年11月)
Microsoft MVPとは?コミュニティ活動のすすめ
20151110 ドメイン駆動設計によるサービス開発
M12_数百台の開発サーバをリフトアンドシフト! Azure Migrate 活用ポイント [Microsoft Japan Digital Days]
JPC2018[H4]マイクロソフトの Azure オープン ソース戦略とパートナー エコシステム
Microsoft Build 2022をさらに楽しむためのおすすめセッション/サンプル コード Powered by Microsoft MVPs
Microsoft azureで実装するwebserviceondocker
Visual Studio 2019 GA ! ~ 最新情報 & これからの開発スタイル
【de:code 2020】 IT インフラをモダナイズ?今、検討すべきクラウドの活用方法
Windows 365 Enterprise に触れてみよう
ドメイン駆動設計再入門
NS study8 DDD Microservices Azuer Service Fabric
ドメイン駆動設計 モデリング_実装入門勉強会_2020.3.8
Ad

More from Koichiro Matsuoka (8)

PDF
Discordから バーチャルオフィス「Teamflow」 に乗り換えてみた 雑談を生む工夫
PDF
PostgreSQLの行レベルセキュリティと SpringAOPでマルチテナントの ユーザー間情報漏洩を防止する (JJUG CCC 2021 Spring)
PDF
ベロシティを上手く使って 技術的負債を計画的に解消する
PDF
DDDオンライン勉強会#2 「集約・境界付けられたコンテキスト」
PDF
DDDはオブジェクト指向を利用してどのようにメンテナブルなコードを書くか
PDF
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
PPTX
境界付けられたコンテキスト 概念編 (ドメイン駆動設計用語解説シリーズ)
PDF
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
Discordから バーチャルオフィス「Teamflow」 に乗り換えてみた 雑談を生む工夫
PostgreSQLの行レベルセキュリティと SpringAOPでマルチテナントの ユーザー間情報漏洩を防止する (JJUG CCC 2021 Spring)
ベロシティを上手く使って 技術的負債を計画的に解消する
DDDオンライン勉強会#2 「集約・境界付けられたコンテキスト」
DDDはオブジェクト指向を利用してどのようにメンテナブルなコードを書くか
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
境界付けられたコンテキスト 概念編 (ドメイン駆動設計用語解説シリーズ)
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話

Aws Dev Day2021 「ドメイン駆動設計のマイクロサービスへの活用とデベロッパーに求められるスキル」参考資料(松岡パート)