SlideShare a Scribd company logo
1 of 35
勉強会
DDのはなし
自己紹介
権藤です。
よろしくお願いします。
TW: gondoh_jp
FB: 権藤 隆行
Copyright Catchup, Inc. All Rights Reserved.
2
DDの話ですが
神社駆動開発とか
居酒屋駆動開発の話じゃ
ありません
Copyright Catchup, Inc. All Rights Reserved.
3
DDDの話します
Copyright Catchup, Inc. All Rights Reserved.
4
DDDについて
 よく知っている / 実践している
 概要はわかる
 名前だけは知っている
 知らない
Copyright Catchup, Inc. All Rights Reserved.
5
ここに向けた話
 よく知っている / 実践している
 概要はわかる
 名前だけは知っている
 知らない
Copyright Catchup, Inc. All Rights Reserved.
6
DDDはなんの略称か
domain
driven
development
→ ☓
Copyright Catchup, Inc. All Rights Reserved.
7
DDDはなんの略称か
domain
driven
design
(ドメイン ドリブン デザイン)
Copyright Catchup, Inc. All Rights Reserved.
8
ドメイン駆動設計
Copyright Catchup, Inc. All Rights Reserved.
9
ドメイン駆動設計
‘ドメイン駆動設計(英: Domain-driven design, DDD)とはソフトウェ
アの設計手法であり、「複雑なドメインの設計は、モデルベースで行う
べき」であり、また「大半のソフトウェアプロジェクトでは、システム
を実装するための特定の技術ではなく、ドメインそのものとドメインの
ロジックに焦点を置くべき」であるとする。この名称は、 Eric Evans が
同名の著作で用いた。‘
※ 引用: wikipedia
Copyright Catchup, Inc. All Rights Reserved.
10
ドメイン駆動設計
うーんよくわからん
Copyright Catchup, Inc. All Rights Reserved.
11
ざっくり言うと
複雑なシステム設計は
要件に応じて適切に分割した領域を
モデルとして組み立てるほうががいいよ!
※ 権藤談
Copyright Catchup, Inc. All Rights Reserved.
12
ざっくり言っても
まだ分かりづらいので
今日は入門のさらに入門的なことが
紹介できればと思います
Copyright Catchup, Inc. All Rights Reserved.
13
DDDの最初の罠
「ドメイン」という
言葉の意味が
分かりづらい
と言うか知らない
Copyright Catchup, Inc. All Rights Reserved.
14
ドメイン全体の中に定義される部
分領域。特に、インターネット上
に定められた部分領域を言う。
ネット上の住所に当たる。
※ 引用: google検索
Copyright Catchup, Inc. All Rights Reserved.
15
ドメイン全体の中に定義される部
分領域。特に、インターネット上
に定められた部分領域を言う。
ネット上の住所に当たる。
※ 引用: google検索
Copyright Catchup, Inc. All Rights Reserved.
16
DDDのドメインはこれ
例えば
少し前のぬーらぼさん記事がありました。
ヌーラボ社内の勤怠管理アプリ「Hello
Goodbye」の紹介https://nulab-
inc.com/ja/blog/nulab/hello-goodbye-typetalk/
Copyright Catchup, Inc. All Rights Reserved.
17
ドメインに置き換えてみる
Copyright Catchup, Inc. All Rights Reserved.
18
ドメインに置き換えてみる
ある程度部分領域を分けていきドメインモデル
として定義し、システムへ落とし込む。
 非干渉デバイス
 Slack
 出勤状況
 出勤ログ
などなど…
Copyright Catchup, Inc. All Rights Reserved.
19
とあるシステム開発の話
クライアント: 勤怠管理楽に便利にしたいんだけどどうにかならんか
システムディレクター: 会社の業務形態と勤務形態おしえてや
クライアント: こんな感じやで
システムディレクター: こんな感じなんやな
→ ドメイン設計
Copyright Catchup, Inc. All Rights Reserved.
20
最初の一歩!! //
Copyright Catchup, Inc. All Rights Reserved.
21
DDD最初の一歩
クライアント:
すごーい
君はDDDが出来るフレンズなんだね!
となる
Copyright Catchup, Inc. All Rights Reserved.
22
システム開発現場においてのお話
優秀なPHPerの人は出来ることですが設計大事
優秀ではない僕はもうちょっとうまいこと設計
出来ないかなということがDDDを勉強する
きっかけになりました。
Copyright Catchup, Inc. All Rights Reserved.
23
良いシステム・ソフトウェアを作る
作るシステム・ソフトウェアが一体何なのかを
十分に知る必要がある
部分領域に分割し
領域の責務をしっかり把握する
Copyright Catchup, Inc. All Rights Reserved.
24
炎上するプロジェクトとは
いつまでに何を作るか 詳細がはっきりわかっ
ていない
つまり
ドメインモデルがはっきりしていない
Copyright Catchup, Inc. All Rights Reserved.
25
ドメインモデルの崩壊は炎上を起
こす(ことがある)
いつまでに何を作るか 詳細がはっきりわかっ
部分領域がわかっていない
→ つらい
分割すべきモデルが1つになっていたりしてる
→ つらい
つまりDB正規化もまるっきり行われていない
→ つらい
Copyright Catchup, Inc. All Rights Reserved.
26
DDDが解決すること
複雑な現実の要求を、責務によって部分領域に
分割し、プログラムコードとしての構築を可能
にします。
炎上を防ぎあなたのウィークエンドの時間と、
ウィークデイの心のゆとりを助けてくれます。
たぶん。
Copyright Catchup, Inc. All Rights Reserved.
27
いままでのお話
時間が限られているため多くは話せませんが今
までの話はDDDの最初の概念です
DDDにはたくさんの概念が複合的に含まれた
ソフトウェア開発の指針です
Copyright Catchup, Inc. All Rights Reserved.
28
ぼくがかんじたDDDのがいねん
Copyright Catchup, Inc. All Rights Reserved.
29
DDDをもっと知る
キーワード
 エンティティ
 バリューオブジェクト
 サービス
 リポジトリ
 ファクトリー
※ 実装時にこの概念がよく利用されるよ
CakePHPとかlaravelとかFW自体が取り入れてるよね!
Copyright Catchup, Inc. All Rights Reserved.
30
実践する上で重要なこと
DDDを正確に確実にやる必要はない
というか時間的に出来ない
TDDとかも同じだと思う
ちゃんとやると逆に破綻しそう
Copyright Catchup, Inc. All Rights Reserved.
31
じゃあどんな所で活用するのか
小さい領域から意識して初めてみる
部分部分において活用する
→ 設計時にドメインモデルを意識する
→ 開発時に設計の際のドメインモデルをコードに落とし込む
→ドメインの変更に追随しリファクタリングを行う
重要な機能には絶対テストを書くように複雑な仕様なときはドメイン
モデルを元に機能定義をしてみる。。とかそういうの
Copyright Catchup, Inc. All Rights Reserved.
32
もっと知る方法
Domain-Driven Design Quickly 日本語版
無料で配布されています。
「DDD 本」でググるといいよ
Copyright Catchup, Inc. All Rights Reserved.
33
ゴンドーも勉強中です
いろいろ教えてください
間違いとかも教えてください
Copyright Catchup, Inc. All Rights Reserved.
34
ありがとうございました
Copyright Catchup, Inc. All Rights Reserved.
35

More Related Content

Similar to DDのはなし【勉強会資料】

Adobe & HTML5
Adobe & HTML5Adobe & HTML5
Adobe & HTML5Andy Hall
 
インフラエンジニアの楽しい標準化活動
インフラエンジニアの楽しい標準化活動インフラエンジニアの楽しい標準化活動
インフラエンジニアの楽しい標準化活動gree_tech
 
「実践ドメイン駆動設計」 から理解するDDD (2018年11月)
「実践ドメイン駆動設計」 から理解するDDD (2018年11月)「実践ドメイン駆動設計」 から理解するDDD (2018年11月)
「実践ドメイン駆動設計」 から理解するDDD (2018年11月)A AOKI
 
ドメイン駆動設計におけるシナリオテストの活用
ドメイン駆動設計におけるシナリオテストの活用ドメイン駆動設計におけるシナリオテストの活用
ドメイン駆動設計におけるシナリオテストの活用Takehiro Inoue
 
KyotoLT_Online_27.pdf
KyotoLT_Online_27.pdfKyotoLT_Online_27.pdf
KyotoLT_Online_27.pdfhiroya akita
 
エンジニアとデザイナーの技術交流について
エンジニアとデザイナーの技術交流についてエンジニアとデザイナーの技術交流について
エンジニアとデザイナーの技術交流についてtatsuya mazaki
 
20141216 最適化を進化させるテスト設計とターゲティング ターゲティング編(抜粋)
20141216 最適化を進化させるテスト設計とターゲティング ターゲティング編(抜粋)20141216 最適化を進化させるテスト設計とターゲティング ターゲティング編(抜粋)
20141216 最適化を進化させるテスト設計とターゲティング ターゲティング編(抜粋)Keisuke Anzai
 
ドメイン駆動設計を実践するプログラマーの悩み
ドメイン駆動設計を実践するプログラマーの悩みドメイン駆動設計を実践するプログラマーの悩み
ドメイン駆動設計を実践するプログラマーの悩みhaljik Seiji
 
DDDモデリングハンズオン - レガシーをぶっつぶせ。現場でDDD!2nd
DDDモデリングハンズオン - レガシーをぶっつぶせ。現場でDDD!2ndDDDモデリングハンズオン - レガシーをぶっつぶせ。現場でDDD!2nd
DDDモデリングハンズオン - レガシーをぶっつぶせ。現場でDDD!2ndBIGLOBE Inc.
 
アイデアを形にする ③3時間でアプリ公開!ゼロからのプログラミング講座
アイデアを形にする  ③3時間でアプリ公開!ゼロからのプログラミング講座アイデアを形にする  ③3時間でアプリ公開!ゼロからのプログラミング講座
アイデアを形にする ③3時間でアプリ公開!ゼロからのプログラミング講座DIVE INTO CODE Corp.
 
Drupalによる大規模サイトの設計・実装 において何に気をつけるべきか
Drupalによる大規模サイトの設計・実装において何に気をつけるべきかDrupalによる大規模サイトの設計・実装において何に気をつけるべきか
Drupalによる大規模サイトの設計・実装 において何に気をつけるべきかdgcircus
 
ドメイン駆動設計 思えば遠くにきたもんだ
ドメイン駆動設計 思えば遠くにきたもんだドメイン駆動設計 思えば遠くにきたもんだ
ドメイン駆動設計 思えば遠くにきたもんだ増田 亨
 
Mobage/AndAppのSDK開発事例とSDKを作る際に知っておくべきこと #denatechcon
Mobage/AndAppのSDK開発事例とSDKを作る際に知っておくべきこと #denatechconMobage/AndAppのSDK開発事例とSDKを作る際に知っておくべきこと #denatechcon
Mobage/AndAppのSDK開発事例とSDKを作る際に知っておくべきこと #denatechconDeNA
 
DDDモデリングハンズオン - レガシーをぶっつぶせ
DDDモデリングハンズオン - レガシーをぶっつぶせDDDモデリングハンズオン - レガシーをぶっつぶせ
DDDモデリングハンズオン - レガシーをぶっつぶせBIGLOBE Inc.
 
Adobe&HTML 札幌 - HTML5 Caravan
Adobe&HTML 札幌 - HTML5 CaravanAdobe&HTML 札幌 - HTML5 Caravan
Adobe&HTML 札幌 - HTML5 CaravanAndy Hall
 
ソーシャルアプリを分析してみた
ソーシャルアプリを分析してみたソーシャルアプリを分析してみた
ソーシャルアプリを分析してみたDrecom Co., Ltd.
 
[141004] cedec 2014 참관기 & 강연 리뷰 #1
[141004] cedec 2014 참관기 & 강연 리뷰 #1[141004] cedec 2014 참관기 & 강연 리뷰 #1
[141004] cedec 2014 참관기 & 강연 리뷰 #1MinGeun Park
 
現場の”今”を知る、これからのビッグデータ分析・活用のすすめ
現場の”今”を知る、これからのビッグデータ分析・活用のすすめ現場の”今”を知る、これからのビッグデータ分析・活用のすすめ
現場の”今”を知る、これからのビッグデータ分析・活用のすすめyuji suzuki
 
PhoneGapとハイブリッド開発
PhoneGapとハイブリッド開発PhoneGapとハイブリッド開発
PhoneGapとハイブリッド開発Andy Hall
 

Similar to DDのはなし【勉強会資料】 (20)

Adobe & HTML5
Adobe & HTML5Adobe & HTML5
Adobe & HTML5
 
インフラエンジニアの楽しい標準化活動
インフラエンジニアの楽しい標準化活動インフラエンジニアの楽しい標準化活動
インフラエンジニアの楽しい標準化活動
 
「実践ドメイン駆動設計」 から理解するDDD (2018年11月)
「実践ドメイン駆動設計」 から理解するDDD (2018年11月)「実践ドメイン駆動設計」 から理解するDDD (2018年11月)
「実践ドメイン駆動設計」 から理解するDDD (2018年11月)
 
ドメイン駆動設計におけるシナリオテストの活用
ドメイン駆動設計におけるシナリオテストの活用ドメイン駆動設計におけるシナリオテストの活用
ドメイン駆動設計におけるシナリオテストの活用
 
Wordpress
WordpressWordpress
Wordpress
 
KyotoLT_Online_27.pdf
KyotoLT_Online_27.pdfKyotoLT_Online_27.pdf
KyotoLT_Online_27.pdf
 
エンジニアとデザイナーの技術交流について
エンジニアとデザイナーの技術交流についてエンジニアとデザイナーの技術交流について
エンジニアとデザイナーの技術交流について
 
20141216 最適化を進化させるテスト設計とターゲティング ターゲティング編(抜粋)
20141216 最適化を進化させるテスト設計とターゲティング ターゲティング編(抜粋)20141216 最適化を進化させるテスト設計とターゲティング ターゲティング編(抜粋)
20141216 最適化を進化させるテスト設計とターゲティング ターゲティング編(抜粋)
 
ドメイン駆動設計を実践するプログラマーの悩み
ドメイン駆動設計を実践するプログラマーの悩みドメイン駆動設計を実践するプログラマーの悩み
ドメイン駆動設計を実践するプログラマーの悩み
 
DDDモデリングハンズオン - レガシーをぶっつぶせ。現場でDDD!2nd
DDDモデリングハンズオン - レガシーをぶっつぶせ。現場でDDD!2ndDDDモデリングハンズオン - レガシーをぶっつぶせ。現場でDDD!2nd
DDDモデリングハンズオン - レガシーをぶっつぶせ。現場でDDD!2nd
 
アイデアを形にする ③3時間でアプリ公開!ゼロからのプログラミング講座
アイデアを形にする  ③3時間でアプリ公開!ゼロからのプログラミング講座アイデアを形にする  ③3時間でアプリ公開!ゼロからのプログラミング講座
アイデアを形にする ③3時間でアプリ公開!ゼロからのプログラミング講座
 
Drupalによる大規模サイトの設計・実装 において何に気をつけるべきか
Drupalによる大規模サイトの設計・実装において何に気をつけるべきかDrupalによる大規模サイトの設計・実装において何に気をつけるべきか
Drupalによる大規模サイトの設計・実装 において何に気をつけるべきか
 
ドメイン駆動設計 思えば遠くにきたもんだ
ドメイン駆動設計 思えば遠くにきたもんだドメイン駆動設計 思えば遠くにきたもんだ
ドメイン駆動設計 思えば遠くにきたもんだ
 
Mobage/AndAppのSDK開発事例とSDKを作る際に知っておくべきこと #denatechcon
Mobage/AndAppのSDK開発事例とSDKを作る際に知っておくべきこと #denatechconMobage/AndAppのSDK開発事例とSDKを作る際に知っておくべきこと #denatechcon
Mobage/AndAppのSDK開発事例とSDKを作る際に知っておくべきこと #denatechcon
 
DDDモデリングハンズオン - レガシーをぶっつぶせ
DDDモデリングハンズオン - レガシーをぶっつぶせDDDモデリングハンズオン - レガシーをぶっつぶせ
DDDモデリングハンズオン - レガシーをぶっつぶせ
 
Adobe&HTML 札幌 - HTML5 Caravan
Adobe&HTML 札幌 - HTML5 CaravanAdobe&HTML 札幌 - HTML5 Caravan
Adobe&HTML 札幌 - HTML5 Caravan
 
ソーシャルアプリを分析してみた
ソーシャルアプリを分析してみたソーシャルアプリを分析してみた
ソーシャルアプリを分析してみた
 
[141004] cedec 2014 참관기 & 강연 리뷰 #1
[141004] cedec 2014 참관기 & 강연 리뷰 #1[141004] cedec 2014 참관기 & 강연 리뷰 #1
[141004] cedec 2014 참관기 & 강연 리뷰 #1
 
現場の”今”を知る、これからのビッグデータ分析・活用のすすめ
現場の”今”を知る、これからのビッグデータ分析・活用のすすめ現場の”今”を知る、これからのビッグデータ分析・活用のすすめ
現場の”今”を知る、これからのビッグデータ分析・活用のすすめ
 
PhoneGapとハイブリッド開発
PhoneGapとハイブリッド開発PhoneGapとハイブリッド開発
PhoneGapとハイブリッド開発
 

More from 株式会社キャッチアップ

Diff(ファイル比較)ツールの紹介【勉強会資料】
Diff(ファイル比較)ツールの紹介【勉強会資料】Diff(ファイル比較)ツールの紹介【勉強会資料】
Diff(ファイル比較)ツールの紹介【勉強会資料】株式会社キャッチアップ
 
baserCMSのキャッシュの仕組み~もうキャッシュでハマらない!!~【勉強会資料】
baserCMSのキャッシュの仕組み~もうキャッシュでハマらない!!~【勉強会資料】baserCMSのキャッシュの仕組み~もうキャッシュでハマらない!!~【勉強会資料】
baserCMSのキャッシュの仕組み~もうキャッシュでハマらない!!~【勉強会資料】株式会社キャッチアップ
 
ローカル環境のテスト自動化【勉強会資料】
ローカル環境のテスト自動化【勉強会資料】ローカル環境のテスト自動化【勉強会資料】
ローカル環境のテスト自動化【勉強会資料】株式会社キャッチアップ
 

More from 株式会社キャッチアップ (9)

キャッチアップ レクリエーション 2018
キャッチアップ レクリエーション 2018キャッチアップ レクリエーション 2018
キャッチアップ レクリエーション 2018
 
Diff(ファイル比較)ツールの紹介【勉強会資料】
Diff(ファイル比較)ツールの紹介【勉強会資料】Diff(ファイル比較)ツールの紹介【勉強会資料】
Diff(ファイル比較)ツールの紹介【勉強会資料】
 
気になったQiita記事【勉強会資料】
気になったQiita記事【勉強会資料】 気になったQiita記事【勉強会資料】
気になったQiita記事【勉強会資料】
 
Dockerについて【勉強会資料】
Dockerについて【勉強会資料】 Dockerについて【勉強会資料】
Dockerについて【勉強会資料】
 
Let's Encryptについて話す【勉強会資料】
Let's Encryptについて話す【勉強会資料】 Let's Encryptについて話す【勉強会資料】
Let's Encryptについて話す【勉強会資料】
 
データベース定義書とER図【勉強会資料】
データベース定義書とER図【勉強会資料】 データベース定義書とER図【勉強会資料】
データベース定義書とER図【勉強会資料】
 
Javascriptのデザインパターン【勉強会資料】
Javascriptのデザインパターン【勉強会資料】 Javascriptのデザインパターン【勉強会資料】
Javascriptのデザインパターン【勉強会資料】
 
baserCMSのキャッシュの仕組み~もうキャッシュでハマらない!!~【勉強会資料】
baserCMSのキャッシュの仕組み~もうキャッシュでハマらない!!~【勉強会資料】baserCMSのキャッシュの仕組み~もうキャッシュでハマらない!!~【勉強会資料】
baserCMSのキャッシュの仕組み~もうキャッシュでハマらない!!~【勉強会資料】
 
ローカル環境のテスト自動化【勉強会資料】
ローカル環境のテスト自動化【勉強会資料】ローカル環境のテスト自動化【勉強会資料】
ローカル環境のテスト自動化【勉強会資料】
 

DDのはなし【勉強会資料】