Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
チームでDDDを実践するためのことはじめ
Search
akkino/D-En
March 29, 2024
Technology
0
650
チームでDDDを実践するためのことはじめ
Daisuke Endo | @DddEndow
設計カンファレンス extends OOC
https://yumemi.connpass.com/event/310541/
akkino/D-En
March 29, 2024
Tweet
Share
More Decks by akkino/D-En
See All by akkino/D-En
プロジェクト新規参入者のリードタイム短縮の観点から見る、品質の高いコードとアーキテクチャを保つメリット
d_endo
1
1.1k
経験学習型キャリア探索法 ~ふりかえりで始めるキャリアパスの見つけ方~
d_endo
2
1.2k
負荷試験の観点から見るGraphQLにおけるPHPのコードチューニング
d_endo
1
2.5k
Step Functions Expressで作るフルマネージドなサーバーレスバッチ
d_endo
1
2.4k
AWS認定資格のススメ
d_endo
1
440
Laravel + Lighthouseで始める低コストなGraphQL入門
d_endo
4
3.9k
30分でOpenID Connect完全に理解したと言えるようになる勉強会
d_endo
47
28k
今だからこそ考える「科学技術の倫理学」
d_endo
2
1.3k
アホで乗り越える失敗との付き合い方
d_endo
2
1.4k
Other Decks in Technology
See All in Technology
Taming you application's environments
salaboy
0
190
Shopifyアプリ開発における Shopifyの機能活用
sonatard
4
250
Amazon CloudWatch Network Monitor のススメ
yuki_ink
1
210
AWS Lambda のトラブルシュートをしていて思うこと
kazzpapa3
2
180
TypeScriptの次なる大進化なるか!? 条件型を返り値とする関数の型推論
uhyo
2
1.7k
Lambda10周年!Lambdaは何をもたらしたか
smt7174
2
110
OCI Network Firewall 概要
oracle4engineer
PRO
0
4.1k
強いチームと開発生産性
onk
PRO
34
11k
AGIについてChatGPTに聞いてみた
blueb
0
130
The Rise of LLMOps
asei
7
1.6k
安心してください、日本語使えますよ―Ubuntu日本語Remix提供休止に寄せて― 2024-11-17
nobutomurata
1
1k
iOS/Androidで同じUI体験をネ イティブで作成する際に気をつ けたい落とし穴
fumiyasac0921
1
110
Featured
See All Featured
Writing Fast Ruby
sferik
627
61k
Large-scale JavaScript Application Architecture
addyosmani
510
110k
Unsuck your backbone
ammeep
668
57k
Documentation Writing (for coders)
carmenintech
65
4.4k
Fashionably flexible responsive web design (full day workshop)
malarkey
405
65k
A designer walks into a library…
pauljervisheath
204
24k
GraphQLの誤解/rethinking-graphql
sonatard
67
10k
The Straight Up "How To Draw Better" Workshop
denniskardys
232
140k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
8
890
Ruby is Unlike a Banana
tanoku
97
11k
We Have a Design System, Now What?
morganepeng
50
7.2k
Raft: Consensus for Rubyists
vanstee
136
6.6k
Transcript
チームでDDDを実践するための ことはじめ 設計カンファレンス Extends OOC 2024.3.29 遠藤大輔 株式会社ゆめみ
株式会社ゆめみ リードエンジニア・アーキテクト 遠藤 大輔 X: @DddEndow 2019年4月にエンジニアとしてゆめみに入社。 PHPやKotlinを中心にプロジェクトを牽引しつつ、 DDD を導入する取り組みを行っている。
2 About me
3 ゆめみの会社情報
“ OOC2024 いかがでしたか? 4 OOC2024の思い出
5 OOC2024の思い出 思い出に残っているセッションはありますか?
6 OOC2024の思い出:思わず膝を打ってしまったセッション https://speakerdeck.com/yuitosato/functional-and-type-safe-ddd-for-oop
“ OOCの発表すげー! モチベーション上がる!! うちのプロジェクトでもDDDやってみたい!! 7
8 理解のある上司っぴ 理想的な職場
9 理解のある上司っぴ 理想的な職場 導入に意欲的なチームメンバー
10 理解のある上司っぴ 裁量のあるプロジェクト 理想的な職場 導入に意欲的なチームメンバー
導入に意欲的なチームメンバー 理想的な職場:そこになければないですね。 11 理解のある上司っぴ 裁量のあるプロジェクト 必ずしもあるとは限らない
12 理想的な職場:そこになければないですね。 OOC2024のとあるセッションでのアンケート 実際にDDDに取り組んだ経験のある人 会場の1/4~1/5
DDDをプロジェクトやチームに どうやって導入していくか 今日のテーマ 13
DDDをプロジェクトやチームに どうやって導入していくか 今日のテーマ 14 Tips集
“ 開発中はドメインの追求や プロジェクトを推進することに 注力できるようにする 15 一番伝えたいこと
16 導入するまでのフロー 個人がリードできる能力を確立 チームに展開, 不安要素をなくす ビジネスサイドと交渉し、 プロジェクトに取り入れる
アジェンダ ◉ ビジネスサイドやステークホルダーの説得 ◉ どうにかして知識と経験を得る ◉ チームで開発するための工夫 17
18 Tips: 1 ビジネスサイドやステークホルダーの説得 Tips1
19 新しい技術だからチャレンジさせて! Tips: 1:それはそう ダメです
• 取り入れることによるメリットや利益 ◦ 開発効率の向上 • 回避可能になる将来的なリスク ◦ 技術的負債の低減 • 想定される課題とその影響範囲
◦ 学習コストによる開発遅延 説得材料を手に入れる 20 Tips: 1:ビジネスサイドやステークホルダーの説得
• 取り入れることによるメリットや利益 ◦ 開発効率の向上 • 回避可能になる将来的なリスク ◦ 技術的負債の低減 • 想定される課題とその影響範囲
◦ 学習コストによる開発遅延 説得材料を手に入れる 21 Tips: 1:ビジネスサイドやステークホルダーの説得 どんな説明が最適かはプロジェクトによりけりなので、自分で 取捨選択して考える必要がある
“ 逆説的に、説明・説得できるだけの知識と 最低限の経験を身につけなくてはいけない 22 Tips: 1:ビジネスサイドやステークホルダーの説得
23 Tips: 1:ビジネスサイドやステークホルダーの説得 しっかりと説明できるなら問題ないが…
24 Tips: 1:それができれば苦労しないんじゃい! 何もわからんけど DDDやってみたい! 説得力のある知識や経験を 積んでから来い! DDD本難しすぎて何もわからん! DDDやったことないのに どうやって経験を身につけるんだ!!
説得力のある知識や経験を 積んでから来い! 説得力のある知識や経験を 積んでから出直せ!!
25 Tips: 2 どうにかして知識と経験を得る Tips2
• 書籍を読む • DDD導入済みの副業先で実務のコードに触れる • ドメインモデル図やコードを書いてみる 知識と経験を得る 26 Tips: 2:どうにかして知識と経験を得る
サンプルコードが 載っている書籍の方が イメージしやすいので、 入門としておすすめ
• 書籍を読む • DDD導入済みの副業先で実務のコードに触れる • ドメインモデル図やコードを書いてみる 知識と経験を得る 27 Tips: 2:どうにかして知識と経験を得る
サンプルコードが 載っている書籍の方が イメージしやすいので、 入門としておすすめ 難解 副業できない
28 ネット上のサンプルコードを写経してもよくわからん… & ドメインモデリングはどう練習すれば…? Tips: 2:どうにかして知識と経験を得る
“ IPA情報処理試験の データベーススペシャリストの 過去問を使おう 29 Tips: 2:IPA情報処理試験の過去問を活用する
30 Tips: 2:IPA情報処理試験の過去問を活用する
31 Tips: 2:IPA情報処理試験の過去問を活用する https://www.ipa.go.jp/shiken/mondai-kaiotu/2023r05.html
午後Ⅰ,Ⅱの問題が最適 • 仕様書の見本としての完成度が非常に高い • 回答としてER図が用意されているため、ドメインモデルとテー ブル構造の違いを比較しやすい • 実務に近い形でのトレーニングを行える IPAの過去問を活用する 32
Tips: 2:IPA情報処理試験の過去問を活用する
33 Q. コードを書く練習もできる? A. もちろん! Tips: 2:IPA情報処理試験の過去問を活用する
34 Tips: 2:実際に用意したものがこちらになります https://github.com/DddEndow/sample-ddd-laravel?tab=readme-ov-file
コードを書くことで得られること ほとんどのDDDの書籍はJavaを基本に書かれている →プログラミング言語やFWによって細かい調整が必要 • より適したアーキテクチャやパッケージ構造の模索 • ドメインモデルや集約の表現 • 実務レベルのコアロジックの実装 •
IDなど統合的なオブジェクトの実装 35 Tips: 2:IPA情報処理試験の過去問を活用する
36 実際に手を動かすことで知識と経験を補い 他の学習方法へのとっかかりを作る Tips: 2:IPA情報処理試験の過去問を活用する DDDちょっとわかってきたから OOC2024でもっと勉強してくるわ!! 先週終わったばっかやぞ!
37 Tips: 3:チームで開発するための工夫 チームで開発するための工夫 Tips3
38 Tips: 3:チームで開発するための工夫 個人でできる チームでできる ≠
39 実際にチームでやってみたら問題が色々出てきた! ↓ 開発に遅延が!! …とならないように Tips: 3:チームで開発するための工夫
開発が停滞しないようにするために • DDD以外の不安要素をなくす • コードを書く上で障害になるポイントを事前に潰す 40 Tips: 3:チームで開発するための工夫
DDD以外の不安要素をなくす ≒ 他の部分でリソースに余裕を持たせる • マネジメントのコストを減らす ◦ 関係性を構築済みのメンバー • 安定したプロジェクトで実施する ◦
規模が小さい or コアドメインが複雑ではない ◦ 技術力の高いメンバー 41 Tips: 3:チームで開発するための工夫
コードを書く上で障害になるポイントを事前に潰す • コーディング規約を作る • 複雑なロジックを持つサンプルコードを作る • 事前にメンバーにレクチャー PRのレビューで指摘するのは時間も労力もかかるので、 それ以外のことで負担を低減できるようにする 42
Tips: 3:チームで開発するための工夫
“ 2つ以上不安要素があるなら、導入を再検討した方が無難 プロジェクト中に発生する事態をある程度予想して対策する 43 Tips: 3:チームで開発するための工夫 Point!
“ 開発中はドメインの追求や プロジェクトを推進することに 注力できるようにする 44 Tips: 3:チームで開発するための工夫
45 まとめ まとめ
46 まとめ ビジネスサイドやステークホルダーの説得 Tips1
47 まとめ どうにかして知識と経験を得る Tips2
48 まとめ チームで開発するための工夫 Tips3
49 まとめ 個人がリードできる能力を確立 チームに展開, 不安要素をなくす ビジネスサイドと交渉し、 プロジェクトに取り入れる
“ 開発中はドメインの追求や プロジェクトを推進することに 注力できるようにする 50 まとめ
Thanks! 51