SlideShare une entreprise Scribd logo
1  sur  32
Télécharger pour lire hors ligne
2022.1.17
松岡 幸一郎 (@little_hand_s)
1
ドメイン駆動設計のプラクティスで
カバーできること、できないこと
自己紹介
2
● 名前
○ 松岡 幸一郎 (@little_hand_s)
● 所属
○ 株式会社ログラス
経営管理領域でDDDを実践中
● 運営コミュニティ
○ DDD community jp主催
○ Agile Developers Community主催
● 発信
○ 「ドメイン駆動設計サンプルコード&FAQ」
「ドメイン駆動設計モデリング/実装ガイド」執筆
○ 質問箱 (DDD関連の匿名質問受付)
○ DDD関連の技術ブログ
○ Youtube DDD解説動画チャンネル
● その他活動
○ 企業様へのDDD導入/設計サポートなど
自己紹介
3
● ドメイン駆動設計モデリング/実装ガイド
● 2020年3月発売
● DDDの目的やその用語について、
基礎から概念をしっかり解説します
○ モデリングからコーディングまでの流れ、
レイヤーごとの責務についてそれぞれ解説
執筆書籍紹介(1/2)
4
執筆書籍紹介(2/2)
● ドメイン駆動設計サンプルコード
&FAQ
● 2021年10月発売
● DDDを実践する上でつまずきがちな問題を解消します
○ 「モデリング」「集約の実装」「テスト」について
詳細解説
○ 質問箱に寄せられた約600の質問の中から、
頻出の質問について解説
○ モデル図、サンプルコードを大量掲載
● 前作では基礎概念の理解を
今作では実践する上での具体的な課題解決を目指します
● URLは動画概要にあります
5
6
DDDの目的
(認識合わせ)
● ①ソフトウェアの機能性を高めること
● ②ソフトウェアの保守性を高めること
DDDの目的
7
● ①ソフトウェアの機能性を高めること
→ 役に立つものを作る
 「作ったけど使えない」を避ける
● ②ソフトウェアの保守性を高めること
DDDの目的
8
● ①ソフトウェアの機能性を高めること
→ 役に立つものを作る
 「作ったけど使えない」を避ける
● ②ソフトウェアの保守性を高めること
→ 長期間開発しても機能拡張が容易でありつづける
  「技術的負債でどんどん開発速度が低下する」を避ける
DDDの目的
9
● ①ソフトウェアの機能性を高めること
→ 役に立つものを作る
 「作ったけど使えない」を避ける
● ②ソフトウェアの保守性を高めること
→ 長期間開発しても機能拡張が容易でありつづける
  「技術的負債でどんどん開発速度が低下する」を避ける
DDDでは
役に立つソフトウェアを、長期間保守性を下げずに作り続けられるようにする
ことを目指します
DDDの目的
10
● ①機能性向上へのアプローチ
● ②保守性向上のためのアプローチ
DDDのアプローチ(1/2)
11
● ①機能性向上へのアプローチ
→ ドメインエキスパートと共に行うドメインモデリング
○ 「ドメインモデル」という抽象化した物にドメインの知識を反映することで、役に立つ
ものになる可能性を高める
○ 開発初期だけではなく、各フェーズで得られた発見をこまめに
フィードバックすることで改善頻度を上げる
● ②保守性向上のためのアプローチ
DDDのアプローチ(1/2)
12
DDDのアプローチ(1/2)
● ①機能性向上へのアプローチ
→ ドメインエキスパートと共に行うドメインモデリング
○ 「ドメインモデル」という抽象化した物にドメインの知識を反映することで、役に立つ
ものになる可能性を高める
○ 開発初期だけではなく、各フェーズで得られた発見をこまめに
フィードバックすることで改善頻度を上げる
● ②保守性向上のためのアプローチ
→ 頻繁なモデルの更新に耐えられる実装パターン
○ モデルの形をそのままコードで表現することで、
頻繁なモデルの更新を反映しやすくる
○ 頻繁な更新に耐えられるように、
保守性の高いデザインパターン(エンティティ、リポジトリ等)を適用する
13
DDDのアプローチ(2/2)
よく「DDDならモデリングしないと意味ないよ」と言われがちだが…
● 2つのアプローチは、目的さえ明確であれば個別でも十分に価値を発揮する
● ただし、2つのアプローチは「ドメインモデル」で繋がっており、
一緒に適用するとより大きな価値を発揮する
14
15
ログラスにおける実践
● 2020年1月
○ DDDの外部講師として講義を行う(3回ほど)
松岡とログラス
16
● 2020年1月
○ DDDの外部講師として講義を行う(3回ほど)
● 2020年9月
○ 入社
松岡とログラス
17
いらすとやはどんなイラストでもあるな〜
18
松岡がログラスに入社した理由
● DDDと相性がとてもよく、実践/実験の場としてとても適していた
● ニーズをしっかり押さえた市場選定がしっかりしており、伸びると思った
● 魅力的な人が多かった
19
DDDとの相性とは
● DDDは「ドメインが複雑な領域」に適用するのに向いている
● ログラスのドメインは「経営管理」
○ 会計知識も必要で、業務自体を理解し、
解決策を考えるのが難しい
○ 適当に作っても最初は動くが、後からどんどん辛くなる
→「機能性」「保守性」を高める余地が非常に大きかった
20
実際のアプローチ
● TDD Boot Campの@t_wadaさんの基調講演観賞会を行った
● お手本となるコードを作成(メイン/テスト)
● レイヤーに跨るコーディング、テストの規約を整備
● ドメインモデル図を作成し、それを元に開発
● 地道なペアプロ、レビュー
詳しくはこちらの記事をご参照下さい
21
割とすんなり行ったこと
● 松岡主導のモデル図作成
● モデル図をもとにしたコーディング
○ 新規開発時、モデル図を何度もみながら開発ができ、役立った
● コーディング標準の普及
○ お手本実装があることで、横展開しやすかった
● テスト実装
○ テストがあるとめっちゃ楽じゃん、をとにかく感じてもらう
○ 「テスト!!」と常に言い続ける
○ 現在では「無いなんて考えられない」ぐらいには浸透
22
時間をかけて少しずつ進んだこと/進んでいること
● モデリング必要性の浸透、松岡以外による推進
○ 「モデリング役に立つじゃん」を徐々に感じてもらいながら、
少しずつモデリング作業の必要性が広まっていった
23
● 単純にテストコードがめっちゃ増えた
● プルリクで新規でテストの修正が無いものはほぼ無い
変化が実感できた時(テスト)
24
松岡
入社
変化が実感できた時(モデリング)
● 「モデリングしたいので一緒にモブ作業してくれませんか」
と言われる頻度が増えた時
● 新規プロジェクトの開発チケットに「ドメインモデリング」が
当然のように作成された時
25
● 「何を作るか」から「どうすれば活用してもらえるか」への踏み込み
○ この辺りは、DDDのプラクティスである
「ドメインエキスパートと一緒にモデルを探求する」から、
さらにお客様の声を反映するためのアクションに踏み出す必要がある
苦戦したこと、していること
26
● 「何を作るか」から「どうすれば活用してもらえるか」への踏み込み
○ この辺りは、DDDのプラクティスである
「ドメインエキスパートと一緒にモデルを探求する」から、
さらにお客様の声を反映するためのアクションに踏み出す必要がある
● とにかく、お客様の解像度をあげる必要がある
○ プロダクトマネージャー、カスタマーサクセスと連携し、
ヒアリングと仮説検証を短期間で繰り返す
○ そして、そのサイクルを仕組み化
苦戦したこと、していること
27
● 新機能
● 既存機能
活用していただくための取り組み
28
● 新機能
○ EA(アーリーアクセス)リリース、GA(一般)リリースを分け、
EA対象企業を選定
○ EA対象のお客様には、プロダクトマネージャー(PdM)と
カスタマーサクセス(CS)と一緒にエンジニアがヒアリング
○ 機能の仮説を立てた段階でフィードバックをいただく
○ 4半期の目標(OKR)を「xx機能のリリース」ではなく「EA対象のXX社で新機能を運
用に乗せること」とする
● 既存機能
活用していただくための取り組み
29
活用していただくための取り組み
30
● 新機能
○ EA(アーリーアクセス)リリース、GA(一般)リリースを分け、
EA対象企業を選定
○ EA対象のお客様には、プロダクトマネージャー(PdM)と
カスタマーサクセス(CS)と一緒にエンジニアがヒアリング
○ 機能の仮説を立てた段階でフィードバックをいただく
○ 4半期の目標(OKR)を「xx機能のリリース」ではなく「EA対象のXX社で新機能を運
用に乗せること」とする
● 既存機能
○ CSからお客様の声を直接聞く機会をもうけ、そこからリファインメントしてスプリント
に載せるまでをCRE(Customer Reliability Engineer)担当が実施
○ 毎週「UX改善」枠チケット予算を確保し、安定した工数をつむ
まとめ
● DDDは機能性と保守性改善のために大きな効果を発揮する
● ただ、機能性はエンジニアだけ、社内だけに留まっていては上げきれない
● とにかくお客様の声を聞き、お客様の業務を理解すること
そして仮説検証を小さく繰り返すことの仕組み化が大切!!
31
32

Contenu connexe

Tendances

Tendances (20)

私がドメイン駆動設計をやる理由
私がドメイン駆動設計をやる理由私がドメイン駆動設計をやる理由
私がドメイン駆動設計をやる理由
 
3週連続DDDその1 ドメイン駆動設計の基本を理解する
3週連続DDDその1  ドメイン駆動設計の基本を理解する3週連続DDDその1  ドメイン駆動設計の基本を理解する
3週連続DDDその1 ドメイン駆動設計の基本を理解する
 
ドメイン駆動設計 本格入門
ドメイン駆動設計 本格入門ドメイン駆動設計 本格入門
ドメイン駆動設計 本格入門
 
リッチなドメインモデル 名前探し
リッチなドメインモデル 名前探しリッチなドメインモデル 名前探し
リッチなドメインモデル 名前探し
 
ドメインオブジェクトの見つけ方・作り方・育て方
ドメインオブジェクトの見つけ方・作り方・育て方ドメインオブジェクトの見つけ方・作り方・育て方
ドメインオブジェクトの見つけ方・作り方・育て方
 
ドメイン駆動設計 ( DDD ) をやってみよう
ドメイン駆動設計 ( DDD ) をやってみようドメイン駆動設計 ( DDD ) をやってみよう
ドメイン駆動設計 ( DDD ) をやってみよう
 
ドメイン駆動設計のためのオブジェクト指向入門
ドメイン駆動設計のためのオブジェクト指向入門ドメイン駆動設計のためのオブジェクト指向入門
ドメイン駆動設計のためのオブジェクト指向入門
 
DDD sample code explained in Java
DDD sample code explained in JavaDDD sample code explained in Java
DDD sample code explained in Java
 
実践的な設計って、なんだろう?
実践的な設計って、なんだろう?実践的な設計って、なんだろう?
実践的な設計って、なんだろう?
 
ちいさなオブジェクトでドメインモデルを組み立てる
ちいさなオブジェクトでドメインモデルを組み立てるちいさなオブジェクトでドメインモデルを組み立てる
ちいさなオブジェクトでドメインモデルを組み立てる
 
ドメインロジックに集中せよ 〜ドメイン駆動設計 powered by Spring
ドメインロジックに集中せよ 〜ドメイン駆動設計 powered by Springドメインロジックに集中せよ 〜ドメイン駆動設計 powered by Spring
ドメインロジックに集中せよ 〜ドメイン駆動設計 powered by Spring
 
ドメイン駆動設計 モデリング_実装入門勉強会_2020.3.8
ドメイン駆動設計 モデリング_実装入門勉強会_2020.3.8ドメイン駆動設計 モデリング_実装入門勉強会_2020.3.8
ドメイン駆動設計 モデリング_実装入門勉強会_2020.3.8
 
ドメイン駆動設計の正しい歩き方
ドメイン駆動設計の正しい歩き方ドメイン駆動設計の正しい歩き方
ドメイン駆動設計の正しい歩き方
 
オブジェクト指向プログラミングのためのモデリング入門
オブジェクト指向プログラミングのためのモデリング入門オブジェクト指向プログラミングのためのモデリング入門
オブジェクト指向プログラミングのためのモデリング入門
 
設計してますか?
設計してますか?設計してますか?
設計してますか?
 
DDDはオブジェクト指向を利用してどのようにメンテナブルなコードを書くか
DDDはオブジェクト指向を利用してどのようにメンテナブルなコードを書くかDDDはオブジェクト指向を利用してどのようにメンテナブルなコードを書くか
DDDはオブジェクト指向を利用してどのようにメンテナブルなコードを書くか
 
ドメイン駆動設計 コアドメインを語り合ってみよう
ドメイン駆動設計 コアドメインを語り合ってみようドメイン駆動設計 コアドメインを語り合ってみよう
ドメイン駆動設計 コアドメインを語り合ってみよう
 
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture
 
それはYAGNIか? それとも思考停止か?
それはYAGNIか? それとも思考停止か?それはYAGNIか? それとも思考停止か?
それはYAGNIか? それとも思考停止か?
 
ドメイン駆動設計という設計スタイル
ドメイン駆動設計という設計スタイルドメイン駆動設計という設計スタイル
ドメイン駆動設計という設計スタイル
 

Similaire à ドメイン駆動設計のプラクティスでカバーできること、できないこと[DDD]

Similaire à ドメイン駆動設計のプラクティスでカバーできること、できないこと[DDD] (20)

Aws Dev Day2021 「ドメイン駆動設計のマイクロサービスへの活用とデベロッパーに求められるスキル」参考資料(松岡パート)
Aws Dev Day2021 「ドメイン駆動設計のマイクロサービスへの活用とデベロッパーに求められるスキル」参考資料(松岡パート)Aws Dev Day2021 「ドメイン駆動設計のマイクロサービスへの活用とデベロッパーに求められるスキル」参考資料(松岡パート)
Aws Dev Day2021 「ドメイン駆動設計のマイクロサービスへの活用とデベロッパーに求められるスキル」参考資料(松岡パート)
 
Discordから バーチャルオフィス「Teamflow」 に乗り換えてみた 雑談を生む工夫
Discordから バーチャルオフィス「Teamflow」 に乗り換えてみた 雑談を生む工夫Discordから バーチャルオフィス「Teamflow」 に乗り換えてみた 雑談を生む工夫
Discordから バーチャルオフィス「Teamflow」 に乗り換えてみた 雑談を生む工夫
 
ドメイン駆動設計再入門
ドメイン駆動設計再入門ドメイン駆動設計再入門
ドメイン駆動設計再入門
 
ドメイン駆動設計とは何か 【入門編】
ドメイン駆動設計とは何か 【入門編】ドメイン駆動設計とは何か 【入門編】
ドメイン駆動設計とは何か 【入門編】
 
20151110 ドメイン駆動設計によるサービス開発
20151110 ドメイン駆動設計によるサービス開発20151110 ドメイン駆動設計によるサービス開発
20151110 ドメイン駆動設計によるサービス開発
 
ドメイン駆動設計におけるシナリオテストの活用
ドメイン駆動設計におけるシナリオテストの活用ドメイン駆動設計におけるシナリオテストの活用
ドメイン駆動設計におけるシナリオテストの活用
 
【de:code 2020】 Microsoft 自身の事例から学ぶクラウド移行の価値
【de:code 2020】 Microsoft 自身の事例から学ぶクラウド移行の価値【de:code 2020】 Microsoft 自身の事例から学ぶクラウド移行の価値
【de:code 2020】 Microsoft 自身の事例から学ぶクラウド移行の価値
 
DDのはなし【勉強会資料】
DDのはなし【勉強会資料】 DDのはなし【勉強会資料】
DDのはなし【勉強会資料】
 
KyotoLT_Online_27.pdf
KyotoLT_Online_27.pdfKyotoLT_Online_27.pdf
KyotoLT_Online_27.pdf
 
ドメイン駆動設計を実践するプログラマーの悩み
ドメイン駆動設計を実践するプログラマーの悩みドメイン駆動設計を実践するプログラマーの悩み
ドメイン駆動設計を実践するプログラマーの悩み
 
社内 DDD 勉強会第1回
社内 DDD 勉強会第1回社内 DDD 勉強会第1回
社内 DDD 勉強会第1回
 
Web勉強会(HTML+CSS+JS入門の入門)
Web勉強会(HTML+CSS+JS入門の入門)Web勉強会(HTML+CSS+JS入門の入門)
Web勉強会(HTML+CSS+JS入門の入門)
 
Drupalによる大規模サイトの設計・実装 において何に気をつけるべきか
Drupalによる大規模サイトの設計・実装において何に気をつけるべきかDrupalによる大規模サイトの設計・実装において何に気をつけるべきか
Drupalによる大規模サイトの設計・実装 において何に気をつけるべきか
 
保守とDDDと私
保守とDDDと私保守とDDDと私
保守とDDDと私
 
【de:code 2020】 IT インフラをモダナイズ?今、検討すべきクラウドの活用方法
【de:code 2020】 IT インフラをモダナイズ?今、検討すべきクラウドの活用方法【de:code 2020】 IT インフラをモダナイズ?今、検討すべきクラウドの活用方法
【de:code 2020】 IT インフラをモダナイズ?今、検討すべきクラウドの活用方法
 
BIGLOBE RDRA導入後の要件定義の変化
BIGLOBE RDRA導入後の要件定義の変化BIGLOBE RDRA導入後の要件定義の変化
BIGLOBE RDRA導入後の要件定義の変化
 
国産業務PaaSを担いで稼ぐ方法 ~SIerの生き残る道の1つとなるか? ~
国産業務PaaSを担いで稼ぐ方法 ~SIerの生き残る道の1つとなるか? ~国産業務PaaSを担いで稼ぐ方法 ~SIerの生き残る道の1つとなるか? ~
国産業務PaaSを担いで稼ぐ方法 ~SIerの生き残る道の1つとなるか? ~
 
【de:code 2020】 最前線の現場を支援する Dynamics 365 Mixed Reality アプリケーション最新活用情報
【de:code 2020】 最前線の現場を支援する Dynamics 365 Mixed Reality アプリケーション最新活用情報【de:code 2020】 最前線の現場を支援する Dynamics 365 Mixed Reality アプリケーション最新活用情報
【de:code 2020】 最前線の現場を支援する Dynamics 365 Mixed Reality アプリケーション最新活用情報
 
Azureクラウドのネイティブアプリ、IoTとエッジAIの管理ソリューション
Azureクラウドのネイティブアプリ、IoTとエッジAIの管理ソリューションAzureクラウドのネイティブアプリ、IoTとエッジAIの管理ソリューション
Azureクラウドのネイティブアプリ、IoTとエッジAIの管理ソリューション
 
【de:code 2020】 新しい Microsoft Edge について
【de:code 2020】 新しい Microsoft Edge について【de:code 2020】 新しい Microsoft Edge について
【de:code 2020】 新しい Microsoft Edge について
 

Dernier

Dernier (11)

知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 

ドメイン駆動設計のプラクティスでカバーできること、できないこと[DDD]