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
宅配クリーニングサービス「Lenet」開発におけるDDD7年の歩み
Search
Nakamigawa
March 24, 2024
0
2.5k
宅配クリーニングサービス「Lenet」開発におけるDDD7年の歩み
OOC 2024
Nakamigawa
March 24, 2024
Tweet
Share
More Decks by Nakamigawa
See All by Nakamigawa
PHPカンファレンス関西202402 nullsafe演算子を使おう〜if文地獄からの開放〜
nakamigawa
0
280
null判定をis_nullでしてたけど止めた話
nakamigawa
0
310
クレジットマスターとの戦い
nakamigawa
0
1.2k
Featured
See All Featured
How to Ace a Technical Interview
jacobian
276
23k
Building Adaptive Systems
keathley
38
2.3k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
95
17k
Building an army of robots
kneath
302
44k
Principles of Awesome APIs and How to Build Them.
keavy
126
17k
The MySQL Ecosystem @ GitHub 2015
samlambert
250
12k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
26
1.9k
Rebuilding a faster, lazier Slack
samanthasiow
79
8.7k
Music & Morning Musume
bryan
46
6.2k
No one is an island. Learnings from fostering a developers community.
thoeni
19
3k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
45
2.2k
What's in a price? How to price your products and services
michaelherold
243
12k
Transcript
宅配クリーニング「Lenet」 ドメイン駆動設計 7年の歩み 2024/03/24 仲見川勝人@NakMeKtt
- 仲見川 勝人(@NakMeKtt) - 職業 - Software Engineer - Mobile
App, Front End, Server Side - 所属 - 株式会社ホワイトプラス - 宅配クリーニング「リネット」の開発 - Tech lead - アプリ開発G Engineering Manager 自己紹介 好きな技術領域 - Flutter, Android - サーバーサイド(PHP, Go) 好きなクラウドサービス - CloudRun、S3 好きなもの - ソーセージ、映画、アニメ、FF14、 新しい技術 2
リネットについて 3
株式会社ホワイトプラスは 宅配クリーニング 「Lenet(リネット)」 の運営を行っています スポンサーブースも出してますので ぜひお立ち寄りください 4
5
6
2009年にサービスを開始してから リプレースはせずに15年開発を続けており。 巨大なコードベースの保守をしつつ 開発を行っています。 7
先ほどお話したとおりリネットの開発には 深いドメイン知識と長期的な保守性が 欠かせないと考えており、 ホワイトプラスでは2016年から ドメイン駆動設計を導入しています。 8
しかし、 最初から今の状態ができていた訳では無く、 チームの体制やアーキテクチャ、 開発の流れなど徐々に進歩してきました。 9
時代に分けて導入状況や、組織体制について 紹介して行きたいと思います。 (私が参画した2016年以降の話となります) 10
個人の時代 (〜2019) 11
開発体制・開発フロー エンジニアもデザイナーもmasterマージして即リリースす るような牧歌的なところから始まり、 チームメンバーが増え(3名→5名)た頃から無秩序な状態 をやめていきたいとなり、GitHub Flowに則って PullRequestを使い始めました。 12
設計手法 Larvalを使用したActiveRecordパターンからもう一歩踏み 込んで行こうと思った際に、顧客側、工場側、CSと同じ情 報に対して異なるアクターが異なる用語で関わるなど。 複雑な事業ドメインを持つリネットにはドメイン駆動設計が 合うと考え導入しました。 13
ドメイン駆動設計へアプローチ 導入時にチームでワークショップを行いリネットの境界付け られたコンテキスト、サブドメインはどのようなものが有る のかをまとめました。 14
ドメイン駆動設計へアプローチ 四角がサブドメインで、くっついている固まりを境界付けら れたコンテキストとして扱っています。 15
ドメイン駆動設計へアプローチ 当時のドメイン駆動設計への解像度と事業ドメイン自体への 解像度から実際に開発をして行く中で徐々にやりづらさを感 じるようになりました。 16
ドメイン駆動設計の浸透度 ドメイン駆動設計でやるという大きな設計手法について方針 は共有できているが、開発自体が属人的な部分も多く、人に よってドメイン駆動設計への向き合い方には濃淡がありまし た。 ユビキタス言語の整備が不十分、ドメインエキスパートと共 にモデリングしない、など。 17
ドメイン駆動設計の浸透度 開発プロセスとして開発者と担当領域がある程度固定化され ていた結果。開発担当者に合わせて境界付けられたコンテキ ストが存在していました。(有り体に言えばサイロ化してい た) ドメイン駆動設計とそれに倣ったアーキテクチャになってい る所もあればなっていないところもあると言う状態。 18
チーム化の時代 (2020年〜2021年) 19
開発体制・開発フロー 人数も増えつつあり、ビジネス側のニーズに応えるスピード を上げるために、1つの開発チームから - クリーニングを利用するお客様向け(顧客領域) - クリーニングを行う工場向け(工場OPS領域) の2チーム体制へと変更を行いました。 ※モバイルアプリやインフラ領域もありますが、 Webの開発チームという意味
20
開発体制・開発フロー これ以降は、 全社的に行っている事もありますが 主に顧客領域のチームで施策や状況となります。 21
22
開発体制・開発フロー 合わせて、チームでの開発をより推し進めていくためにスク ラム開発を導入。 スプリントプランニングやデイリースクラムを経てチームと してナレッジやドメイン知識が蓄積され始めました。 さらに、設計プロセスをフローに組み込むようにしました。 23
ドメイン駆動設計へアプローチ • ドメイン知識の共有会 • ドメイン駆動設計についての読書会 • ユビキタス言語表の管理と表に基づいた命名 一例ですが、これらの取り組みを行う事チームの認識を揃え 同じ目線で設計、開発を行う事が出来るようになりました。 24
ドメイン駆動設計へアプローチ • スクラムでの認識合わせ • ドメイン知識の共有会 • ドメイン駆動設計についての読書会 • ユビキタス言語表の管理と表に基づいた命名 一例ですが、これらの取り組みを行う事チームの認識を揃え
同じ目線で設計、開発を行う事が出来るようになりました。 25
ドメイン駆動設計の浸透度 個人の時代の開発担当者で境界付けられたコンテキストが分 割されているような属人性を減らす事ができ、チームで同じ イメージを共有して進めることが出来るようになった。 26
ドメイン駆動設計の浸透度 とはいえ、設計も実装もまだ手探りの段階でドキュメント化 されておらず、 設計についても口頭や定型化されていない図を用いる形で、 最初の設計時点でドメインモデリングが充分に出来ていない 事から、PullRequestでの設計についての議論になり大きな 手戻りも発生していました。(個人の時代よりは減った) 27
仕組み化の時代 (2022年〜現在) 28
開発体制・開発フロー チームとしての体制が整い、チームに新しいメンバーが参画 し始める。 テックリードの役割を置きチームの技術力向上にも意識的に 向き合える体制へ。 29
ドメイン駆動設計へアプローチ 既存のチームメンバーは知っているがドキュメント化されて いないといった暗黙知が目立ち始めたため以下の施策を強化 しました。 • ドメイン駆動設計の定義を揃えるための勉強会 • ドキュメンテーションの整備 • ボトムアップの設計としてアーキテクチャ整備
30
ドメイン駆動設計へアプローチ 特に定義を揃えるの部分では、今回のパンフレット記事 「DDDで迷わないために、チームの正解を見つける」を 弊社メンバーが寄稿してくれていますのでそちらもぜひご一 読ください。 31
新規開発において設計を行う際にSUDOモデリングというフ レームワークを用いて、チームで行う事が出来るようになり ました。 ドメイン駆動設計の浸透度 32
ドメイン駆動設計の浸透度 SUDOモデリングとは の4つの図でモデリングを行う手法 簡単にできるDDDのモデリング - ドメイン駆動設計(松岡さんの記事) https://little-hands.hatenablog.com/entry/2022/06/01/ddd-modeling • ドメインモデル図(D) •
オブジェクト図(O) • システム関連図(S) • ユースケース図(U) 33
ドメイン駆動設計の浸透度 SUDOモデリングを通じて作成した図はドメインオブジェク トを表すと共に、実装ではわかりにくい、業務としてどのよ うな事をしているのかを表す資料となっています。 34
35 ドメイン駆動設計の浸透度 これらの仕組み化を経て、チームでドメイン駆動設計をやっ ていると、やっと胸を張って言えるようになったかなと思い ます。
これから先の未来 (現在〜202X) 36
37 今後やりたいこと 巨大な泥団子を含め、最初に考えて異まではレガシーとなっ た境界付けられたコンテキストの整理整頓を進め、アプリ ケーションを適切に分割を行うことでチーム毎のコンテキス トに、より集中出来るようにして行きたいと考えています。
38 作成中のコンテキストマップ
道のりは遠いですが、 ホワイトプラスでは 一緒に歩む仲間を募集しています! 39
ご静聴ありがとうございました 40