SCALA × × DDD × 弊社実践例
AGENDA
 自己紹介と前提話
 DDDとScalaを実践したプロセス
 Scalaでの実践
 DDDを採用する上でのあるある失敗談
 そして僕らもハマった。
 最後に
自己紹介と前提話
嫁からみた僕はこんなのらしい
(嫁に描いてもらいました。)
自己紹介と前提話
自己紹介(SCALA風味)
/* 原田侑亮さんを実装してみた。*/
class YusukeHarada extends V2TeamMember with
SepteniOriginalEngneer with SepteniOriginalEmployee {
val beforeJob = “C Engineer”
val skills = Seq(“C” , “C#” , “VBA” , “Scala” , “etc…”)
def basicWork() = {
writeContextMap()
convertContextMapToDomain()
executeCoding() /* Include Coding TestCode */
writeTest ()
}
// Todo: VV-1234で実装します!
def espcialyWork() = ???
def study () = ???
def hobby () = ???
}
自己紹介と前提話
伝えたいこと
 エリックが何いってるかわからない件な人
 DDD考えるキッカケになれば…
 Scalaやってるんだけど…
 是非プロジェクトに合わせてDDDを採用していただけるとっ
かかりになれば…
 ScalaもDDDもやってます。
 ごめんなさい!だいぶ、初歩的な第一歩のお話になってし
まいますが、生暖い目で見守っていただければ…
 ScalaもDDDもやっていないけど技術的に興味が…
 是非是非、弊社にお越しください。
自己紹介と前提話
WHY DDD ?の前に
DDDで統一できる!
自己紹介と前提話
WHY DDD ?
 長期保守が必要になるアプリケーションの開発に
なると予測できた。
 以外と広告って複雑
 エンジニアとディレクターの会話の溝があった
 ソシャゲを開発していたころのお話ですが…
 社内で流行り始めてた。
 先生がいた。
 カトジュン先生ありがとうございます。
自己紹介と前提話
WHY
 会社戦略としてScala流行らせたかった。
 僕ははじめは別にC#でもいいじゃん。と思ってた。
(過去)
 DDDのコンテキストマップをそのままコードに落
とせる。
 get { return hoge; } を書かなくてもよい
 コードが少ない。
 やみつきですね。もう、C#すら、めんどくさい。
DDDを実践したプロセス
DDDを実践したプロセス
ユビキタス言語
 ユビキタス言語の確立
 実はコレがめんどくさい。
 メンバーが多ければ多いほどめんどくさい。
 しかし、コレがベースになるので重要
 弊社ではどうやっているのか?
1. ストーリーからEntity ・ VO ・振る舞いを抽出する
2. POと相談する。
3. ドメイン図をアップデート
4. エンジニアとPOで再度レビュー
POは日本語→英語の翻訳でしっくりくるか確認
DDDを実践したプロセス
コンテキストマップ
 コンテキストマップの作成
 コンテキストマップって
 アプリケーションの世界地図かく感じです。
 イギリス地図ですらいろいろな解釈があるため、答えはありま
せん。
DDDを実践したプロセス
ドメイン図
 ドメイン図レビュー(弊社特化施策)
 コンテキストマップをクラス図っぽく起こしたものです。
 ユビキタス言語としてドメイン図と呼称することにしました。
 では、目の前でやってみましょう!
DDDを実践したプロセス
実践例(お題)
 サンプルプロジェクト
 弊社プロジェクトで、スケジュール管理が出来るWebアプリ
ケーションを作ることになりました。
すでにログイン機能は実装されており、ユーザーはシステム
からは判別出来る状態になっています。
 ユーザーストーリー
1. イベント管理者はイベントを登録できる。
2. イベント管理者はイベントに日付候補と詳細を登録できる。
3. イベント管理者は、自分以外のユーザーを招待できる。
4. ユーザーは、イベントの日付候補に○☓△をつけられる。
5. ユーザーは、○が多い日付を閲覧できる。
DDDを実践したプロセス
実践例(お題)
 ユーザーストーリー
 まずは名詞を抽出
 これらがEntityないしVOになりうる。
1. イベント管理者はイベントを登録できる。
2. イベント管理者はイベントに日付候補と詳細を登録できる。
3. イベント管理者は、自分以外のユーザーを招待できる。
4. ユーザー ⇒ POに追求すると「イベント参加者」は、イベ
ントの日付候補に○☓△をつけられる。
5. ユーザーは、○が多い日付を閲覧できる。
DDDを実践したプロセス
実践例(お題)
 ユーザーストーリー
 次に動詞
 これらがEntityもしくはVOの振る舞いになる。
1. イベント管理者はイベントを登録できる。
2. イベント管理者はイベントに日付候補と詳細を登録できる。
3. イベント管理者は、自分以外のユーザーを招待できる。
4. ユーザー ⇒ POに追求すると「イベント参加者」は、イベ
ントの日付候補に○☓△をつけられる。
5. ユーザーは、○が多い日付を閲覧できる。
DDDを実践したプロセス
実践例(まとめ)
 いかがだったでしょうか?
 今回は、プロジェクターを使用するためにCacooでやってお
りますが、普段は以下の図の通り付箋とどこでもホワイトボー
ドでやってます。
SCALA での実践
 DDDフレームワーク
org.sisioh.dddbaseの導入
 カトジュンさんお手製のDDDをするためのフレームワーク
 サンプルコード
 Google認証で投稿できるしょっぱい掲示板
 https://bitbucket.org/saxia/board
 ProductOwnerによるTraitレビュー
 SepteniのPO = コード書けない
 DDDではエンジニア・非エンジニアは関係ない!
 val/defさえ読めればドメインレビューができます!
SCALA での実践
DDDを採用する上でのあるある
失敗談
 技術に引っ張られる。
 ドメインはやっぱりドメインエキスパートと一緒につくりあげる
ものです。
 技術でドメイン捻じ曲げるのは良くないよね。
 エンジニアも凛とした心で業務(ドメイン)に向きあいましょう。
 技術のマリオネットになってはいけない。
DDDを採用する上でのあるある
失敗談
 逆流現象
 インフラ層がドメイン層を知ってしまっている。
 ORマッパー便利ですよね。
 けど、ORマッパーで作ったオブジェクトをそのまま使うと…
 ドメイン層がアプリ層を知ってしまっている。
 Formもオブジェクトで来る時代
 ドメインにそのままForm渡しちゃってない?
 どうするの?
 プロジェクト分割!
 http://qiita.com/t_hirohata/items/6c7d22a9a29f8263690d
DDDを採用する上でのあるある
失敗談
 エリックが言っていることがわからない件
 500ページもあるし、しょうが無いよね
 だからこうやってプレゼンしてます。大丈夫です。
 めげずに読みましょう。
 読んでみて困ったら、カトジュンさんがタイム
チケット売っていらっしゃるのでそちらへ
https://www.timeticket.jp/j5ik2o
まとめ
 DDDをやるなら!
 ユビキタス言語を制定しよう!
 コンテキストマップ(全体俯瞰図)を書いて、
本当に必要なものだけのやりとりを意識しよう
 ドメインを考えるときは技術を忘れよう!
 ScalaでDDDやるなら
 org.sisioh.dddbaseを使うと便利!
 特にEntityとRepository周り!
 とりあえず、非エンジニアな方もこれだけ教えれば読める
 val は要素
 def は振る舞い
 protected とかprivate ついてたら読まなくていいよ!
 プロジェクト分割で逆流を抑えよう。
まとめ?
 冒頭でも記載しましたが、SepteniOriginalでは積極採
用しています。
 DDDに興味がある方
 Scalaを試したい方
 是非是非ともに弊社にお越しください!
笑って開発できる現場を提供いたします!
ご清聴ありがとうございました!

Scala × DDD × 弊社実践例