Slide 1

Slide 1 text

宅配クリーニング「Lenet」 ドメイン駆動設計 7年の歩み 2024/03/24 仲見川勝人@NakMeKtt

Slide 2

Slide 2 text

- 仲見川 勝人(@NakMeKtt) - 職業 - Software Engineer - Mobile App, Front End, Server Side - 所属 - 株式会社ホワイトプラス - 宅配クリーニング「リネット」の開発 - Tech lead - アプリ開発G Engineering Manager 自己紹介 好きな技術領域 - Flutter, Android - サーバーサイド(PHP, Go) 好きなクラウドサービス - CloudRun、S3 好きなもの - ソーセージ、映画、アニメ、FF14、 新しい技術 2

Slide 3

Slide 3 text

リネットについて 3

Slide 4

Slide 4 text

株式会社ホワイトプラスは 宅配クリーニング 「Lenet(リネット)」 の運営を行っています スポンサーブースも出してますので ぜひお立ち寄りください 4

Slide 5

Slide 5 text

5

Slide 6

Slide 6 text

6

Slide 7

Slide 7 text

2009年にサービスを開始してから リプレースはせずに15年開発を続けており。 巨大なコードベースの保守をしつつ 開発を行っています。 7

Slide 8

Slide 8 text

先ほどお話したとおりリネットの開発には 深いドメイン知識と長期的な保守性が 欠かせないと考えており、 ホワイトプラスでは2016年から ドメイン駆動設計を導入しています。 8

Slide 9

Slide 9 text

しかし、 最初から今の状態ができていた訳では無く、 チームの体制やアーキテクチャ、 開発の流れなど徐々に進歩してきました。 9

Slide 10

Slide 10 text

時代に分けて導入状況や、組織体制について 紹介して行きたいと思います。 (私が参画した2016年以降の話となります) 10

Slide 11

Slide 11 text

個人の時代 (〜2019) 11

Slide 12

Slide 12 text

開発体制・開発フロー エンジニアもデザイナーもmasterマージして即リリースす るような牧歌的なところから始まり、 チームメンバーが増え(3名→5名)た頃から無秩序な状態 をやめていきたいとなり、GitHub Flowに則って PullRequestを使い始めました。 12

Slide 13

Slide 13 text

設計手法 Larvalを使用したActiveRecordパターンからもう一歩踏み 込んで行こうと思った際に、顧客側、工場側、CSと同じ情 報に対して異なるアクターが異なる用語で関わるなど。 複雑な事業ドメインを持つリネットにはドメイン駆動設計が 合うと考え導入しました。 13

Slide 14

Slide 14 text

ドメイン駆動設計へアプローチ 導入時にチームでワークショップを行いリネットの境界付け られたコンテキスト、サブドメインはどのようなものが有る のかをまとめました。 14

Slide 15

Slide 15 text

ドメイン駆動設計へアプローチ 四角がサブドメインで、くっついている固まりを境界付けら れたコンテキストとして扱っています。 15

Slide 16

Slide 16 text

ドメイン駆動設計へアプローチ 当時のドメイン駆動設計への解像度と事業ドメイン自体への 解像度から実際に開発をして行く中で徐々にやりづらさを感 じるようになりました。 16

Slide 17

Slide 17 text

ドメイン駆動設計の浸透度 ドメイン駆動設計でやるという大きな設計手法について方針 は共有できているが、開発自体が属人的な部分も多く、人に よってドメイン駆動設計への向き合い方には濃淡がありまし た。 ユビキタス言語の整備が不十分、ドメインエキスパートと共 にモデリングしない、など。 17

Slide 18

Slide 18 text

ドメイン駆動設計の浸透度 開発プロセスとして開発者と担当領域がある程度固定化され ていた結果。開発担当者に合わせて境界付けられたコンテキ ストが存在していました。(有り体に言えばサイロ化してい た) ドメイン駆動設計とそれに倣ったアーキテクチャになってい る所もあればなっていないところもあると言う状態。 18

Slide 19

Slide 19 text

チーム化の時代 (2020年〜2021年) 19

Slide 20

Slide 20 text

開発体制・開発フロー 人数も増えつつあり、ビジネス側のニーズに応えるスピード を上げるために、1つの開発チームから - クリーニングを利用するお客様向け(顧客領域) - クリーニングを行う工場向け(工場OPS領域) の2チーム体制へと変更を行いました。 ※モバイルアプリやインフラ領域もありますが、 Webの開発チームという意味 20

Slide 21

Slide 21 text

開発体制・開発フロー これ以降は、 全社的に行っている事もありますが 主に顧客領域のチームで施策や状況となります。 21

Slide 22

Slide 22 text

22

Slide 23

Slide 23 text

開発体制・開発フロー 合わせて、チームでの開発をより推し進めていくためにスク ラム開発を導入。 スプリントプランニングやデイリースクラムを経てチームと してナレッジやドメイン知識が蓄積され始めました。 さらに、設計プロセスをフローに組み込むようにしました。 23

Slide 24

Slide 24 text

ドメイン駆動設計へアプローチ ● ドメイン知識の共有会 ● ドメイン駆動設計についての読書会 ● ユビキタス言語表の管理と表に基づいた命名 一例ですが、これらの取り組みを行う事チームの認識を揃え 同じ目線で設計、開発を行う事が出来るようになりました。 24

Slide 25

Slide 25 text

ドメイン駆動設計へアプローチ ● スクラムでの認識合わせ ● ドメイン知識の共有会 ● ドメイン駆動設計についての読書会 ● ユビキタス言語表の管理と表に基づいた命名 一例ですが、これらの取り組みを行う事チームの認識を揃え 同じ目線で設計、開発を行う事が出来るようになりました。 25

Slide 26

Slide 26 text

ドメイン駆動設計の浸透度 個人の時代の開発担当者で境界付けられたコンテキストが分 割されているような属人性を減らす事ができ、チームで同じ イメージを共有して進めることが出来るようになった。 26

Slide 27

Slide 27 text

ドメイン駆動設計の浸透度 とはいえ、設計も実装もまだ手探りの段階でドキュメント化 されておらず、 設計についても口頭や定型化されていない図を用いる形で、 最初の設計時点でドメインモデリングが充分に出来ていない 事から、PullRequestでの設計についての議論になり大きな 手戻りも発生していました。(個人の時代よりは減った) 27

Slide 28

Slide 28 text

仕組み化の時代 (2022年〜現在) 28

Slide 29

Slide 29 text

開発体制・開発フロー チームとしての体制が整い、チームに新しいメンバーが参画 し始める。 テックリードの役割を置きチームの技術力向上にも意識的に 向き合える体制へ。 29

Slide 30

Slide 30 text

ドメイン駆動設計へアプローチ 既存のチームメンバーは知っているがドキュメント化されて いないといった暗黙知が目立ち始めたため以下の施策を強化 しました。 ● ドメイン駆動設計の定義を揃えるための勉強会 ● ドキュメンテーションの整備 ● ボトムアップの設計としてアーキテクチャ整備 30

Slide 31

Slide 31 text

ドメイン駆動設計へアプローチ 特に定義を揃えるの部分では、今回のパンフレット記事 「DDDで迷わないために、チームの正解を見つける」を 弊社メンバーが寄稿してくれていますのでそちらもぜひご一 読ください。 31

Slide 32

Slide 32 text

新規開発において設計を行う際にSUDOモデリングというフ レームワークを用いて、チームで行う事が出来るようになり ました。 ドメイン駆動設計の浸透度 32

Slide 33

Slide 33 text

ドメイン駆動設計の浸透度 SUDOモデリングとは の4つの図でモデリングを行う手法 簡単にできるDDDのモデリング - ドメイン駆動設計(松岡さんの記事) https://little-hands.hatenablog.com/entry/2022/06/01/ddd-modeling ● ドメインモデル図(D) ● オブジェクト図(O) ● システム関連図(S) ● ユースケース図(U) 33

Slide 34

Slide 34 text

ドメイン駆動設計の浸透度 SUDOモデリングを通じて作成した図はドメインオブジェク トを表すと共に、実装ではわかりにくい、業務としてどのよ うな事をしているのかを表す資料となっています。 34

Slide 35

Slide 35 text

35 ドメイン駆動設計の浸透度 これらの仕組み化を経て、チームでドメイン駆動設計をやっ ていると、やっと胸を張って言えるようになったかなと思い ます。

Slide 36

Slide 36 text

これから先の未来 (現在〜202X) 36

Slide 37

Slide 37 text

37 今後やりたいこと 巨大な泥団子を含め、最初に考えて異まではレガシーとなっ た境界付けられたコンテキストの整理整頓を進め、アプリ ケーションを適切に分割を行うことでチーム毎のコンテキス トに、より集中出来るようにして行きたいと考えています。

Slide 38

Slide 38 text

38 作成中のコンテキストマップ

Slide 39

Slide 39 text

道のりは遠いですが、 ホワイトプラスでは 一緒に歩む仲間を募集しています! 39

Slide 40

Slide 40 text

ご静聴ありがとうございました 40