Slide 1

Slide 1 text

チームでモデリングを育てるうえで 考えたこと・気づいたこと 2024-03-24 Object-Oriented Conference 2024 BABY JOB 株式会社 浅野 正貴(@mackey0225)

Slide 2

Slide 2 text

いきなりですが、

Slide 3

Slide 3 text

みなさんのモデリングは 育っていますか?

Slide 4

Slide 4 text

A. ぜんぜん、鳥取砂丘 B. ぼちぼち、ナギ平原 C. めっちゃ、屋久島 D. もの凄く、富士樹海

Slide 5

Slide 5 text

A. ぜんぜん、鳥取砂丘 B. ぼちぼち、ナギ平原 C. めっちゃ、屋久島 D. もの凄く、富士樹海 FF Ⅹ 混じっているよ!!

Slide 6

Slide 6 text

で、今日の話は、

Slide 7

Slide 7 text

砂漠 → 草原・森になるために 考えたこと・気づいたこと

Slide 8

Slide 8 text

ちなみに、我々は 「やっと草原」な感じです。

Slide 9

Slide 9 text

チームでモデリングを育てるうえで考えたこと・気づいたこと 自己紹介 名前:浅野 正貴 所属:BABY JOB 株式会社(2022-06 入社) 最近は Java 書いたり、AWS 触ったり X: @mackey0225 GitHub: @mackey0225 初めての OOC 全力で楽しんでいます!!! 9

Slide 10

Slide 10 text

チームでモデリングを育てるうえで考えたこと・気づいたこと アジェンダ ● 状況ときっかけ ● 育てるとは ● 育てるために考えたこと ● やってみて気づいたこと ● 課題

Slide 11

Slide 11 text

状況ときっかけ

Slide 12

Slide 12 text

チームでモデリングを育てるうえで考えたこと・気づいたこと 状況・前提 ● プロダクトはオニオンアーキテクチャをベース ● ユースケース図、ドメインモデル図はある ● しかし、更新できていない ■ 初期実装時に作ったもの ■ 規模の大きい追加改修時に作ったもの

Slide 13

Slide 13 text

チームでモデリングを育てるうえで考えたこと・気づいたこと 状況・前提 ● プロダクトはオニオンアーキテクチャをベース ● ユースケース図、ドメインモデル図はある ● しかし、更新できていない ■ 初期実装時に作ったもの ■ 規模の大きい追加改修時に作ったもの そこの貴方! 軽量 DDD とか言わない!

Slide 14

Slide 14 text

チームでモデリングを育てるうえで考えたこと・気づいたこと きっかけ ● 輪読会で以下の書籍を取り上げた ■ ドメイン駆動設計 モデリング/実装ガイド ■ ドメイン駆動設計 サンプルコード&FAQ ● 輪読会後にサービスへどう活かすか議論

Slide 15

Slide 15 text

チームでモデリングを育てるうえで考えたこと・気づいたこと きっかけ ● 輪読会で以下の書籍を取り上げた ■ ドメイン駆動設計 モデリング/実装ガイド ■ ドメイン駆動設計 サンプルコード&FAQ ● 輪読会後にサービスへどう活かすか議論

Slide 16

Slide 16 text

チームでモデリングを育てるうえで考えたこと・気づいたこと きっかけ ● 輪読会で以下の書籍を取り上げた ■ ドメイン駆動設計 モデリング/実装ガイド ■ ドメイン駆動設計 サンプルコード&FAQ ● 輪読会後にサービスへどう活かすか議論

Slide 17

Slide 17 text

チームでモデリングを育てるうえで考えたこと・気づいたこと きっかけ ● 輪読会で以下の書籍を取り上げた ■ ドメイン駆動設計 モデリング/実装ガイド ■ ドメイン駆動設計 サンプルコード&FAQ ● 輪読会後にサービスへどう活かすか議論 詳細は OOC ガイドブックの 第19章を見てみて!!

Slide 18

Slide 18 text

育てるとは

Slide 19

Slide 19 text

チームでモデリングを育てるうえで考えたこと・気づいたこと 辞書上での「育てる」(デジタル大辞泉より) 1 手間をかけて養い成長させる。養育する。 2 能力などが伸びるように教え導く。手を掛けてやったり、 教え鍛えたりして、一人前として通用するまでにする。 3㋐小さな規模で出発した組織・団体などを発展させる。 ㋑ある考え方・気持ちなどが伸びていくように力を尽くす。 4 手なずける。おだてる。そそのかす。

Slide 20

Slide 20 text

チームでモデリングを育てるうえで考えたこと・気づいたこと 辞書上での「育てる」(デジタル大辞泉より) 1 手間をかけて養い成長させる。養育する。 2 能力などが伸びるように教え導く。手を掛けてやったり、 教え鍛えたりして、一人前として通用するまでにする。 3㋐小さな規模で出発した組織・団体などを発展させる。 ㋑ある考え方・気持ちなどが伸びていくように力を尽くす。 4 手なずける。おだてる。そそのかす。

Slide 21

Slide 21 text

チームでモデリングを育てるうえで考えたこと・気づいたこと 辞書上での「育てる」(デジタル大辞泉より) 1 手間をかけて養い成長させる。養育する。 2 能力などが伸びるように教え導く。手を掛けてやったり、 教え鍛えたりして、一人前として通用するまでにする。 3㋐小さな規模で出発した組織・団体などを発展させる。 ㋑ある考え方・気持ちなどが伸びていくように力を尽くす。 4 手なずける。おだてる。そそのかす。 「育てる」とは 手をかけて、成長をサポートすること

Slide 22

Slide 22 text

チームでモデリングを育てるうえで考えたこと・気づいたこと 植物でたとえると・・・

Slide 23

Slide 23 text

チームでモデリングを育てるうえで考えたこと・気づいたこと 植物でたとえると・・・

Slide 24

Slide 24 text

チームでモデリングを育てるうえで考えたこと・気づいたこと 植物でたとえると・・・

Slide 25

Slide 25 text

チームでモデリングを育てるうえで考えたこと・気づいたこと 植物でたとえると・・・ 害虫対策 水やり・肥料 剪定 植え替え プランター 植木鉢 花・果実

Slide 26

Slide 26 text

チームでモデリングを育てるうえで考えたこと・気づいたこと 植物でたとえると・・・ 害虫対策 水やり・肥料 剪定 植え替え プランター 植木鉢 花・果実 チームで育てることは、 全員で「生き物係」になること

Slide 27

Slide 27 text

チームでモデリングを育てるうえで考えたこと・気づいたこと 文脈を戻すと・・・ 害虫対策 水やり・肥料 剪定 植え替え プランター 植木鉢 花・果実

Slide 28

Slide 28 text

チームでモデリングを育てるうえで考えたこと・気づいたこと 文脈を戻すと・・・ 文言・タイポ 修正 メンテナンス 腐敗防止 方向性の修正 定期的な 見直し 保管場所 管理対象

Slide 29

Slide 29 text

チームでモデリングを育てるうえで考えたこと・気づいたこと 文脈を戻すと・・・ 文言・タイポ 修正 メンテナンス 腐敗防止 方向性の修正 定期的な 見直し 保管場所 管理対象 考えておくべきことが結構ある

Slide 30

Slide 30 text

チームでモデリングを育てるうえで考えたこと・気づいたこと 文脈を戻すと・・・ 文言・タイポ 修正 メンテナンス 腐敗防止 方向性の修正 定期的な 見直し 保管場所 管理対象 なので、

Slide 31

Slide 31 text

チームでモデリングを育てるうえで考えたこと・気づいたこと 文脈を戻すと・・・ 文言・タイポ 修正 メンテナンス 腐敗防止 方向性の修正 定期的な 見直し 保管場所 管理対象 馴染みのあるフレームワーク 「5W1H」に沿って 育て方を考えていきました

Slide 32

Slide 32 text

育てるために考えたこと

Slide 33

Slide 33 text

チームでモデリングを育てるうえで考えたこと・気づいたこと 育てるために考えたこと 5W1H に沿って考えた When Where Who What Why How 対象を「どの形式で」管理するか 「どこで保管・管理」するか 「どのタイミング」で作成・更新するか 「誰が」作成・更新するか 「なぜ」行うのか 「どのような運用・手順で」行うのか

Slide 34

Slide 34 text

チームでモデリングを育てるうえで考えたこと・気づいたこと 育てるために考えたこと 考える順番は以下の流れ When Where Who What Why How 目的 管理する主体 運用方法 管理する対象

Slide 35

Slide 35 text

チームでモデリングを育てるうえで考えたこと・気づいたこと Why - なぜ行うのか 前提に立ち返って、何のために育てるのかは明文化する ● 複数人で意思を統一させる ● 手段と目的の逆転に気づく ● 定期的に活動を振り返り、「向き直り」を図る

Slide 36

Slide 36 text

チームでモデリングを育てるうえで考えたこと・気づいたこと Why - なぜ行うのか 前提に立ち返って、何のために育てるのかは明文化する ● 複数人で意思を統一させる ● 手段と目的の逆転に気づく ● 定期的に活動を振り返り、「向き直り」を図る 自分・あなたがいなくなっても、モデル図は生き続ける 目的を見失うと、すぐに破綻する

Slide 37

Slide 37 text

チームでモデリングを育てるうえで考えたこと・気づいたこと Who - 誰が更新するか まず決めること:「どんなチーム」の持ち物か ● 開発組織だけ?ドメインエキスパートも?  など

Slide 38

Slide 38 text

チームでモデリングを育てるうえで考えたこと・気づいたこと Who - 誰が更新するか まず決めること:「どんなチーム」の持ち物か ● 開発組織だけ?ドメインエキスパートも?  など 次にやること:チームの定量・定性の状態の把握 ● メンバーの習熟度や経験は? ● 権限(参照/編集)は?  など

Slide 39

Slide 39 text

チームでモデリングを育てるうえで考えたこと・気づいたこと Who - 誰が更新するか まず決めること:「どんなチーム」の持ち物か ● 開発組織だけ?ドメインエキスパートも?  など 次にやること:チームの定量・定性の状態の把握 ● メンバーの習熟度や経験は? ● 権限(参照/編集)は?  など チームで継続的に進めるための能力と責任が必要 地に足ついた状態で進めないといけない

Slide 40

Slide 40 text

チームでモデリングを育てるうえで考えたこと・気づいたこと When/How - どのタイミングでどう更新するか ● 定期:一定期間ごとに見直す ■ 個人ワーク / モブワーク / スプリントレビュー ● 不定期:日々の開発スプリント内で見直す ■ 改修時のプルリクエスト ■ ソースコードから生成(cf. JIG)

Slide 41

Slide 41 text

チームでモデリングを育てるうえで考えたこと・気づいたこと When/How - どのタイミングでどう更新するか ● 定期:一定期間ごとに見直す ■ 個人ワーク / モブワーク / スプリントレビュー ● 不定期:日々の開発スプリント内で見直す ■ 改修時のプルリクエスト ■ ソースコードから生成(cf. JIG) メンテナンスにかかるコストと負荷が 目的(Why)に見合っているかを考慮する

Slide 42

Slide 42 text

チームでモデリングを育てるうえで考えたこと・気づいたこと Where/What - どこにどの形式で管理するか(1) ● フォーマットと管理場所は強い結びつきがある ■ draw.io ↔ Google Drive / Notion ↔ Mermaid ● 学習コストや保守性も考慮 ■ PlantUML や Mermaid は開発組織外だとつらい ■ GUI か、テキストベースか ■ 版管理ができるか(Git管理、ツールの機能)

Slide 43

Slide 43 text

チームでモデリングを育てるうえで考えたこと・気づいたこと Where/What - どこにどの形式で管理するか(2) ● 将来的な人数も考慮 ■ 同期方法の有無 ■ 同時接続の可否 ■ 費用面、ライセンス管理の負荷

Slide 44

Slide 44 text

チームでモデリングを育てるうえで考えたこと・気づいたこと Where/What - どこにどの形式で管理するか(2) ● 将来的な人数も考慮 ■ 同期方法の有無 ■ 同時接続の可否 ■ 費用面、ライセンス管理の負荷 メンバーと運用タイミングに応じて選択する 学習コストや将来的な負荷も加味しておく

Slide 45

Slide 45 text

私たちはどうしたか

Slide 46

Slide 46 text

チームでモデリングを育てるうえで考えたこと・気づいたこと 結論 私たちは以下で進めることにした Why:実装における迷いが少なくするため Who:開発メンバが中心 When/How:定期的な組織内でモブワークでメンテナンス Where/What:Google Drive / draw.io

Slide 47

Slide 47 text

チームでモデリングを育てるうえで考えたこと・気づいたこと 結論 私たちは以下で進めることにした Why:実装における迷いが少なくするため Who:開発メンバが中心 When/How:定期的な組織内でモブワークでメンテナンス Where/What:Google Drive / draw.io あれ、開発プロセスに盛り込まないの? って思いませんでした?

Slide 48

Slide 48 text

チームでモデリングを育てるうえで考えたこと・気づいたこと 結論 私たちは以下で進めることにした Why:実装における迷いが少なくするため Who:開発メンバが中心 When/How:定期的な組織内でモブワークでメンテナンス Where/What:Google Drive / draw.io もしくは

Slide 49

Slide 49 text

チームでモデリングを育てるうえで考えたこと・気づいたこと 結論 私たちは以下で進めることにした Why:実装における迷いが少なくするため Who:開発メンバが中心 When/How:定期的な組織内でモブワークでメンテナンス Where/What:Google Drive / draw.io ドメインエキスパートは参加しないの? って思いませんでした?

Slide 50

Slide 50 text

チームでモデリングを育てるうえで考えたこと・気づいたこと 結論 私たちは以下で進めることにした Why:実装における迷いが少なくするため Who:開発メンバが中心 When/How:定期的な組織内でモブワークでメンテナンス Where/What:Google Drive / draw.io 私たちは 「スモールスタート & 向き直り」 で進めることにしました

Slide 51

Slide 51 text

チームでモデリングを育てるうえで考えたこと・気づいたこと スモールスタート & 向き直り 現状 あるべき姿

Slide 52

Slide 52 text

チームでモデリングを育てるうえで考えたこと・気づいたこと 現状 あるべき姿 現時点での理想 スモールスタート & 向き直り

Slide 53

Slide 53 text

チームでモデリングを育てるうえで考えたこと・気づいたこと 現状 あるべき姿 いきなり、あるべき姿に挑戦したいが、 モデル図の意味・価値が見出だせていない 現時点での理想 スモールスタート & 向き直り

Slide 54

Slide 54 text

チームでモデリングを育てるうえで考えたこと・気づいたこと 現状 あるべき姿 進めていく中で別の考えや方法が出るかも知れない 現状 現時点での理想 スモールスタート & 向き直り

Slide 55

Slide 55 text

チームでモデリングを育てるうえで考えたこと・気づいたこと 現状 あるべき姿 進めていく中で別の考えや方法が出るかも知れない →あるべき姿が変わる→向き直り 現状 進んでいくと 気づいた理想 あるべき姿 スモールスタート & 向き直り

Slide 56

Slide 56 text

チームでモデリングを育てるうえで考えたこと・気づいたこと 現状 あるべき姿 あるべき姿が変わるかも知れないということを前提に スモールスタートで始めることにした(≒ MVP ) 1st STEP スモールスタート & 向き直り

Slide 57

Slide 57 text

チームでモデリングを育てるうえで考えたこと・気づいたこと 現状 あるべき姿 あるべき姿が変わるかも知れないということを前提に スモールスタートで始めることにした(≒ MVP ) 2nd STEP 2nd STEP 2nd STEP 1st STEP あるべき姿 あるべき姿 スモールスタート & 向き直り

Slide 58

Slide 58 text

チームでモデリングを育てるうえで考えたこと・気づいたこと 結論 私たちは以下で進めることにした Why:実装における迷いが少なくするため Who:開発メンバが中心 When/How:定期的な組織内でモブワークでメンテナンス Where/What:Google Drive / draw.io 再掲

Slide 59

Slide 59 text

チームでモデリングを育てるうえで考えたこと・気づいたこと 結論 私たちは以下で進めることにした Why:実装における迷いが少なくするため Who:開発メンバが中心 When/How:定期的な組織内でモブワークでメンテナンス Where/What:Google Drive / draw.io まずは、自分たちの中で意味と価値のあるものにする

Slide 60

Slide 60 text

チームでモデリングを育てるうえで考えたこと・気づいたこと 結論 私たちは以下で進めることにした Why:実装における迷いが少なくするため Who:開発メンバが中心 When/How:定期的な組織内でモブワークでメンテナンス Where/What:Google Drive / draw.io まずは、自分たちの中で意味と価値のあるものにする 決め方は OOC ガイドブックの 第19章の ADR を見てみて!!

Slide 61

Slide 61 text

気づいたこと

Slide 62

Slide 62 text

チームでモデリングを育てるうえで考えたこと・気づいたこと 気づいたこと ● 仕様・コードの再理解・再検討につながる ■ モデル図を作るために現状のコードの読み直し ■ 引っかかるポイントはリファクタリングかも ● 運用は根性や精神論ではなく、仕組み化する ■ 記憶や判断に委ねると脳は都合よくごまかす ■ ルール・縛りを設けることで怠惰を回避 ● モデル図を含むドキュメントも負債 ■ あればあるほど、いいというわけではない

Slide 63

Slide 63 text

今後の課題

Slide 64

Slide 64 text

チームでモデリングを育てるうえで考えたこと・気づいたこと 課題 ● リソースの確保 ■ モブワークで定期的に工数が必要 ■ 開発の優先度と調整になる ● コストメリットがまだ出ない ■ モデル図だけではサービスへの還元にはならない ■ 顧客課題がすこしでも早く解決するにはまだ先 ● あるべき姿の見直し ■ まだそこまでたどり着けていない

Slide 65

Slide 65 text

さいごに

Slide 66

Slide 66 text

チームでモデリングを育てるうえで考えたこと・気づいたこと まとめ ● Why(目的)から始める ● Who が決まれば、方法や手段が決まる ● 運用設計でも MVP の考えは有用 ● リファクタリングに近い副次効果がある ● 運用する際は努力ではなく仕組み化を考える ● ドキュメントも負債、バランスが重要

Slide 67

Slide 67 text

ご清聴いただきありがとうございました

Slide 68

Slide 68 text

ご清聴いただきありがとうございました それでは、OOC を全力で楽しみましょー!!!