Upgrade to Pro — share decks privately, control downloads, hide ads and more …

設計人材を育てるために DDD をどう使うべきか / How to use DDD to share design skills

設計人材を育てるために DDD をどう使うべきか / How to use DDD to share design skills

Toshishige Hagihara

May 11, 2019
Tweet

More Decks by Toshishige Hagihara

Other Decks in Technology

Transcript

  1. Copyright levii Inc. All rights reserved.
    設計人材を育てるために
    DDD をどう使うべきか?
    萩原利士成(@hagifoo)
    株式会社レヴィ CTO
    2019/05/11 レガシーをぶっつぶせ。現場でDDD! #genbadeDDD

    View Slide

  2. 本セッションのゴール

    View Slide

  3. Copyright levii Inc. All rights reserved.
    設計って大事ですよね?
    3

    View Slide

  4. Copyright levii Inc. All rights reserved.
    新規開発でも
    4

    View Slide

  5. Copyright levii Inc. All rights reserved.
    レガシーでも
    5

    View Slide

  6. Copyright levii Inc. All rights reserved.
    良い設計は人が作り、人が育てる
    6

    View Slide

  7. Copyright levii Inc. All rights reserved.
    設計できる人がたくさんいれば、
    大きな絵が描けるようになる
    7

    View Slide

  8. Copyright levii Inc. All rights reserved.
    しかし、、
    8

    View Slide

  9. Copyright levii Inc. All rights reserved.
    自分が設計できる
    !=
    メンバーが設計できるようになる
    9

    View Slide

  10. Copyright levii Inc. All rights reserved.
    良い設計は人が作り、人が育てる
    ではどうやって良い人=設計人材
    を育てればいいのか?
    10

    View Slide

  11. Copyright levii Inc. All rights reserved.
    「考えていること」
    「試してみたこと」を
    そのまんま話します
    11

    View Slide

  12. Copyright levii Inc. All rights reserved.
    みなさんの
    「こうやってるよ」
    「こうしたらいいのでは?」
    も教えてください!
    12

    View Slide

  13. 自己紹介

    View Slide

  14. Copyright levii Inc. All rights reserved.
    萩原 利士成 @hagifoo
    株式会社レヴィ 共同創業者兼CTO
    14

    View Slide

  15. Copyright levii Inc. All rights reserved.
    宇宙物理@大学院
    15

    View Slide

  16. Copyright levii Inc. All rights reserved.
    熱量が足りずドロップアウト
    16

    View Slide

  17. Copyright levii Inc. All rights reserved.
    cybozu.com のインフラ開発チーム
    17

    View Slide

  18. Copyright levii Inc. All rights reserved.
    契約社数 0 社から 1.5 万社
    複雑化する cybozu.com
    18

    View Slide

  19. Copyright levii Inc. All rights reserved.
    どうやったら複雑さに
    立ち向かえるのか?
    19

    View Slide

  20. Copyright levii Inc. All rights reserved.
    そうだ設計だ!
    20

    View Slide

  21. Copyright levii Inc. All rights reserved.
    システムモデリングツール
    「Balus」を開発
    株式会社レヴィを起業
    21

    View Slide

  22. Copyright levii Inc. All rights reserved.
    22

    View Slide

  23. Copyright levii Inc. All rights reserved.
    Balus Mega
    システム設計
    コンサル
    システム思考
    セミナー
    複雑さの中に
    価値がみつかる
    顧客の
    頭の中を
    変える
    顧客の
    業務を
    変える
    顧客の
    ツールを
    変える
    23

    View Slide

  24. Copyright levii Inc. All rights reserved.
    4 社で技術顧問
    (設計や組織・人など色々と)
    24

    View Slide

  25. 課題意識

    View Slide

  26. Copyright levii Inc. All rights reserved.
    案の定 Balus 自体も複雑化
    26

    View Slide

  27. Copyright levii Inc. All rights reserved.
    終わらないリファクタ
    27

    View Slide

  28. Copyright levii Inc. All rights reserved.
    敵は強い。強すぎる。
    一人で倒すことはできない。。
    28

    View Slide

  29. Copyright levii Inc. All rights reserved.
    さぁどうする?
    29

    View Slide

  30. Copyright levii Inc. All rights reserved.
    自分はなんとなくできるようになった
    (気がする)

    メンバーに設計を振ってみる
    30

    View Slide

  31. Copyright levii Inc. All rights reserved.
    全然できない

    苛立つ自分

    メンバーも萎縮
    31

    View Slide

  32. Copyright levii Inc. All rights reserved.
    負のスパイラル
    32

    View Slide

  33. Copyright levii Inc. All rights reserved.
    設計と実装て似てるようで違う
    33

    View Slide

  34. Copyright levii Inc. All rights reserved.
    どうしたらいいのか。。
    34

    View Slide

  35. Copyright levii Inc. All rights reserved.
    35

    View Slide

  36. Copyright levii Inc. All rights reserved.
    これは良さそう!
    36

    View Slide

  37. Copyright levii Inc. All rights reserved.
    DDD を使って
    もっと「設計」力を
    ダイレクトに育てられないか?
    37

    View Slide

  38. そもそも設計って?

    View Slide

  39. Copyright levii Inc. All rights reserved.
    ここまで「設計」という言葉を
    割と雑に使って来ました
    39

    View Slide

  40. Copyright levii Inc. All rights reserved.
    改めて設計とは?
    40

    View Slide

  41. 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

    View Slide

  42. Copyright levii Inc. All rights reserved.
    システムの外 システムの中
    (ユーザー)インターフェース
    抽象度: 高
    抽象度: 低
    ソースコード
    42

    View Slide

  43. Copyright levii Inc. All rights reserved.
    システムの外 システムの中
    (ユーザー)インターフェース
    抽象度: 高
    抽象度: 低
    ソースコード
    利用者の
    関心ごとを
    43

    View Slide

  44. Copyright levii Inc. All rights reserved.
    システムの外 システムの中
    (ユーザー)インターフェース
    抽象度: 高
    抽象度: 低
    ソースコード
    利用者の
    関心ごとを
    システムに
    落としこむ
    ための
    44

    View Slide

  45. Copyright levii Inc. All rights reserved.
    システムの外 システムの中
    (ユーザー)インターフェース
    抽象度: 高
    抽象度: 低
    ソースコード
    利用者の
    関心ごとを
    システムに
    落としこむ
    ための
    Art or
    Action
    45

    View Slide

  46. Copyright levii Inc. All rights reserved.
    システムが単純なら(さほど)
    難しさはない
    46

    View Slide

  47. Copyright levii Inc. All rights reserved.
    システムの外 システムの中
    (ユーザー)インターフェース
    抽象度: 高
    抽象度: 低
    ソースコード
    FizzBuzz
    表示させて
    47

    View Slide

  48. 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

    View Slide

  49. Copyright levii Inc. All rights reserved.
    システムが複雑だと
    49

    View Slide

  50. Copyright levii Inc. All rights reserved.
    システムの外 システムの中
    (ユーザー)インターフェース
    抽象度: 高
    抽象度: 低
    ソースコード
    AI x 人材で
    何かやろう
    50

    View Slide

  51. Copyright levii Inc. All rights reserved.
    システムの外 システムの中
    (ユーザー)インターフェース
    抽象度: 高
    抽象度: 低
    ソースコード
    コンセプト
    カスタマー
    ジャーニー
    サービス
    AI x 人材で
    何かやろう
    51

    View Slide

  52. Copyright levii Inc. All rights reserved.
    システムの外 システムの中
    (ユーザー)インターフェース
    抽象度: 高
    抽象度: 低
    ソースコード
    コンセプト
    カスタマー
    ジャーニー
    操作
    シナリオ
    ペーパー
    プロト
    パッケージ
    サービス
    AI x 人材で
    何かやろう
    52

    View Slide

  53. Copyright levii Inc. All rights reserved.
    システムの外 システムの中
    (ユーザー)インターフェース
    抽象度: 高
    抽象度: 低
    ソースコード
    コンセプト
    カスタマー
    ジャーニー
    操作
    シナリオ 画面
    デザイン
    ペーパー
    プロト
    パッケージ
    サービス
    クラス
    AI x 人材で
    何かやろう
    ドメインモデル
    53

    View Slide

  54. Copyright levii Inc. All rights reserved.
    システムの外 システムの中
    (ユーザー)インターフェース
    抽象度: 高
    抽象度: 低
    ソースコード
    コンセプト
    カスタマー
    ジャーニー
    操作
    シナリオ 画面
    デザイン
    ペーパー
    プロト
    パッケージ
    サービス
    クラス
    AI x 人材で
    何かやろう
    ドメインモデル
    様々な抽象度で
    モデルが必要になる
    54

    View Slide

  55. Copyright levii Inc. All rights reserved.
    システムの外 システムの中
    (ユーザー)インターフェース
    抽象度: 高
    抽象度: 低
    ソースコード
    コンセプト
    カスタマー
    ジャーニー
    操作
    シナリオ 画面
    デザイン
    ペーパー
    プロト
    パッケージ
    サービス
    クラス
    AI x 人材で
    何かやろう
    ドメインモデル
    実装上の制約がコン
    セプトレベルで影響
    を与えたりすること
    もある
    =
    下から上もある
    55

    View Slide

  56. Copyright levii Inc. All rights reserved.
    改めてやりたいこと
    =
    この Art を
    師匠から弟子へと伝える
    56

    View Slide

  57. Copyright levii Inc. All rights reserved.
    なぜ DDD か?
    57

    View Slide

  58. Copyright levii Inc. All rights reserved.
    システムの外 システムの中
    (ユーザー)インターフェース
    抽象度: 高
    抽象度: 低
    ソースコード
    クラス
    ドメインモデル
    58

    View Slide

  59. Copyright levii Inc. All rights reserved.
    システムの外 システムの中
    (ユーザー)インターフェース
    抽象度: 高
    抽象度: 低
    ソースコード
    クラス
    ドメインモデル
    ドメインモデルが
    システムの外
    (ユーザーの関心)

    システムの中
    (クラス設計)
    を繋ぐ
    59

    View Slide

  60. Copyright levii Inc. All rights reserved.
    システムの外 システムの中
    (ユーザー)インターフェース
    抽象度: 高
    抽象度: 低
    ソースコード
    クラス
    ドメインモデル
    実装とも無理なく
    繋がる
    &
    ドメイン層を
    隔離できる
    60

    View Slide

  61. Copyright levii Inc. All rights reserved.
    設計の Art を体験しやすい
    61

    View Slide

  62. Copyright levii Inc. All rights reserved.
    とはいえ、
    「DDD でやって」
    だけだとやっぱり難しい
    62

    View Slide

  63. 試してみて分かってきたポイント

    View Slide

  64. ポイント1
    ドメインモデルで議論する
    64

    View Slide

  65. Copyright levii Inc. All rights reserved.
    当たり前やん
    65

    View Slide

  66. Copyright levii Inc. All rights reserved.
    が、意外とできない
    66

    View Slide

  67. Copyright levii Inc. All rights reserved.
    システムの外 システムの中
    (ユーザー)インターフェース
    抽象度: 高
    抽象度: 低
    ソースコード
    クラス
    ドメインモデル
    67

    View Slide

  68. Copyright levii Inc. All rights reserved.
    実装圧力に負けずに
    責務をちゃんと考える
    68

    View Slide

  69. Copyright levii Inc. All rights reserved.
    責務の分割と組み合わせ
    =
    設計の基礎となる力
    69

    View Slide

  70. Copyright levii Inc. All rights reserved.
    プロパティだけでなく
    メソッドについて議論を振ると
    責務が見えてくる(ことが多い)
    70

    View Slide

  71. ポイント2
    別の視点で見てみる
    71

    View Slide

  72. Copyright levii Inc. All rights reserved.
    とはいえドメインモデルだけでも
    見えてこないものも多い
    72

    View Slide

  73. Copyright levii Inc. All rights reserved.
    そんな時は、
    73

    View Slide

  74. Copyright levii Inc. All rights reserved.
    視点を変えてみる!
    74

    View Slide

  75. Copyright levii Inc. All rights reserved.
    システムの外 システムの中
    (ユーザー)インターフェース
    抽象度: 高
    抽象度: 低
    ソースコード
    操作
    シナリオ
    画面
    デザイン
    クラス
    ドメインモデル
    価値
    75

    View Slide

  76. Copyright levii Inc. All rights reserved.
    クラスに落としてみたらどう?
    画面はどうなるかな?
    それをユーザーはどう操作する?
    価値はあるかい?
    76

    View Slide

  77. Copyright levii Inc. All rights reserved.
    ドメインモデルの中だけで議論しても
    見えてこないこともある

    蒸留する感覚を身につける
    77

    View Slide

  78. ポイント3
    全体が連動する感覚を体験する
    78

    View Slide

  79. Copyright levii Inc. All rights reserved.
    設計は一方通行ではない
    79

    View Slide

  80. Copyright levii Inc. All rights reserved.
    ドメインモデルを作って

    実装してみたら

    新しいユースケースを見つけて

    ドメインモデルを直して
    80

    View Slide

  81. Copyright levii Inc. All rights reserved.
    ぐるぐるぐるぐる
    81

    View Slide

  82. Copyright levii Inc. All rights reserved.
    システムの外 システムの中
    (ユーザー)インターフェース
    抽象度: 高
    抽象度: 低
    ソースコード
    コンセプト
    カスタマー
    ジャーニー
    操作
    シナリオ 画面
    デザイン
    ペーパー
    プロト
    パッケージ
    サービス
    クラス
    ドメインモデル
    82

    View Slide

  83. ポイント4
    コミュニケーション
    83

    View Slide

  84. Copyright levii Inc. All rights reserved.
    当たり前を、当たり前にする
    師匠と弟子のコミュニケーション
    84

    View Slide

  85. Copyright levii Inc. All rights reserved.
    師匠の問いかけ力
    85

    View Slide

  86. 実際にやってみた(現在進行形)

    View Slide

  87. Copyright levii Inc. All rights reserved.
    要望箱改善 PJT
    87

    View Slide

  88. Copyright levii Inc. All rights reserved.
    要望箱=顧客接点
    超超超重要!
    88

    View Slide

  89. Copyright levii Inc. All rights reserved.
    しかし、、
    ✖ 自分の要望しか見れない
    ✖ 対応がリリースされても分からない
    89

    View Slide

  90. Copyright levii Inc. All rights reserved.
    変化!
    90

    View Slide

  91. Copyright levii Inc. All rights reserved.
    これはなんとかせねば!
    91

    View Slide

  92. Copyright levii Inc. All rights reserved.
    全体を見渡せるサイズ感
    ユーザーや管理者の行動もある
    そこまで緊急ではない

    ちょうどいい題材!
    92

    View Slide

  93. Copyright levii Inc. All rights reserved.
    五十嵐
    (弟子)
    弓山
    (師匠)
    やってみよう!
    93

    View Slide

  94. 意識したこと
    94

    View Slide

  95. Copyright levii Inc. All rights reserved.
    ちゃんと時間を確保する
    視点を変えられるようにする
    ユーザー価値と結びつける
    95

    View Slide

  96. やったこと、やってること
    96

    View Slide

  97. Copyright levii Inc. All rights reserved.
    システムの外 システムの中
    (ユーザー)インターフェース
    抽象度: 高
    抽象度: 低
    ソースコード
    操作
    シナリオ
    画面
    デザイン クラス
    ドメインモデル
    97

    View Slide

  98. Copyright levii Inc. All rights reserved.
    すでにある実装を元に
    ToBe のドメインモデルを作る
    98

    View Slide

  99. Copyright levii Inc. All rights reserved.
    責務について質問して
    自分の言葉で語ってもらう
    師匠) アナウンスってど
    ういう責務持ってるんで
    すか?
    師匠) アナウンスとリ
    リースノートってどうい
    う違いがあるの?
    弟子) 自分の言葉で話す
    と徐々に理解が深まって
    いく感覚
    99

    View Slide

  100. Copyright levii Inc. All rights reserved.
    振る舞いやユースケースを
    洗い出してみる
    100

    View Slide

  101. Copyright levii Inc. All rights reserved.
    ドメインモデルをもう少し
    詳細化
    101

    View Slide

  102. Copyright levii Inc. All rights reserved.
    実装との対応関係や
    実装ロードマップを議論
    師匠) 最小限のコアな価
    値はなに?
    それにはどこが必要?
    師匠) 既存のクラスとど
    う乖離してるの?
    どう近づけていこうか?
    弟子) 実際のコードとの
    対応や、どう変えていく
    かを意識できた
    102

    View Slide

  103. Copyright levii Inc. All rights reserved.
    コードに落としてみる
    弟子) モデルから実装に
    落とすと少し詰まる
    師匠) モデルと実装が乖
    離している箇所で指摘し
    損ねた。。
    103

    View Slide

  104. Copyright levii Inc. All rights reserved.
    画面を作って改めて確認
    弟子) 具体的な画面で認
    識が揃うので安心できる
    104

    View Slide

  105. Copyright levii Inc. All rights reserved.
    実装は続く...
    105

    View Slide

  106. 良かった点
    106

    View Slide

  107. Copyright levii Inc. All rights reserved.
    ● ドメインモデルの上で議論
    ● 別の視点との行き来
    ● 継続的なコミュニケーション
    107

    View Slide

  108. Copyright levii Inc. All rights reserved.
    ● ドメインモデルの上で議論
    ● 別の視点との行き来
    ● 継続的なコミュニケーション
    当たり前だけど大事
    空中戦にならない!
    108

    View Slide

  109. Copyright levii Inc. All rights reserved.
    ● ドメインモデルの上で議論
    ● 別の視点との行き来
    ● 継続的なコミュニケーション
    それ管理者?ユーザー?
    具体的な気づきが生まれる
    109

    View Slide

  110. Copyright levii Inc. All rights reserved.
    ● ドメインモデルの上で議論
    ● 別の視点との行き来
    ● 継続的なコミュニケーション
    問いかけ大事
    結果だけでなくプロセスを共有
    110

    View Slide

  111. 改善点
    111

    View Slide

  112. Copyright levii Inc. All rights reserved.
    ● 実装とドメインモデルの距離が遠い
    ● 時間変化についての議論が漏れがち
    ● ValueObject がうまく作れない。。
    112

    View Slide

  113. Copyright levii Inc. All rights reserved.
    ● 実装とドメインモデルの距離が遠い
    ● 時間変化についての議論が漏れがち
    ● ValueObject がうまく作れない。。
    作り方や実装での使い方に
    まだ工夫の余地がありそう
    113

    View Slide

  114. Copyright levii Inc. All rights reserved.
    ● 実装とドメインモデルの距離が遠い
    ● 時間変化についての議論が漏れがち
    ● ValueObject がうまく作れない。。
    どこから作っていくか?
    どう変えていくのか?
    114

    View Slide

  115. Copyright levii Inc. All rights reserved.
    ● 実装とドメインモデルの距離が遠い
    ● 時間変化についての議論が漏れがち
    ● ValueObject がうまく作れない。。
    主に Python2 が原因?
    Python3 を使おうw
    115

    View Slide

  116. Copyright levii Inc. All rights reserved.
    色々と反省点はあったが
    設計の Art を伝えるという意味で
    一定の成果はありそう
    116

    View Slide

  117. Copyright levii Inc. All rights reserved.
    設計力をどう測るか?
    という別の課題
    117

    View Slide

  118. まとめ

    View Slide

  119. Copyright levii Inc. All rights reserved.
    ● 設計人材を育てるのに DDD よい
    ● 当たり前を促すための問いかけ大事
    ● まだまだ工夫の余地はありそう
    119

    View Slide

  120. Copyright levii Inc. All rights reserved.
    ご静聴ありがとうございました
    120

    View Slide