Slide 1

Slide 1 text

チームでDDDを実践するための ことはじめ 設計カンファレンス Extends OOC 2024.3.29 遠藤大輔 株式会社ゆめみ

Slide 2

Slide 2 text

株式会社ゆめみ リードエンジニア・アーキテクト 遠藤 大輔 X: @DddEndow 2019年4月にエンジニアとしてゆめみに入社。 PHPやKotlinを中心にプロジェクトを牽引しつつ、 DDD を導入する取り組みを行っている。 2 About me

Slide 3

Slide 3 text

3 ゆめみの会社情報

Slide 4

Slide 4 text

“ OOC2024 いかがでしたか? 4 OOC2024の思い出

Slide 5

Slide 5 text

5 OOC2024の思い出 思い出に残っているセッションはありますか?

Slide 6

Slide 6 text

6 OOC2024の思い出:思わず膝を打ってしまったセッション https://speakerdeck.com/yuitosato/functional-and-type-safe-ddd-for-oop

Slide 7

Slide 7 text

“ OOCの発表すげー! モチベーション上がる!! うちのプロジェクトでもDDDやってみたい!! 7

Slide 8

Slide 8 text

8 理解のある上司っぴ 理想的な職場

Slide 9

Slide 9 text

9 理解のある上司っぴ 理想的な職場 導入に意欲的なチームメンバー

Slide 10

Slide 10 text

10 理解のある上司っぴ 裁量のあるプロジェクト 理想的な職場 導入に意欲的なチームメンバー

Slide 11

Slide 11 text

導入に意欲的なチームメンバー 理想的な職場:そこになければないですね。 11 理解のある上司っぴ 裁量のあるプロジェクト 必ずしもあるとは限らない

Slide 12

Slide 12 text

12 理想的な職場:そこになければないですね。 OOC2024のとあるセッションでのアンケート 実際にDDDに取り組んだ経験のある人 会場の1/4~1/5

Slide 13

Slide 13 text

DDDをプロジェクトやチームに どうやって導入していくか 今日のテーマ 13

Slide 14

Slide 14 text

DDDをプロジェクトやチームに どうやって導入していくか 今日のテーマ 14 Tips集

Slide 15

Slide 15 text

“ 開発中はドメインの追求や プロジェクトを推進することに 注力できるようにする 15 一番伝えたいこと

Slide 16

Slide 16 text

16 導入するまでのフロー 個人がリードできる能力を確立 チームに展開, 不安要素をなくす ビジネスサイドと交渉し、 プロジェクトに取り入れる

Slide 17

Slide 17 text

アジェンダ ◉ ビジネスサイドやステークホルダーの説得 ◉ どうにかして知識と経験を得る ◉ チームで開発するための工夫 17

Slide 18

Slide 18 text

18 Tips: 1 ビジネスサイドやステークホルダーの説得 Tips1

Slide 19

Slide 19 text

19 新しい技術だからチャレンジさせて! Tips: 1:それはそう ダメです

Slide 20

Slide 20 text

● 取り入れることによるメリットや利益 ○ 開発効率の向上 ● 回避可能になる将来的なリスク ○ 技術的負債の低減 ● 想定される課題とその影響範囲 ○ 学習コストによる開発遅延 説得材料を手に入れる 20 Tips: 1:ビジネスサイドやステークホルダーの説得

Slide 21

Slide 21 text

● 取り入れることによるメリットや利益 ○ 開発効率の向上 ● 回避可能になる将来的なリスク ○ 技術的負債の低減 ● 想定される課題とその影響範囲 ○ 学習コストによる開発遅延 説得材料を手に入れる 21 Tips: 1:ビジネスサイドやステークホルダーの説得 どんな説明が最適かはプロジェクトによりけりなので、自分で 取捨選択して考える必要がある

Slide 22

Slide 22 text

“ 逆説的に、説明・説得できるだけの知識と 最低限の経験を身につけなくてはいけない 22 Tips: 1:ビジネスサイドやステークホルダーの説得

Slide 23

Slide 23 text

23 Tips: 1:ビジネスサイドやステークホルダーの説得 しっかりと説明できるなら問題ないが…

Slide 24

Slide 24 text

24 Tips: 1:それができれば苦労しないんじゃい! 何もわからんけど DDDやってみたい! 説得力のある知識や経験を 積んでから来い! DDD本難しすぎて何もわからん! DDDやったことないのに どうやって経験を身につけるんだ!! 説得力のある知識や経験を 積んでから来い! 説得力のある知識や経験を 積んでから出直せ!!

Slide 25

Slide 25 text

25 Tips: 2 どうにかして知識と経験を得る Tips2

Slide 26

Slide 26 text

● 書籍を読む ● DDD導入済みの副業先で実務のコードに触れる ● ドメインモデル図やコードを書いてみる 知識と経験を得る 26 Tips: 2:どうにかして知識と経験を得る サンプルコードが 載っている書籍の方が イメージしやすいので、 入門としておすすめ

Slide 27

Slide 27 text

● 書籍を読む ● DDD導入済みの副業先で実務のコードに触れる ● ドメインモデル図やコードを書いてみる 知識と経験を得る 27 Tips: 2:どうにかして知識と経験を得る サンプルコードが 載っている書籍の方が イメージしやすいので、 入門としておすすめ 難解 副業できない

Slide 28

Slide 28 text

28 ネット上のサンプルコードを写経してもよくわからん… & ドメインモデリングはどう練習すれば…? Tips: 2:どうにかして知識と経験を得る

Slide 29

Slide 29 text

“ IPA情報処理試験の データベーススペシャリストの 過去問を使おう 29 Tips: 2:IPA情報処理試験の過去問を活用する

Slide 30

Slide 30 text

30 Tips: 2:IPA情報処理試験の過去問を活用する

Slide 31

Slide 31 text

31 Tips: 2:IPA情報処理試験の過去問を活用する https://www.ipa.go.jp/shiken/mondai-kaiotu/2023r05.html

Slide 32

Slide 32 text

午後Ⅰ,Ⅱの問題が最適 ● 仕様書の見本としての完成度が非常に高い ● 回答としてER図が用意されているため、ドメインモデルとテー ブル構造の違いを比較しやすい ● 実務に近い形でのトレーニングを行える IPAの過去問を活用する 32 Tips: 2:IPA情報処理試験の過去問を活用する

Slide 33

Slide 33 text

33 Q. コードを書く練習もできる? A. もちろん! Tips: 2:IPA情報処理試験の過去問を活用する

Slide 34

Slide 34 text

34 Tips: 2:実際に用意したものがこちらになります https://github.com/DddEndow/sample-ddd-laravel?tab=readme-ov-file

Slide 35

Slide 35 text

コードを書くことで得られること ほとんどのDDDの書籍はJavaを基本に書かれている →プログラミング言語やFWによって細かい調整が必要 ● より適したアーキテクチャやパッケージ構造の模索 ● ドメインモデルや集約の表現 ● 実務レベルのコアロジックの実装 ● IDなど統合的なオブジェクトの実装 35 Tips: 2:IPA情報処理試験の過去問を活用する

Slide 36

Slide 36 text

36 実際に手を動かすことで知識と経験を補い 他の学習方法へのとっかかりを作る Tips: 2:IPA情報処理試験の過去問を活用する DDDちょっとわかってきたから OOC2024でもっと勉強してくるわ!! 先週終わったばっかやぞ!

Slide 37

Slide 37 text

37 Tips: 3:チームで開発するための工夫 チームで開発するための工夫 Tips3

Slide 38

Slide 38 text

38 Tips: 3:チームで開発するための工夫 個人でできる チームでできる ≠

Slide 39

Slide 39 text

39 実際にチームでやってみたら問題が色々出てきた! ↓ 開発に遅延が!! …とならないように Tips: 3:チームで開発するための工夫

Slide 40

Slide 40 text

開発が停滞しないようにするために ● DDD以外の不安要素をなくす ● コードを書く上で障害になるポイントを事前に潰す 40 Tips: 3:チームで開発するための工夫

Slide 41

Slide 41 text

DDD以外の不安要素をなくす ≒ 他の部分でリソースに余裕を持たせる ● マネジメントのコストを減らす ○ 関係性を構築済みのメンバー ● 安定したプロジェクトで実施する ○ 規模が小さい or コアドメインが複雑ではない ○ 技術力の高いメンバー 41 Tips: 3:チームで開発するための工夫

Slide 42

Slide 42 text

コードを書く上で障害になるポイントを事前に潰す ● コーディング規約を作る ● 複雑なロジックを持つサンプルコードを作る ● 事前にメンバーにレクチャー PRのレビューで指摘するのは時間も労力もかかるので、 それ以外のことで負担を低減できるようにする 42 Tips: 3:チームで開発するための工夫

Slide 43

Slide 43 text

“ 2つ以上不安要素があるなら、導入を再検討した方が無難 プロジェクト中に発生する事態をある程度予想して対策する 43 Tips: 3:チームで開発するための工夫 Point!

Slide 44

Slide 44 text

“ 開発中はドメインの追求や プロジェクトを推進することに 注力できるようにする 44 Tips: 3:チームで開発するための工夫

Slide 45

Slide 45 text

45 まとめ まとめ

Slide 46

Slide 46 text

46 まとめ ビジネスサイドやステークホルダーの説得 Tips1

Slide 47

Slide 47 text

47 まとめ どうにかして知識と経験を得る Tips2

Slide 48

Slide 48 text

48 まとめ チームで開発するための工夫 Tips3

Slide 49

Slide 49 text

49 まとめ 個人がリードできる能力を確立 チームに展開, 不安要素をなくす ビジネスサイドと交渉し、 プロジェクトに取り入れる

Slide 50

Slide 50 text

“ 開発中はドメインの追求や プロジェクトを推進することに 注力できるようにする 50 まとめ

Slide 51

Slide 51 text

Thanks! 51