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 をどう使うべきか / How to use DDD to ...
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Toshishige Hagihara
May 11, 2019
Technology
8
5.6k
設計人材を育てるために DDD をどう使うべきか / How to use DDD to share design skills
Toshishige Hagihara
May 11, 2019
Tweet
Share
More Decks by Toshishige Hagihara
See All by Toshishige Hagihara
2024-07-19 組織/チームのコアなメンタルモデル = 骨の構造を見出す/変える
hagifoo
2
210
宇宙開発の方法論をもとにした 要求分析の進め方 / Requirements analysis based on space development methodology
hagifoo
0
570
システム設計の中でドメインモデルの役割を体感する / the Place of Domain Model in System Design
hagifoo
2
1.6k
Other Decks in Technology
See All in Technology
We Built for Predictability; The Workloads Didn’t Care
stahnma
0
150
22nd ACRi Webinar - NTT Kawahara-san's slide
nao_sumikawa
0
120
AIエージェントを開発しよう!-AgentCore活用の勘所-
yukiogawa
0
200
外部キー制約の知っておいて欲しいこと - RDBMSを正しく使うために必要なこと / FOREIGN KEY Night
soudai
PRO
12
5.7k
SREチームをどう作り、どう育てるか ― Findy横断SREのマネジメント
rvirus0817
0
370
Red Hat OpenStack Services on OpenShift
tamemiya
0
140
Why Organizations Fail: ノーベル経済学賞「国家はなぜ衰退するのか」から考えるアジャイル組織論
kawaguti
PRO
1
230
usermode linux without MMU - fosdem2026 kernel devroom
thehajime
0
240
顧客との商談議事録をみんなで読んで顧客解像度を上げよう
shibayu36
0
350
Prox Industries株式会社 会社紹介資料
proxindustries
0
100
私たち準委任PdEは2つのプロダクトに挑戦する ~ソフトウェア、開発支援という”二重”のプロダクトエンジニアリングの実践~ / 20260212 Naoki Takahashi
shift_evolve
PRO
2
230
30万人の同時アクセスに耐えたい!新サービスの盤石なリリースを支える負荷試験 / SRE Kaigi 2026
genda
4
1.4k
Featured
See All Featured
Learning to Love Humans: Emotional Interface Design
aarron
275
41k
Believing is Seeing
oripsolob
1
60
Lightning talk: Run Django tests with GitHub Actions
sabderemane
0
120
Heart Work Chapter 1 - Part 1
lfama
PRO
5
35k
Designing Experiences People Love
moore
144
24k
Highjacked: Video Game Concept Design
rkendrick25
PRO
1
290
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
254
22k
Bash Introduction
62gerente
615
210k
The B2B funnel & how to create a winning content strategy
katarinadahlin
PRO
1
280
Joys of Absence: A Defence of Solitary Play
codingconduct
1
290
Raft: Consensus for Rubyists
vanstee
141
7.3k
Facilitating Awesome Meetings
lara
57
6.8k
Transcript
Copyright levii Inc. All rights reserved. 設計人材を育てるために DDD をどう使うべきか? 萩原利士成(@hagifoo)
株式会社レヴィ CTO 2019/05/11 レガシーをぶっつぶせ。現場でDDD! #genbadeDDD
本セッションのゴール
Copyright levii Inc. All rights reserved. 設計って大事ですよね? 3
Copyright levii Inc. All rights reserved. 新規開発でも 4
Copyright levii Inc. All rights reserved. レガシーでも 5
Copyright levii Inc. All rights reserved. 良い設計は人が作り、人が育てる 6
Copyright levii Inc. All rights reserved. 設計できる人がたくさんいれば、 大きな絵が描けるようになる 7
Copyright levii Inc. All rights reserved. しかし、、 8
Copyright levii Inc. All rights reserved. 自分が設計できる != メンバーが設計できるようになる 9
Copyright levii Inc. All rights reserved. 良い設計は人が作り、人が育てる ではどうやって良い人=設計人材 を育てればいいのか? 10
Copyright levii Inc. All rights reserved. 「考えていること」 「試してみたこと」を そのまんま話します 11
Copyright levii Inc. All rights reserved. みなさんの 「こうやってるよ」 「こうしたらいいのでは?」 も教えてください!
12
自己紹介
Copyright levii Inc. All rights reserved. 萩原 利士成 @hagifoo 株式会社レヴィ
共同創業者兼CTO 14
Copyright levii Inc. All rights reserved. 宇宙物理@大学院 15
Copyright levii Inc. All rights reserved. 熱量が足りずドロップアウト 16
Copyright levii Inc. All rights reserved. cybozu.com のインフラ開発チーム 17
Copyright levii Inc. All rights reserved. 契約社数 0 社から 1.5
万社 複雑化する cybozu.com 18
Copyright levii Inc. All rights reserved. どうやったら複雑さに 立ち向かえるのか? 19
Copyright levii Inc. All rights reserved. そうだ設計だ! 20
Copyright levii Inc. All rights reserved. システムモデリングツール 「Balus」を開発 株式会社レヴィを起業 21
Copyright levii Inc. All rights reserved. 22
Copyright levii Inc. All rights reserved. Balus Mega システム設計 コンサル
システム思考 セミナー 複雑さの中に 価値がみつかる 顧客の 頭の中を 変える 顧客の 業務を 変える 顧客の ツールを 変える 23
Copyright levii Inc. All rights reserved. 4 社で技術顧問 (設計や組織・人など色々と) 24
課題意識
Copyright levii Inc. All rights reserved. 案の定 Balus 自体も複雑化 26
Copyright levii Inc. All rights reserved. 終わらないリファクタ 27
Copyright levii Inc. All rights reserved. 敵は強い。強すぎる。 一人で倒すことはできない。。 28
Copyright levii Inc. All rights reserved. さぁどうする? 29
Copyright levii Inc. All rights reserved. 自分はなんとなくできるようになった (気がする) → メンバーに設計を振ってみる
30
Copyright levii Inc. All rights reserved. 全然できない → 苛立つ自分 →
メンバーも萎縮 31
Copyright levii Inc. All rights reserved. 負のスパイラル 32
Copyright levii Inc. All rights reserved. 設計と実装て似てるようで違う 33
Copyright levii Inc. All rights reserved. どうしたらいいのか。。 34
Copyright levii Inc. All rights reserved. 35
Copyright levii Inc. All rights reserved. これは良さそう! 36
Copyright levii Inc. All rights reserved. DDD を使って もっと「設計」力を ダイレクトに育てられないか?
37
そもそも設計って?
Copyright levii Inc. All rights reserved. ここまで「設計」という言葉を 割と雑に使って来ました 39
Copyright levii Inc. All rights reserved. 改めて設計とは? 40
Copyright levii Inc. All rights reserved. “design” The art or
action of conceiving of and producing a plan or drawing of something before it is made. https://en.oxforddictionaries.com/definition/design 41
Copyright levii Inc. All rights reserved. システムの外 システムの中 (ユーザー)インターフェース 抽象度:
高 抽象度: 低 ソースコード 42
Copyright levii Inc. All rights reserved. システムの外 システムの中 (ユーザー)インターフェース 抽象度:
高 抽象度: 低 ソースコード 利用者の 関心ごとを 43
Copyright levii Inc. All rights reserved. システムの外 システムの中 (ユーザー)インターフェース 抽象度:
高 抽象度: 低 ソースコード 利用者の 関心ごとを システムに 落としこむ ための 44
Copyright levii Inc. All rights reserved. システムの外 システムの中 (ユーザー)インターフェース 抽象度:
高 抽象度: 低 ソースコード 利用者の 関心ごとを システムに 落としこむ ための Art or Action 45
Copyright levii Inc. All rights reserved. システムが単純なら(さほど) 難しさはない 46
Copyright levii Inc. All rights reserved. システムの外 システムの中 (ユーザー)インターフェース 抽象度:
高 抽象度: 低 ソースコード FizzBuzz 表示させて 47
Copyright levii Inc. All rights reserved. システムの外 システムの中 (ユーザー)インターフェース 抽象度:
高 抽象度: 低 ソースコード FizzBuzz 表示させて for i in range(1, 101): if i % 15 == 0: print("FizzBuzz") elif i % 3 == 0: print("Fizz") elif i % 5 == 0: print("Buzz") else: print(i) 48
Copyright levii Inc. All rights reserved. システムが複雑だと 49
Copyright levii Inc. All rights reserved. システムの外 システムの中 (ユーザー)インターフェース 抽象度:
高 抽象度: 低 ソースコード AI x 人材で 何かやろう 50
Copyright levii Inc. All rights reserved. システムの外 システムの中 (ユーザー)インターフェース 抽象度:
高 抽象度: 低 ソースコード コンセプト カスタマー ジャーニー サービス AI x 人材で 何かやろう 51
Copyright levii Inc. All rights reserved. システムの外 システムの中 (ユーザー)インターフェース 抽象度:
高 抽象度: 低 ソースコード コンセプト カスタマー ジャーニー 操作 シナリオ ペーパー プロト パッケージ サービス AI x 人材で 何かやろう 52
Copyright levii Inc. All rights reserved. システムの外 システムの中 (ユーザー)インターフェース 抽象度:
高 抽象度: 低 ソースコード コンセプト カスタマー ジャーニー 操作 シナリオ 画面 デザイン ペーパー プロト パッケージ サービス クラス AI x 人材で 何かやろう ドメインモデル 53
Copyright levii Inc. All rights reserved. システムの外 システムの中 (ユーザー)インターフェース 抽象度:
高 抽象度: 低 ソースコード コンセプト カスタマー ジャーニー 操作 シナリオ 画面 デザイン ペーパー プロト パッケージ サービス クラス AI x 人材で 何かやろう ドメインモデル 様々な抽象度で モデルが必要になる 54
Copyright levii Inc. All rights reserved. システムの外 システムの中 (ユーザー)インターフェース 抽象度:
高 抽象度: 低 ソースコード コンセプト カスタマー ジャーニー 操作 シナリオ 画面 デザイン ペーパー プロト パッケージ サービス クラス AI x 人材で 何かやろう ドメインモデル 実装上の制約がコン セプトレベルで影響 を与えたりすること もある = 下から上もある 55
Copyright levii Inc. All rights reserved. 改めてやりたいこと = この Art
を 師匠から弟子へと伝える 56
Copyright levii Inc. All rights reserved. なぜ DDD か? 57
Copyright levii Inc. All rights reserved. システムの外 システムの中 (ユーザー)インターフェース 抽象度:
高 抽象度: 低 ソースコード クラス ドメインモデル 58
Copyright levii Inc. All rights reserved. システムの外 システムの中 (ユーザー)インターフェース 抽象度:
高 抽象度: 低 ソースコード クラス ドメインモデル ドメインモデルが システムの外 (ユーザーの関心) と システムの中 (クラス設計) を繋ぐ 59
Copyright levii Inc. All rights reserved. システムの外 システムの中 (ユーザー)インターフェース 抽象度:
高 抽象度: 低 ソースコード クラス ドメインモデル 実装とも無理なく 繋がる & ドメイン層を 隔離できる 60
Copyright levii Inc. All rights reserved. 設計の Art を体験しやすい 61
Copyright levii Inc. All rights reserved. とはいえ、 「DDD でやって」 だけだとやっぱり難しい
62
試してみて分かってきたポイント
ポイント1 ドメインモデルで議論する 64
Copyright levii Inc. All rights reserved. 当たり前やん 65
Copyright levii Inc. All rights reserved. が、意外とできない 66
Copyright levii Inc. All rights reserved. システムの外 システムの中 (ユーザー)インターフェース 抽象度:
高 抽象度: 低 ソースコード クラス ドメインモデル 67
Copyright levii Inc. All rights reserved. 実装圧力に負けずに 責務をちゃんと考える 68
Copyright levii Inc. All rights reserved. 責務の分割と組み合わせ = 設計の基礎となる力 69
Copyright levii Inc. All rights reserved. プロパティだけでなく メソッドについて議論を振ると 責務が見えてくる(ことが多い) 70
ポイント2 別の視点で見てみる 71
Copyright levii Inc. All rights reserved. とはいえドメインモデルだけでも 見えてこないものも多い 72
Copyright levii Inc. All rights reserved. そんな時は、 73
Copyright levii Inc. All rights reserved. 視点を変えてみる! 74
Copyright levii Inc. All rights reserved. システムの外 システムの中 (ユーザー)インターフェース 抽象度:
高 抽象度: 低 ソースコード 操作 シナリオ 画面 デザイン クラス ドメインモデル 価値 75
Copyright levii Inc. All rights reserved. クラスに落としてみたらどう? 画面はどうなるかな? それをユーザーはどう操作する? 価値はあるかい?
76
Copyright levii Inc. All rights reserved. ドメインモデルの中だけで議論しても 見えてこないこともある → 蒸留する感覚を身につける
77
ポイント3 全体が連動する感覚を体験する 78
Copyright levii Inc. All rights reserved. 設計は一方通行ではない 79
Copyright levii Inc. All rights reserved. ドメインモデルを作って → 実装してみたら →
新しいユースケースを見つけて → ドメインモデルを直して 80
Copyright levii Inc. All rights reserved. ぐるぐるぐるぐる 81
Copyright levii Inc. All rights reserved. システムの外 システムの中 (ユーザー)インターフェース 抽象度:
高 抽象度: 低 ソースコード コンセプト カスタマー ジャーニー 操作 シナリオ 画面 デザイン ペーパー プロト パッケージ サービス クラス ドメインモデル 82
ポイント4 コミュニケーション 83
Copyright levii Inc. All rights reserved. 当たり前を、当たり前にする 師匠と弟子のコミュニケーション 84
Copyright levii Inc. All rights reserved. 師匠の問いかけ力 85
実際にやってみた(現在進行形)
Copyright levii Inc. All rights reserved. 要望箱改善 PJT 87
Copyright levii Inc. All rights reserved. 要望箱=顧客接点 超超超重要! 88
Copyright levii Inc. All rights reserved. しかし、、 ✖ 自分の要望しか見れない ✖
対応がリリースされても分からない 89
Copyright levii Inc. All rights reserved. 変化! 90
Copyright levii Inc. All rights reserved. これはなんとかせねば! 91
Copyright levii Inc. All rights reserved. 全体を見渡せるサイズ感 ユーザーや管理者の行動もある そこまで緊急ではない →
ちょうどいい題材! 92
Copyright levii Inc. All rights reserved. 五十嵐 (弟子) 弓山 (師匠)
やってみよう! 93
意識したこと 94
Copyright levii Inc. All rights reserved. ちゃんと時間を確保する 視点を変えられるようにする ユーザー価値と結びつける 95
やったこと、やってること 96
Copyright levii Inc. All rights reserved. システムの外 システムの中 (ユーザー)インターフェース 抽象度:
高 抽象度: 低 ソースコード 操作 シナリオ 画面 デザイン クラス ドメインモデル 97
Copyright levii Inc. All rights reserved. すでにある実装を元に ToBe のドメインモデルを作る 98
Copyright levii Inc. All rights reserved. 責務について質問して 自分の言葉で語ってもらう 師匠) アナウンスってど
ういう責務持ってるんで すか? 師匠) アナウンスとリ リースノートってどうい う違いがあるの? 弟子) 自分の言葉で話す と徐々に理解が深まって いく感覚 99
Copyright levii Inc. All rights reserved. 振る舞いやユースケースを 洗い出してみる 100
Copyright levii Inc. All rights reserved. ドメインモデルをもう少し 詳細化 101
Copyright levii Inc. All rights reserved. 実装との対応関係や 実装ロードマップを議論 師匠) 最小限のコアな価
値はなに? それにはどこが必要? 師匠) 既存のクラスとど う乖離してるの? どう近づけていこうか? 弟子) 実際のコードとの 対応や、どう変えていく かを意識できた 102
Copyright levii Inc. All rights reserved. コードに落としてみる 弟子) モデルから実装に 落とすと少し詰まる
師匠) モデルと実装が乖 離している箇所で指摘し 損ねた。。 103
Copyright levii Inc. All rights reserved. 画面を作って改めて確認 弟子) 具体的な画面で認 識が揃うので安心できる
104
Copyright levii Inc. All rights reserved. 実装は続く... 105
良かった点 106
Copyright levii Inc. All rights reserved. • ドメインモデルの上で議論 • 別の視点との行き来
• 継続的なコミュニケーション 107
Copyright levii Inc. All rights reserved. • ドメインモデルの上で議論 • 別の視点との行き来
• 継続的なコミュニケーション 当たり前だけど大事 空中戦にならない! 108
Copyright levii Inc. All rights reserved. • ドメインモデルの上で議論 • 別の視点との行き来
• 継続的なコミュニケーション それ管理者?ユーザー? 具体的な気づきが生まれる 109
Copyright levii Inc. All rights reserved. • ドメインモデルの上で議論 • 別の視点との行き来
• 継続的なコミュニケーション 問いかけ大事 結果だけでなくプロセスを共有 110
改善点 111
Copyright levii Inc. All rights reserved. • 実装とドメインモデルの距離が遠い • 時間変化についての議論が漏れがち
• ValueObject がうまく作れない。。 112
Copyright levii Inc. All rights reserved. • 実装とドメインモデルの距離が遠い • 時間変化についての議論が漏れがち
• ValueObject がうまく作れない。。 作り方や実装での使い方に まだ工夫の余地がありそう 113
Copyright levii Inc. All rights reserved. • 実装とドメインモデルの距離が遠い • 時間変化についての議論が漏れがち
• ValueObject がうまく作れない。。 どこから作っていくか? どう変えていくのか? 114
Copyright levii Inc. All rights reserved. • 実装とドメインモデルの距離が遠い • 時間変化についての議論が漏れがち
• ValueObject がうまく作れない。。 主に Python2 が原因? Python3 を使おうw 115
Copyright levii Inc. All rights reserved. 色々と反省点はあったが 設計の Art を伝えるという意味で
一定の成果はありそう 116
Copyright levii Inc. All rights reserved. 設計力をどう測るか? という別の課題 117
まとめ
Copyright levii Inc. All rights reserved. • 設計人材を育てるのに DDD よい
• 当たり前を促すための問いかけ大事 • まだまだ工夫の余地はありそう 119
Copyright levii Inc. All rights reserved. ご静聴ありがとうございました 120