エンジニア合宿でモデリングしてみた

8月1日, 2日に弊社初となるエンジニア合宿(in 館山)を開催しました。

モデリングとは?

’’’ ソフトウェアやシステムあるいは業務ドメインの構造や振る舞いを適切な観点で抽象化し図式化して表現したり、シミュレーションしたり、実行可能言語に変換・自動化したりするための、モデリング技術やモデル駆動設計、モデルベースシステムズエンジニアリング、あるいはモデルやモデリング全般に関するノウハウやエピソードに関する記事です (引用: モデリング・DDD | 株式会社豆蔵) ’’’

モデリングの際にやったこと

1. 合宿のゴール設定

【やること】

プロダクトのモデリング

【ゴール】

・Joinしたばかりの人が一瞬で全体像を把握可能な状態をつくる

・それを見てそのままコードに落とせる

今回は、モデリングした結果を簡易クラス図に書き起こすところまでをゴールにしました。

2. 用語LT

f:id:hrb-sakaguchi-riona:20190807185639j:plain

Entity, Value Object, Module, 集約などはモデリングで欠かせない用語となってくるため、合宿のはじめにエンジニアのゆきちさんが LTしてくれました。

私は、DDDをつかった開発が初めてだったため、前提知識を揃えていただいたあとにモデリングに参加することができました。

3. 名詞、動詞出し

みんなでEntity, Value Object, Serviceの名前になりえる言葉を出していきます。 これはEntityとValue Objectは必ず名詞となり、Serviceは動詞となるためです。 以下が例になります。

機能:ユーザー情報画面

出てきた名詞:userID, 氏, 名, Email, 組織情報、項目、項目要素、項目ID, 項目要素ID

※今回は、ドメインエキスパートである藤原さんが、事前にユビキタス言語集を作ってくださっていたおかげでこの工程は2回目以降やらなかったのですが、ユビキタス言語が決まっていない段階であれば有効な工程だと思います。

4. グルーピング

モデリングに相当する部分になりますが、名詞と動詞出しで出てきた用語について、関連性をみながら、Entity, Value Object, Serviceに分けていきます。

例:

Entity: User

Value Object: userID, 氏, 名, Email

用語を書いた付箋を模造紙に貼り、丸で囲ってみたり、メモを付け加えながらやると、目で見やすく、話し合いがしやすくなりました。

最終的には、Value ObjectをもったそれぞれのEntityを特定させることができました。

Entityの振る舞いを考える

Value ObjectやServiceからEntityを見つけ出したら、そのEntityが持つ振る舞いを考えます。(今回は振る舞いを考えるのはEntityにのみ行いました)

例として、タスクの担当者というEntityがあったとすると、タスクを完了する、タスクを削除するというような振る舞いを持ちます。

6. 簡易クラス図の作成

EntityとValue Object, EntityとEntityの関係性を図化していきます。

今回のゴールです。

モデリングしてみて良かったこと

全員の認識ズレをすくなくすることができる

ユビキタス言語を開発メンバー全員で出し合い、Entity, Value Objectを話合う所までができるので、コード書き出したときの認識のズレは最小限になると思います。

モデリング参加者間でのドメイン知識の共有がなされる

ドメイン知識についてなかなか全員が知っているというのは難しい状況だと思いますが、

ドメインエキスパートを交えてモデリングを行うと、随時ドメインエキスパートへ質問しながらワークするので自然と共有がなされます。

モデリングしてみて悪かったこと

実装方法にまで話が及んでしまう

今回の例で話すと、途中でUsecaseからinfrastructure呼び出しのときまでを考慮してInterfaceをどう持つかで議論してしまいました。

具体的に実装のことまでを考え出してしまうと、話し合いのゴールがわからなくなってしまって、時間がいくらあってもしょうがない状態になってしまいます。

最後に合宿の感想

モデリングはすごい有意義な時間となり、プロダクトへの理解も深まる貴重な時間をまとまって取れたことが良かったと思います。

ITSの保養所を利用したのですが、温泉あり、美味しいご飯あり、卓球ありでメンバー全員とたのしい交流をはかることができたことも良かったです。

f:id:hrb-sakaguchi-riona:20190807185422j:plain

f:id:hrb-sakaguchi-riona:20190807185433j:plain