Slide 1

Slide 1 text

ドメイン駆動設計に 挫折をしないで 一歩目を歩く 鈴木まー 東葛.dev in 柏 LT交流会【第2回】

Slide 2

Slide 2 text

鈴木まー(suzuki_mar) RubyでDDDや モジュラーモノリスなど のソフトウェアアーキテクチャ の導入、定着を している プロレス団体のCMSをメインとした システムの開発中 プロレス団体のDX 直近の仕事 最近していること PHP Sessionless Conferenceの コアスタッフ 設計などについて 設計界隈やPHP界隈の コミュニティで情報発信中 コミュニティ活動 @suzuki_mar

Slide 3

Slide 3 text

このLTで おこないたいこと @suzuki_mar

Slide 4

Slide 4 text

ドメイン駆動設計につ いてなんとなく興味を もってもらいたい @suzuki_mar

Slide 5

Slide 5 text

興味を持つと言っても ドメイン駆動設計って よくわからなくて 難しそう @suzuki_mar

Slide 6

Slide 6 text

難しいと感じること @suzuki_mar 定番書を読んで挫折をしてしまう 用語が多すぎる

Slide 7

Slide 7 text

定番書を読んで挫折をしてしまう DDDを勉強しようと思った人を 挫折させてきた本 @suzuki_mar

Slide 8

Slide 8 text

デザインパターンでいうと @suzuki_mar

Slide 9

Slide 9 text

@suzuki_mar 挫折しない本 挫折する本

Slide 10

Slide 10 text

原典となる本はものすごい勉強になるけど、 初心者が読むと挫折してしまう 先に初心者向けの本をよんで 理解してから必要であれば原典を読む @suzuki_mar

Slide 11

Slide 11 text

学び始めた段階で 挫折しないのが一番大切 @suzuki_mar

Slide 12

Slide 12 text

ドメイン駆動設計で 挫折しない本 @suzuki_mar

Slide 13

Slide 13 text

@suzuki_mar

Slide 14

Slide 14 text

難しいと感じること @suzuki_mar 定番書を読んで挫折をしてしまう 用語が多すぎる

Slide 15

Slide 15 text

@suzuki_mar ドメイン駆動設計はエンティティや バリューオブジェクトや集約。。。 などたくさんの用語があるけど、 ドメイン駆動設計の目的について理解 するまでは覚えなくてよい

Slide 16

Slide 16 text

@suzuki_mar 最初に理解する用語 ドメイン 事業活動または事業領域 サブドメイン 業務領域 同じことば 開発者だけでなくシステム開発に 関する人全員が話す言葉

Slide 17

Slide 17 text

難しいと感じること @suzuki_mar 定番書を読んで挫折をしてしまう 用語が多すぎる 最初は、ドメイン、サブドメイ ン、同じ言葉だけを理解する

Slide 18

Slide 18 text

ドメイン駆動設計の勉強で 挫折しないために @suzuki_mar 入門者をメインターゲット層にもしている “ドメイン駆動設計をはじめよう”を読む ドメイン駆動設計の実装周りの用語は最初は覚えなくて、 そのかわりドメイン駆動設計にとって 大切な “ドメイン”、”サブドメイン”、”同じ言葉”に をさきに理解する

Slide 19

Slide 19 text

ドメイン駆動設計についての 挫折しそうな イメージはなくなった @suzuki_mar

Slide 20

Slide 20 text

ドメイン駆動設計は自分に関係あるの? 事業活動や業務領域 とかプログラミングと関係なさそう @suzuki_mar

Slide 21

Slide 21 text

鈴木にとってのプログラマーの仕事は 事業活動をエンジニアリングの 視点で理解をしていき、 重要な業務領域の開発に 集中して時間をつかっていく @suzuki_mar

Slide 22

Slide 22 text

3種類の業務領域 @suzuki_mar コアサブドメイン 一般的な業務領域 補完的な業務領域

Slide 23

Slide 23 text

@suzuki_mar コアサブドメイン その事業活動において大切なことで このサブドメインがあることで ビジネスとして成立したり競合優位性になるもの ECサイトの場合 ・ ・

Slide 24

Slide 24 text

@suzuki_mar コアサブドメイン その事業活動において大切なことで このサブドメインがあることで ビジネスとして成立したり競合優位性になるもの ECサイトの場合 ・商品の検索 ・商品のレコメンド

Slide 25

Slide 25 text

@suzuki_mar 一般的な業務領域 コアサブドメインをおこなうために 必要だがすでにそれは 専門のSaaSが存在しているので それを使用すると良いため 他の同じようなプロダクトとは競合差別化にはならないもの ECサイトの場合 ・ ・

Slide 26

Slide 26 text

@suzuki_mar 一般的な業務領域 コアサブドメインをおこなうために 必要だがすでにそれは 専門のSaaSが存在しているので それを使用すると良いため 他の同じようなプロダクトとは競合差別化にはならないもの ECサイトの場合 ・商品の販売方法 ・商品の在庫管理

Slide 27

Slide 27 text

@suzuki_mar 補完的な業務領域 コアサブドメインをおこなうために 必要だけどでそれをおこなうSaaSが存在しない ので自分たちで実装をする必要があるが できるだけ楽をしたいもの ECサイトの場合 ・ ・

Slide 28

Slide 28 text

@suzuki_mar 補完的な業務領域 コアサブドメインをおこなうために 必要だけどでそれをおこなうSaaSが存在しない ので自分たちで実装をする必要があるが できるだけ楽をしたいもの ECサイトの場合 ・売上レポート ・ユーザープロフィール

Slide 29

Slide 29 text

@suzuki_mar コアサブドメイン 補完的な業務領域 一般的な業務領域

Slide 30

Slide 30 text

@suzuki_mar コアサブドメイン 補完的な業務領域 一般的な業務領域 競合差別化をするために最も力をかけるべきもの

Slide 31

Slide 31 text

@suzuki_mar コアサブドメイン 補完的な業務領域 一般的な業務領域 競合差別化をするために最も力をかけるべきもの コアサブドメインのために必要だけど、すでにその業務を 専門でおこなうためのSaaSが存在するので それを使用したほうがいい

Slide 32

Slide 32 text

@suzuki_mar コアサブドメイン 補完的な業務領域 一般的な業務領域 競合差別化をするために最も力をかけるべきもの コアサブドメインのために必要だけど、すでにその業務を 専門でおこなうためのSaaSが存在するので それを使用したほうがいい コアサブドメインのために必要であるが、外部の SaaSを使う必要までではなかったり、存在しな いため自分たちで実装をするができるだけ楽にし たい

Slide 33

Slide 33 text

@suzuki_mar 事業活動を3種類にわけていて 競合差別となる最も大切な コアドメインに対して集中して 時間をつかっていき、それ以外は 外部のサービスをしようしたり、 良い意味で手を抜く つまり

Slide 34

Slide 34 text

@suzuki_mar コアドメインを 考えてみよう

Slide 35

Slide 35 text

@suzuki_mar XとかのSNSについての コアドメイン

Slide 36

Slide 36 text

@suzuki_mar 投稿する 他のユーザーとの繋がる

Slide 37

Slide 37 text

@suzuki_mar SNSで投稿をしやすくなり いろんな人が投稿してくれる それを他のたくさんの ユーザーも投稿してそれをもとに ユーザー同士のやりとり がしやすくなる コアドメインに集中していくことにより

Slide 38

Slide 38 text

@suzuki_mar Spotifyとかの 音楽配信サービス

Slide 39

Slide 39 text

@suzuki_mar どこでも音楽をきける (車、スマートウォッチにも対応) 優秀なレコメンド機能

Slide 40

Slide 40 text

@suzuki_mar 好きな場所、タイミングでアプリを 起動したらレコメンドされたその人 にあった音楽をきくことができる コアドメインに集中していくことにより

Slide 41

Slide 41 text

@suzuki_mar 同じ言葉

Slide 42

Slide 42 text

@suzuki_mar コアドメインに対していくには コアドメインに対する理解が欠かせない また、コアドメインはビジネスの中心なのでコア ドメインの開発が会社の成長につながる そのため、開発チーム以外のセールスやカスタ マーサクセスなどの全員でコアドメインに対して 理解をしていく必要がある

Slide 43

Slide 43 text

@suzuki_mar 全員の共通認識を持てる 同じことばでプロダクトに ついて議論をしていく必要がある

Slide 44

Slide 44 text

@suzuki_mar おこなっていることは 役割ごとに違うので おなじことばを使うには 意識して使う必要がある

Slide 45

Slide 45 text

@suzuki_mar それぞれの役割ごとに 見る視点が違う バックエンド エンジニアは DBを見ている デザイナーや フロントエンド エンジニアは UIをみている カスタマーサクセス は一人ひとりのユー ザーをみている セールスは お客さんをみている

Slide 46

Slide 46 text

@suzuki_mar 見ている視点が違うので 使っている言葉が違う

Slide 47

Slide 47 text

@suzuki_mar ECサイトを開発している場合の 違う言葉を使用している例 セールス 新しい契約をするためにTOPページに表示されている商品一覧を最新 の商品を多く表示するようにしてほしい エンジニア TOPページに表示されている商品はレコメンドされている商品のこと だから、レコメンドエンジンを改良しよう セールス TOPページに表示されている商品一覧が最新のものになっていな い!!

Slide 48

Slide 48 text

レコメンドした商品一覧 レビューが高 い商品一覧 セールスが 修正して ほしいと思った ところ エンジニアが 修正しようと 勘違いしたもの 同じ言葉を使用していないので誤解が発生してしまった

Slide 49

Slide 49 text

@suzuki_mar ECサイトを開発している場合の 同じ言葉を使用している例 セールス 新しい契約をするためにTOPページのレビューが高い商品に表示され ている商品一覧を最新の商品を多く表示するようにしてほしい エンジニア レビューの高い商品のなかでも最新のものを表示するために、アルゴ リズムを変更しよう セールス レビューの高い商品一覧に最新のもの表示されている!! 新しい契約を結べそう

Slide 50

Slide 50 text

同じ言葉を使用しているので システムに関わる関係者が 同じ視点をみることができるので スムーズに会話をすることができる @suzuki_mar 同じ言葉

Slide 51

Slide 51 text

@suzuki_mar まとめ

Slide 52

Slide 52 text

挫折しづらい初心者も対象 にしている本を読んで、 一気にいろんな用語 を理解しない @suzuki_mar

Slide 53

Slide 53 text

ドメイン駆動設計をするために必要となる 事業活動とそれを三部類した コアサブドメイン、一般的な業務領域、補完的な業務領域を 理解してそれに応じた実装方針をとる 役割に関係なく全員が同じ言葉をつかって事業活動や コアサブドメインについて理解をしていく @suzuki_mar

Slide 54

Slide 54 text

いままでの説明でドメイン駆動設計について 挫折をしないやりかたを理解して ドメイン駆動設計についての必須の用語を理解したけど ドメイン駆動設計を実際の開発を するためにはまだまだ理解する事が必要 そのために挫折をしないために次の本を読む @suzuki_mar

Slide 55

Slide 55 text

@suzuki_mar この登壇でいままで話してきたことを詳細に わかりやすく書かれている ドメイン駆動の業務領域についての理解をし ていく方法、実装方法など幅広く学習するこ とができるので、この本をチームで読んで実 践をしていくとチームではじめていくことが できる

Slide 56

Slide 56 text

最後に

Slide 57

Slide 57 text

鈴木はドメイン駆動設計を理解していくことで、 品質の低い設計がなくなりプロダクトが 作っていきたい価値を発揮できる様になると思っています このセッションを通して ドメイン駆動設計を挫折しないで 少しずつ理解していくための第1歩と 思ってもらえれば幸です @suzuki_mar

Slide 58

Slide 58 text

終わり