ドメイン

「駆動」「開発」
ギルドワークス株式会社

前川 博志 a.k.a @Posaune
自己紹介
• 前川博志 a.k.a @Posaune
• もともと老舗メーカでWindowプログラマ

ギルドワークス株式会社所属ALMエンジニア
• Microsoft MVP for Visual Studio ALM
告知
• 第28回 TFSUG大阪 継続的デリバリーを実現する
Team Foundation Server / Visual Studio Online 特集

https://tfsug.doorkeeper.jp/events/31243
ALM #とは
• Application Lifecycle Management
• アプリケーションの一生を面倒見るお仕事
• どういう課題から、どういう要求が生まれて、
それをどう実現し、どう確認し、どう運用し、
どう役目を終わらせるか。
• (個人的解釈です)
アプリーケーションの輪 転生
※イメージです
ALMエンジニアとしての最近
• ギルドワークスの現場コーチ
• 飛び込みCIエンジニアとして主にiOS周りの

ビルド環境を整備
• CI Serviceにゾッコン中
http://www.slideshare.net/Posaune/jenkinsci-50411288
開発者としての最近
• Javaはなんとかかんとかドメイン駆動にしようと

四苦Hack中
• SwiftはクライアントサイドMVCで画面と実装を

分離させようと四苦Hack中
• どんなプロジェクトでも、ユーザに一歩踏み込んで

機能やデザイン(意匠)についてディスカッションしてい
ます
開発・現場での困り事は

なんでもギルドワークスへ!
こっから本題
@Posauneとドメイン駆動設計
DDDと出会う
• 最初の出会いは進められて読んだInfoQのDDD冊子

(正直つらかった)
• 読み進む中で増田さんのBlogを

発見(そっちは何とか分かる)
• とはいえ、実践で使うには至らず
エヴァンス本との出会い

(一回目)
• 頑張って読んだ、けれど・・・
• 正直Value Objectくらいしか頭に残ってな
かった(それもThought Worksアンソロジー
で頭に入ってたのかも)
• やっぱり、「これでやろう」とは思えず
エヴァンス本にすがる

(二回目)
• ある日、結構でかいめのソフトウェアの設計担当に。
• 所謂クライアントサイドMVCを採用したが、Model
層以下の組み方が分からず、画面とデータを直結しか
ける
• これではいかんとDDD本を読む
• ようやくレイヤー化アーキテクチャの利点を知る
アプリケーション層重要
• ドメインをユーザインタフェースから分離す
るにはこの一層が必要
• クライアントサイドMVCのMがいきなり

ドメインオブジェクトと直結されがち
• ドメインを隔離することの重要性に

気づきかける
そしてギルドワークスへ
ギルドワークスとDDD
よくある誤解
• 増田さんのお膝元なんだから、ギルドワーク
スはDDD完璧にこなしているんでしょ?
ギルドワークスのDDD事情
• 「誰かが一人頑張ればドメイン駆動設計でき
る」なんてことは絶対にない
• Ruby / RoR でとにかく動くものを素早く作っ
て行くのが主流のスタイルだった
• ちょうど今その作り方の壁にぶち当たりつつ
あるところ
DDDへの期待
• 技術的負債改善へのアプローチ
• 素早く・安全な改良を行いたい
• エンジニアがお客様の業務にもっと興味を

もつように
開発クレド
http://blog.guildworks.jp/2015/09/02/guildworks_credo/
チームは顧客と利用者の関心事を
反映した、深いモデルとしなやか
な設計を追い求めることで、ソフ
トウェアを顧客の要望に機敏に対
応できるようにします。
DDDを広めるための取り組み
• ドメインの言葉で会話をする
• モデリングセッション
• “DDD Boot” (考え中)
• ちくちく設計鍛錬場
ドメインの言葉で会話する
• Slackで技術者の言葉のみで会話してしまう
• ほうっておくと、言われたままの設計で作る
技術者に成り下がってしまう
• 気をつけないと、gemやライブラリ名や

代名詞で会話してしまう
こんな感じ
• 「devise gem を導入します」
• 「なにそれ。何のために使うの?」
• 「 ユーザーのログイン時にメールでリマインダ
投げる所の実装です。deviseが楽かなぁと」
モデリングセッション
• 開発者全員でモデリングをして意識をあわせ
ておく
• 可能なら、クライアントさんにも入って

もらい、言葉をあわせていく。
• できるならその場で集まって、ダメなら

オンラインで共有しながら
DDD Boot
• DDDをちゃんとすると、面倒くさい。

(初期実装でのRoR / gem での立ち上がりにかなわない)
• とはいえ、作るのってWeb と REST APIくらいなんだよねぇ
• というわけで、テンプレート欲しい
• (簡単なのは)もうあるよ 

https://github.com/system-sekkei/isolating-the-domain
ちくちく設計鍛錬場
• ギルドワークス有志でDDD本を読む会
• 特徴:ちくちく読む
「ちくちく読む」とは
• 一回(1時間30分くらい)で大体2段落くらい
しか進まない
• 増田さんセレクトのエッセンスとなる部分を
要約し、表す意味をじっくり考える
• 必要に応じて、原著も参照する。
ちくちく読んでいる様子
@Posaune の考えるDDD
突然の(個人的)ブレイクスルー
• ドメイン駆動設計の探求 其の一 モデルと実装
を協調させる、とはどういうことか

http://blog.guildworks.jp/2015/08/12/domain-driven-design-1/
• ドメインに「駆動」されて「設計」するとは

どういうことか、という気付き

皆さんにとって設計とは?
皆さんの設計が

実現されているのは何処?
「コード」ですよね!
本当にそれ「駆動」されてる?
• TDD、BDD

テストによってコードが駆動される
• (狭義の)MDD 

モデリングによってコードが駆動される
• DDD

ドメインによって、設計書が駆動される??
ある種の意思決定をすること
によって、モデルと実装の協
調が保たれ、互いがもう一方
の効果を高めるようになる。
エリック・エヴァンスのドメイン駆動設計
協調すべきはモデル

(= ドメイン)と実装。



ドメインに駆動され、

実装が現れる。
しかし現実は・・・
プロジェクトが障害に突き当
たると、その障害の大小に関
係なく、開発者は、こうした
設計の原則が当てはまらない
ように見える状況に自分たち
が陥ったと思うかもしれない。
エリック・エヴァンスのドメイン駆動設計
ではどうやって

ドメインに駆動され

実装する?
ドメインの設計を、

ソフトウェアシステムにおけ
るその他の大量の関心事から
分離する
エリック・エヴァンスのドメイン駆動設計
特定の区別に従ってモデル要
素を定義することで、モデル
要素の意味が鮮明になる。個々
の要素に対して実績のあるパ
ターンに従うことで、実際に
実装できるモデルを作れるよ
うになる。
エリック・エヴァンスのドメイン駆動設計
• ドメインの関心事を分離し
• エヴァンス本に紹介された
パターンに適用することで
ドメインを実装できる
これは「設計」なんだろうか?
開発者の役割を誤って分割し
たために、モデリングが実装
から切り離されてしまい、進
行中の深い分析が設計に反映
されなかった。
エリック・エヴァンスのドメイン駆動設計
DDD is not only Design !!
• モデリングして、実装して、フィードバックを
受ける、というライフサイクルそのものが

ドメイン駆動設計
• 「値オブジェクトとエンティティを分けた」
「レポジトリを使った」「レイヤ分割した」

だけではドメイン駆動設計ではない!
なんのためにDDDするのか
ソフトウェアの核心は、ドメ
インに関係した問題をユーザ
のために解決する能力である。
それ以外の特徴はいずれも、
どれほど重要だとしても、こ
の基本的な目的を支えるにす
ぎない。
エリック・エヴァンスのドメイン駆動設計
「ドメインに駆動される開発」
顧客の問題を解決してくれる

「使われる」ソフトウェアを作る
顧客の関心事をモデル化し

それを実装と一致させる
レイヤー化アーキテクチャ
値オブジェクト
ファクトリ
エンティティ
サービス
Why
What
How
ソフトウェアの核心にある複
雑さには、真正面から立ち向
かわなければならない。そう
しなければ、的外れなソフト
ウェアを作ってしまう危険が
あるのだ。
エリック・エヴァンスのドメイン駆動設計
核心にある複雑さに立ち向かう
• お客さんの関心事で会話をする
• お客さんの関心事でモデリングする
• お客さんの関心事をソースコードにのせる
• お客さんの関心事を常に探り続け、改善しつ
づけ、洗練させ続ける
とはいえ、

まだまだ歩き始めたばかり
今の状況
DDDを武器に、
ソフトウェアの核心を、

一緒に解きほぐしていきましょう!
仲間を募集中!!

http://guildworks.jp/contact/
Enjoy, Software Development !!

ドメイン『駆動』『開発』