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
Toshishige Hagihara
May 11, 2019
Technology
8
5.1k
設計人材を育てるために 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
130
宇宙開発の方法論をもとにした 要求分析の進め方 / Requirements analysis based on space development methodology
hagifoo
0
370
システム設計の中でドメインモデルの役割を体感する / the Place of Domain Model in System Design
hagifoo
2
1.2k
Other Decks in Technology
See All in Technology
エンジニア人生の拡張性を高める 「探索型キャリア設計」の提案
tenshoku_draft
1
130
誰も全体を知らない ~ ロールの垣根を超えて引き上げる開発生産性 / Boosting Development Productivity Across Roles
kakehashi
2
230
IBC 2024 動画技術関連レポート / IBC 2024 Report
cyberagentdevelopers
PRO
1
120
Making your applications cross-environment - OSCG 2024 NA
salaboy
0
200
マルチモーダル / AI Agent / LLMOps 3つの技術トレンドで理解するLLMの今後の展望
hirosatogamo
37
12k
CDCL による厳密解法を採用した MILP ソルバー
imai448
3
170
Oracle Cloud Infrastructureデータベース・クラウド:各バージョンのサポート期間
oracle4engineer
PRO
29
13k
テストコード品質を高めるためにMutation Testingライブラリ・Strykerを実戦導入してみた話
ysknsid25
7
2.7k
B2B SaaSから見た最近のC#/.NETの進化
sansantech
PRO
0
910
Flutterによる 効率的なAndroid・iOS・Webアプリケーション開発の事例
recruitengineers
PRO
0
120
AI前提のサービス運用ってなんだろう?
ryuichi1208
8
1.4k
Introduction to Works of ML Engineer in LY Corporation
lycorp_recruit_jp
0
140
Featured
See All Featured
5 minutes of I Can Smell Your CMS
philhawksworth
202
19k
Making the Leap to Tech Lead
cromwellryan
133
8.9k
A Tale of Four Properties
chriscoyier
156
23k
Become a Pro
speakerdeck
PRO
25
5k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
29
2.3k
Building Better People: How to give real-time feedback that sticks.
wjessup
364
19k
Embracing the Ebb and Flow
colly
84
4.5k
Designing the Hi-DPI Web
ddemaree
280
34k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
47
5k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
38
1.8k
Being A Developer After 40
akosma
87
590k
Building Applications with DynamoDB
mza
90
6.1k
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