SlideShare a Scribd company logo
1 of 34
GANMA!でDDDをやってみて
から1年くらい経った
Septeni × Scala #3
2015/06/16 杉谷
-配布用-
前説
• GANMA!をDDDで作ってみたので、実際
にどういう組み方をしたのかをご紹介し
ます。
– リリースしてから1年半分の反省も添えてみ
ました。
– 甘いところは多いので、突っ込み所を探す感
じでご覧ください
GANMA!について
• 2013/12〜
• スマホ向けの完全オリジナ
ルコミックを配信するアプ
リ
– アニメ化・単行本化も続々
と。
• 以下の3要素
– サーバー
– リーダー3種
– 管理ツール群
• 今日はサーバーでDDDを
やってみたのお話です。
前提@2013
• なんでDDD?
– なんか前職で流行ってた。
– 詳しくはSepteni×Scala#1の
発表資料をご覧ください。
• DDD扱ったことあった?
– なかった。有給消化中にDDD本を読んでみた
だけ。
– Scalaも初挑戦だった。
“マンガ”のモデリング
少年ジャンプをイメージしつつ
ユビキタス言語や構造を考えてみる。
“マンガ”のモデリング
• 始めにGANMA!のマンガ配信業務について
考えます。
– 紙とは違う点も多々ありますが、基本
「週3で漫画雑誌が公開される」というサー
ビスです。※今は雑誌形式ではなくなったけど。
• この漫画雑誌を全員で「マガジン」と呼
ぶことにして、ドメインを考えてみまし
た。
“マガジン”と”ストーリー”
• “マガジン”の具体例と
して、週刊少年ジャン
プを考えてみます。
• ジャンプには
「ナルト」の「第313
話」といったように
「第XXX話」が収録さ
れています。
• これを“ストーリー”と
呼ぶことにします編集
さんも含めて全員で)
週刊少年ジャンプ
<Magazine>
ナルト 第1話
<Story>
ワンピース 第1話
<Story> …
”ストーリー”と”シリーズ”
• またストーリーは「ナ
ルト」や「ワンピー
ス」など、一連の作品
群への名前があります。
• これを”シリーズ”と呼
ぶことにします。(全
員で以下略…
週刊少年ジャンプ
<Magazine>
ワンピース 第1話
<Story>
ワンピース
<Series>
…
マガジンに係わる業務を考える
閲覧系
• マガジン情報(と、
それに関するもの)
の取得
• マガジンの新刊一覧
を陳列する
• シリーズを通しで読
めるマガジンを陳列
する(いわゆる単行
本)
管理業務
• 作家の管理
• ストーリーの管理
• マガジンの編成
”ストーリー”ほりさげ(1)
• IDがあります(Entity)
• “シリーズ”がいます
• “作者”がいます
– 作者は原作・作画など複数の可能
性がありますが、横着して一つの
み保持で。
– 【悩んだ】クラス名を「Author」
としているが、日頃「おーさー」
ではなく「作者」と呼んでいるの
で「Sakusya」とすべきか?
• 日本語英語の対応さえ固定してれば
問題無し
• “ページ”が含まれます。
– 第一話
• 1ページ目
• 2ページ目
• …
– “ページ”とはS3上などのURLでア
クセスできる画像を指します。
• “サブタイトル”があります
– “第45話 にゃんこ襲来”
– “#183 eyes of the unknown”
– 読み切り等、サブタイトル無しも
存在なのでOption
pages:List[RemoteFile] =
[ S3(“storyId/1.jpg”),
S3(“storyId/2.jpg”),
… ]
id:StoryId subTitle:Option[String]
seriesId:SeriesId authorId:AuthorId
Storyクラス
”ストーリー”ほりさげ(2)
• “ストーリーリポジト
リ”が居ます
– 一覧 / 作者別一覧 / シ
リーズ別一覧業務
– 保存業務(ストーリー登
録・更新機能)
• インフラ層にいる
StoryTableとの仲介で
す。
• “ページ”はStoryに集
約されており、連動
して保存されたり読
み出されてたりしま
す。(リポジトリは居
ない)
StoryRepository
• get(storyId)
• list
• findBy(authorId)
• findBy(seriesId)
• entry(story)
• update(story)
• delete(storyId)
Story … Story
StoryTable
”シリーズ”ほりさげ(1)
• IDがあります(Entity)
• “タイトル”があります
– ≒作品名
– 読み切りでも作品名はあ
るので無題は無いはず?
• こっちにも“作者”がいま
す。
– ストーリーとシリーズで”
別作者が可能”を意味しま
す。
– 実際はほとんどストー
リー作者と一致しますが
例外あり
• Magazine: ドラクエ4コマ
漫画劇場①
• Series:ドラクエ4コマ漫画
劇場(作者:編集部
• Story: 柴田亜美作、衛藤ヒ
ロユキ作、…
title:Stringid:SeriesId
authorId:AuthorId
Seriesクラス
”シリーズ”ほりさげ(2)
• “シリーズリポジト
リ”が居ます
– 一覧 / 作者別一覧
– 保存業務(シリーズ登
録・更新機能)
• インフラ層にいる
SeriesTableとの仲介
です。
SeriesRepository
• get(seriesId)
• list
• find(authorId)
• entry(series)
• delete(seriesId)
Series … Series
SeriesTable
”マガジン”ほりさげ(1)
• IDがあります(Entity)
• “タイトル” があります
• “ストーリー”を収録していますが、
ストーリー以外も収録してそうで
す。
– 表紙とか広告とか告知とか。
– ストーリーと静止画を収録できるよ
うにし、”マガジンアイテム”と呼ぶ
ようにします
• “単行本”という考えが方がありま
す
– “同じシリーズ”の話をある程度の話
数でまとめた”マガジン”
– 単行本でないマガジンを”編成本”と
呼んでいます
– 陳列場所が違う
• 編成本 : 新刊タブ
• 単行本 : ランキングタブ
– seriedBindに値があるかどうかで
区別。
• 【悩み】呼び方も機能も違うわ
けだからクラスで別ける必要が
ある気がする
items:List[MagazineItem]=[
StoryItem(storyId),
ImageItem(imageId),
…]
id:MagazineId title:String
seriesBind
:Option[SeriesId]
Magazineクラス
”マガジン”ほりさげ(2)
• “マガジンリポジト
リ”が居ます
– 一覧
– 保存業務(シリーズ登
録・更新機能)
– ランキング
• 【悩み】ここに居
るのは不適切な気
がする
• インフラ層にいる
MagazineTableとの仲介
です。
• マガジンアイテムはマガ
ジンに集約されていて、
連動して保存されたり読
まれたりします。(リポ
ジトリ無し)
MagazineRepository
• get(magazineId)
• list()
• search()
• delete(magazineId)
• entry(magazine)
• update(magazine)
• ranking()
Magazine Magazine
MagazineTable
…
悩んだ: IDの振り方
• IDにはAUTO_INCREMENTを使うことが多いが、
INSERTするまでIDを振れない問題
– 採番用のテーブルを作る?
• 実装がすこし手間。
• パフォーマンスと負荷集中とデータ量が怖い
– UUID?
• UUIDにはv1とv4がある
– v1 : MACアドレスを使っているので生成機材問わず一意保証
– v4 : 乱数。 一意保証無し。怖い。JDK標準搭載のはこれ。
– そのときはSELECT UUID(); を利用した
• UUIDv1(NICが無いときはv4)。
• 極端には遅くないだろうし、Slaveでも使えるだろうし。
• ちゃんと調べたらSQL使わずともJavaからv1生成可能だった
– Java Uuid Generator (JUG)
IDの振り方別解
• Snowflake系
– タイムスタンプ + シーケンス番号 + 何らかの手段で
付与したデバイスID
– Scalaを用いて分散IDワーカを実装する
(ChwtworkCreator’sNote – かとじゅん氏)
• Timestamp(41bit) + データセンターID(5bit) + ワーカー
ID(5bit) + シーケンス(12bit)
– 軽量なTime-based ID生成器”shakeflake(仮称)”につい
て(Smartnews開発者ブログ)
• 遅延生成
– 素直に後でIDを生成してセット
– 実践ドメイン駆動設計の第5章”エンティティ”に遅延
生成の説明もあり(オススメはしていなかった)
悩んだ: DB → Entity(1)
• DB操作テーブルはInfra層 / Entityは
Domain層
• DB取得結果からEntityを作るとき、素
直に”Entityを作って返す”と書くのは
まずい気がした
– Infra層から上位であるDomain層のメソッ
ド呼び出し
– ID指定でのインスタンス化がどこからでも
出来るのもゆるい感じが。
• あずかり知らないIDを持つEntityが作れてし
まう。
• できれば、ID指定でインスタンス化する手
段はPublicにしたくない感がする
import domain.manga.Series
object SeriesTable {
def get(id) = {
val row = SQL(“select〜…
Series(row[“id”],
row[“title”],
…)
}
}
【インフラ層】
infra/db/manga/SeriesTable.scala
悩んだ: DB → Entity(2)
object SeriesTable{
def get(id){
val row = SQL(“select〜…
(row[“id”],
row[“title”],
…)
}
object SeriesRepository{
def get(row){…
(id, title, authorId,…)
= SeriesTable.get(id)
Series(id, title, authorId, …)
}
というわけで、最初はインフラ層から
はタプルで返して、Domain層でインス
タンスを作っていた。
【ドメイン層】
domain/manga/Series.scala
【インフラ層】
infra/db/manga/SeriesTable.scala
…が面倒すぎた
DB → Entity解法(1)
• 解法① - DAO
– ドメイン層に
生データ ⇔Entity変換のメ
ソッドかクラスを設ける。
– 素直な解法
class SeriesRepository {
def convertToEntity(row:Row)={
Series(row[“id”], row[“title”]…)
}
}
【ドメイン層】
domain/manga/Series.scala
DB → Entity解法(2)
• 解法② - 依存性逆転の原則
– 実践DDD p118
– 定義(trait/interface)は
domain層で、実装はinfra層
を可とする
• DB->Entityは普通にinfra層で
インスタンスを作って返す
– なんとなく気持ちが悪いが、
最近はこれ系を愛用中。
• 実践DDDには他の方法も
載っています。
class SeriesTableResult
extend Series {
…
}
trait Series {
val id:SeriesId
val title:String
…
}
【ドメイン層】
domain/manga/Series.scala
【インフラ層】
infra/db/manga/SeriesTable.scala
APP層でやっていること例
• 閲覧系
– マガジン情報(と、それに関
するもの)の取得
• MagazineRepositoryを叩くだけ
– マガジンの一覧やランキング
• MagazineRepositoryのlistやら
Rankingを叩くだけ
• 管理業務
– 作家の管理
1. 必要入力を受け取る
2. Authorオブジェクトを作る
3. entryする。
4. あとはget/list
5. JSON出力
– ストーリーの管理
1. 必要入力を受け取り”下書
き”を作る
– Storyと似たフィールド構成
だが、NULLABLEが多い
2. 下書きをストーリーに変換
する
3. entryする
4. あとはget/list
5. JSON出力
– マガジンの編成
• 格納したいマガジンアイテム
の一覧を受け取る
• Magazineを作る
• entryする
実装上の反省
• RepositoryとTable操作系をobjectにしてし
まった
– テストが大変
– コンテキストが絡まざるを得ない事をすると
きにも大変
• パフォーマンスチューニングやトランザクション
– DI出来るように徐々に改修中
• Repository系でFutureを使わなかった
– チューニングを極められない
やってみてどうだったか
• DDD良い
– 実践しきれてるかどうかはわからないけど、それでも良い
感じ。
– 編集者も含めて、用語を合わせるのは混乱が少なくて良い。
• 説明が同じになると、動員できる知恵が多くなり、ドメインを
捕らえる精度が上がって、ますます良い。
• ドメイン層の実装が、口頭説明と同じになるのはわかりやすい。
– ドメイン層に徹底的に余計なことを書かないようにするの
は、とても見通しが良い。
• 大きめのリファクタを決断しやすい。口頭説明でおかしさを感
じたら、リファクタ決断の時
だいたい以上です。
ご静聴ありがとうございました!
【付録】
勉強会冒頭で利用した
会社紹介の資料
Septeni × Scala 勉強会 #3
〜 ドメイン駆動設計やってみた(2) 〜
2回目のテーマ:ドメイン駆動設計
チャットワーク株式会社
加藤潤一 さん
Play2 with DDD 〜何からはじ
めて何に気をつけるべきか〜
セプテーニオリジナル
原田侑亮
Scala : DDD × 弊社実践例
本勉強会について
本日のトピック
社内研修を兼ねつつ、セプテーニの知名度向上を目標としたもの
1回目のテーマ:Scala普及について
チャットワーク株式会社
加藤潤一 さん
Scala関数プログラミング初級
セプテーニオリジナル
杉谷保幸
Scalaに至るまでの物語
セプテーニオリジナル
寺坂郁也
新卒で初めて学ぶ言語が
Scalaで良かったこと/大変だったこと
※資料はconnpassにて共有されています
…
インターネット広告事業
自社サービスの企画・開発
海外の開発拠点
ソーシャルゲーム開発
広告プラットフォーム事業
マンガコンテンツ事業
セプテーニとは、ネット広告業を本業としつつ
1部署1会社としていろいろやっている会社です。
セプテーニグループ
セプテーニグループ
売上高 平均年齢
働きがいのある会社ランキング2015
書籍化・アニメ化も決定! オリジナルコミックアプリ
最強ネット広告運用支援システム
10代少女に人気・ファッションアプリ
・Playframework + Scala
・AngularJS + TypeScript
・DDD採用
・Unit Test 完備
・スクラム
・Android + Scala
・Swift
※検証中
・Playframework + Scala
・AngularJS + TypeScript
・DDD採用
・Unit Test 完備
・スクラム
・Sisioh(http://sisioh.org/)
…for
・弊社最後のLAMP構成
・レガシーコード改善ガイド活用
技術トピック
・スクラム
・Android + Kotolin
求人
セプテーニ・オリジナルでは
Scalaエンジニアを募集しています
社内カフェ(ランチ営業あり) スタンディング作業可の最新デスク
本日のテーマ:ドメイン駆動設計(2)
セプテーニオリジナル 杉谷保幸
GANMA!でDDDをやってみてから1年くらい経った
セプテーニオリジナル 原田侑亮
「DDD × 新人」が学んでみたレシピ共有
20:10 -
21:00 -

More Related Content

What's hot

ドメインロジックに集中せよ 〜ドメイン駆動設計 powered by Spring
ドメインロジックに集中せよ 〜ドメイン駆動設計 powered by Springドメインロジックに集中せよ 〜ドメイン駆動設計 powered by Spring
ドメインロジックに集中せよ 〜ドメイン駆動設計 powered by Spring増田 亨
 
正しいものを正しく作る塾-設計コース
正しいものを正しく作る塾-設計コース正しいものを正しく作る塾-設計コース
正しいものを正しく作る塾-設計コース増田 亨
 
ドメイン駆動設計の正しい歩き方
ドメイン駆動設計の正しい歩き方ドメイン駆動設計の正しい歩き方
ドメイン駆動設計の正しい歩き方増田 亨
 
ドメイン駆動設計に15年取り組んでわかったこと
ドメイン駆動設計に15年取り組んでわかったことドメイン駆動設計に15年取り組んでわかったこと
ドメイン駆動設計に15年取り組んでわかったこと増田 亨
 
マイクロサービス 4つの分割アプローチ
マイクロサービス 4つの分割アプローチマイクロサービス 4つの分割アプローチ
マイクロサービス 4つの分割アプローチ増田 亨
 
ドメイン駆動設計のためのオブジェクト指向入門
ドメイン駆動設計のためのオブジェクト指向入門ドメイン駆動設計のためのオブジェクト指向入門
ドメイン駆動設計のためのオブジェクト指向入門増田 亨
 
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)Takuto Wada
 
ドメイン駆動設計 分析しながら設計する
ドメイン駆動設計 分析しながら設計するドメイン駆動設計 分析しながら設計する
ドメイン駆動設計 分析しながら設計する増田 亨
 
40歳過ぎてもエンジニアでいるためにやっていること
40歳過ぎてもエンジニアでいるためにやっていること40歳過ぎてもエンジニアでいるためにやっていること
40歳過ぎてもエンジニアでいるためにやっていることonozaty
 
脱RESTful API設計の提案
脱RESTful API設計の提案脱RESTful API設計の提案
脱RESTful API設計の提案樽八 仲川
 
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」Takuto Wada
 
ドメイン駆動設計とは何か 【入門編】
ドメイン駆動設計とは何か 【入門編】ドメイン駆動設計とは何か 【入門編】
ドメイン駆動設計とは何か 【入門編】増田 亨
 
マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!mosa siru
 
ドメイン駆動設計 本格入門
ドメイン駆動設計 本格入門ドメイン駆動設計 本格入門
ドメイン駆動設計 本格入門増田 亨
 
3週連続DDDその1 ドメイン駆動設計の基本を理解する
3週連続DDDその1  ドメイン駆動設計の基本を理解する3週連続DDDその1  ドメイン駆動設計の基本を理解する
3週連続DDDその1 ドメイン駆動設計の基本を理解する増田 亨
 
3週連続DDDその2 深いモデルの探求(ドメイン駆動設計 第3部)
3週連続DDDその2  深いモデルの探求(ドメイン駆動設計 第3部)3週連続DDDその2  深いモデルの探求(ドメイン駆動設計 第3部)
3週連続DDDその2 深いモデルの探求(ドメイン駆動設計 第3部)増田 亨
 
ドメイン駆動で開発する ラフスケッチから実装まで
ドメイン駆動で開発する ラフスケッチから実装までドメイン駆動で開発する ラフスケッチから実装まで
ドメイン駆動で開発する ラフスケッチから実装まで増田 亨
 
DockerコンテナでGitを使う
DockerコンテナでGitを使うDockerコンテナでGitを使う
DockerコンテナでGitを使うKazuhiro Suga
 
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)NTT DATA Technology & Innovation
 
イミュータブルデータモデルの極意
イミュータブルデータモデルの極意イミュータブルデータモデルの極意
イミュータブルデータモデルの極意Yoshitaka Kawashima
 

What's hot (20)

ドメインロジックに集中せよ 〜ドメイン駆動設計 powered by Spring
ドメインロジックに集中せよ 〜ドメイン駆動設計 powered by Springドメインロジックに集中せよ 〜ドメイン駆動設計 powered by Spring
ドメインロジックに集中せよ 〜ドメイン駆動設計 powered by Spring
 
正しいものを正しく作る塾-設計コース
正しいものを正しく作る塾-設計コース正しいものを正しく作る塾-設計コース
正しいものを正しく作る塾-設計コース
 
ドメイン駆動設計の正しい歩き方
ドメイン駆動設計の正しい歩き方ドメイン駆動設計の正しい歩き方
ドメイン駆動設計の正しい歩き方
 
ドメイン駆動設計に15年取り組んでわかったこと
ドメイン駆動設計に15年取り組んでわかったことドメイン駆動設計に15年取り組んでわかったこと
ドメイン駆動設計に15年取り組んでわかったこと
 
マイクロサービス 4つの分割アプローチ
マイクロサービス 4つの分割アプローチマイクロサービス 4つの分割アプローチ
マイクロサービス 4つの分割アプローチ
 
ドメイン駆動設計のためのオブジェクト指向入門
ドメイン駆動設計のためのオブジェクト指向入門ドメイン駆動設計のためのオブジェクト指向入門
ドメイン駆動設計のためのオブジェクト指向入門
 
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
 
ドメイン駆動設計 分析しながら設計する
ドメイン駆動設計 分析しながら設計するドメイン駆動設計 分析しながら設計する
ドメイン駆動設計 分析しながら設計する
 
40歳過ぎてもエンジニアでいるためにやっていること
40歳過ぎてもエンジニアでいるためにやっていること40歳過ぎてもエンジニアでいるためにやっていること
40歳過ぎてもエンジニアでいるためにやっていること
 
脱RESTful API設計の提案
脱RESTful API設計の提案脱RESTful API設計の提案
脱RESTful API設計の提案
 
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
 
ドメイン駆動設計とは何か 【入門編】
ドメイン駆動設計とは何か 【入門編】ドメイン駆動設計とは何か 【入門編】
ドメイン駆動設計とは何か 【入門編】
 
マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!
 
ドメイン駆動設計 本格入門
ドメイン駆動設計 本格入門ドメイン駆動設計 本格入門
ドメイン駆動設計 本格入門
 
3週連続DDDその1 ドメイン駆動設計の基本を理解する
3週連続DDDその1  ドメイン駆動設計の基本を理解する3週連続DDDその1  ドメイン駆動設計の基本を理解する
3週連続DDDその1 ドメイン駆動設計の基本を理解する
 
3週連続DDDその2 深いモデルの探求(ドメイン駆動設計 第3部)
3週連続DDDその2  深いモデルの探求(ドメイン駆動設計 第3部)3週連続DDDその2  深いモデルの探求(ドメイン駆動設計 第3部)
3週連続DDDその2 深いモデルの探求(ドメイン駆動設計 第3部)
 
ドメイン駆動で開発する ラフスケッチから実装まで
ドメイン駆動で開発する ラフスケッチから実装までドメイン駆動で開発する ラフスケッチから実装まで
ドメイン駆動で開発する ラフスケッチから実装まで
 
DockerコンテナでGitを使う
DockerコンテナでGitを使うDockerコンテナでGitを使う
DockerコンテナでGitを使う
 
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
 
イミュータブルデータモデルの極意
イミュータブルデータモデルの極意イミュータブルデータモデルの極意
イミュータブルデータモデルの極意
 

Viewers also liked

Scala/Scrum/DDD 困ったこと50連発ガトリングトーク!!
Scala/Scrum/DDD 困ったこと50連発ガトリングトーク!!Scala/Scrum/DDD 困ったこと50連発ガトリングトーク!!
Scala/Scrum/DDD 困ったこと50連発ガトリングトーク!!Yasuyuki Sugitani
 
Androidアプリ開発にクリーンアーキテクチャを取り入れよう
Androidアプリ開発にクリーンアーキテクチャを取り入れようAndroidアプリ開発にクリーンアーキテクチャを取り入れよう
Androidアプリ開発にクリーンアーキテクチャを取り入れよう kan-notice
 
Scala × DDD × 弊社実践例
Scala × DDD × 弊社実践例Scala × DDD × 弊社実践例
Scala × DDD × 弊社実践例侑亮 原田
 
某S社のddd(メイリオ)
某S社のddd(メイリオ)某S社のddd(メイリオ)
某S社のddd(メイリオ)kumake
 
5分でわかるクリーンアーキテクチャ
5分でわかるクリーンアーキテクチャ5分でわかるクリーンアーキテクチャ
5分でわかるクリーンアーキテクチャKenji Tanaka
 
福岡DDD勉強会vol.1
福岡DDD勉強会vol.1福岡DDD勉強会vol.1
福岡DDD勉強会vol.1Yunosuke Taga
 
社内勉強会で読んだ本とか
社内勉強会で読んだ本とか社内勉強会で読んだ本とか
社内勉強会で読んだ本とかShinsuke Kuroki
 
DDDをScrumで廻す あるいは ScrumをDDDで廻す
DDDをScrumで廻す あるいは ScrumをDDDで廻す DDDをScrumで廻す あるいは ScrumをDDDで廻す
DDDをScrumで廻す あるいは ScrumをDDDで廻す Kiro Harada
 
デザパタ勉強会(上級編)
デザパタ勉強会(上級編)デザパタ勉強会(上級編)
デザパタ勉強会(上級編)kaz3391
 
ぐるぐるDDD(ドメイン駆動設計)に参加してみました
ぐるぐるDDD(ドメイン駆動設計)に参加してみましたぐるぐるDDD(ドメイン駆動設計)に参加してみました
ぐるぐるDDD(ドメイン駆動設計)に参加してみましたTakuya Kawabe
 
戦略思考 〜考えろ、さすれば道は開かれん〜
戦略思考 〜考えろ、さすれば道は開かれん〜戦略思考 〜考えろ、さすれば道は開かれん〜
戦略思考 〜考えろ、さすれば道は開かれん〜Kentaro Takasaki
 
「実践ドメイン駆動設計」社内読書会まとめ ~IDDD本難民に捧げる1章から7章~
「実践ドメイン駆動設計」社内読書会まとめ ~IDDD本難民に捧げる1章から7章~「実践ドメイン駆動設計」社内読書会まとめ ~IDDD本難民に捧げる1章から7章~
「実践ドメイン駆動設計」社内読書会まとめ ~IDDD本難民に捧げる1章から7章~A AOKI
 
Septeni × Scala 勉強会 第2回 - 会社紹介
Septeni × Scala 勉強会 第2回 - 会社紹介Septeni × Scala 勉強会 第2回 - 会社紹介
Septeni × Scala 勉強会 第2回 - 会社紹介Yasuyuki Sugitani
 
2016 ScalaMatsuri LT / セプテーニ・オリジナルの文化と歴史
2016 ScalaMatsuri LT / セプテーニ・オリジナルの文化と歴史2016 ScalaMatsuri LT / セプテーニ・オリジナルの文化と歴史
2016 ScalaMatsuri LT / セプテーニ・オリジナルの文化と歴史Yasuyuki Sugitani
 
シュードキーニートフリーク
シュードキーニートフリークシュードキーニートフリーク
シュードキーニートフリークAkira Suenami
 
Strings and Characters in Swift
Strings and Characters in SwiftStrings and Characters in Swift
Strings and Characters in SwiftGoichi Hirakawa
 
JavaOne 2016 Java SE Feedback #jjug #j1jp
JavaOne 2016 Java SE Feedback #jjug #j1jpJavaOne 2016 Java SE Feedback #jjug #j1jp
JavaOne 2016 Java SE Feedback #jjug #j1jpYuji Kubota
 
Value objects in JS - an ES7 work in progress
Value objects in JS - an ES7 work in progressValue objects in JS - an ES7 work in progress
Value objects in JS - an ES7 work in progressBrendan Eich
 

Viewers also liked (20)

Ddd × 新人教育
Ddd × 新人教育Ddd × 新人教育
Ddd × 新人教育
 
Scala/Scrum/DDD 困ったこと50連発ガトリングトーク!!
Scala/Scrum/DDD 困ったこと50連発ガトリングトーク!!Scala/Scrum/DDD 困ったこと50連発ガトリングトーク!!
Scala/Scrum/DDD 困ったこと50連発ガトリングトーク!!
 
Androidアプリ開発にクリーンアーキテクチャを取り入れよう
Androidアプリ開発にクリーンアーキテクチャを取り入れようAndroidアプリ開発にクリーンアーキテクチャを取り入れよう
Androidアプリ開発にクリーンアーキテクチャを取り入れよう
 
Scala × DDD × 弊社実践例
Scala × DDD × 弊社実践例Scala × DDD × 弊社実践例
Scala × DDD × 弊社実践例
 
某S社のddd(メイリオ)
某S社のddd(メイリオ)某S社のddd(メイリオ)
某S社のddd(メイリオ)
 
5分でわかるクリーンアーキテクチャ
5分でわかるクリーンアーキテクチャ5分でわかるクリーンアーキテクチャ
5分でわかるクリーンアーキテクチャ
 
福岡DDD勉強会vol.1
福岡DDD勉強会vol.1福岡DDD勉強会vol.1
福岡DDD勉強会vol.1
 
社内勉強会で読んだ本とか
社内勉強会で読んだ本とか社内勉強会で読んだ本とか
社内勉強会で読んだ本とか
 
DDDをScrumで廻す あるいは ScrumをDDDで廻す
DDDをScrumで廻す あるいは ScrumをDDDで廻す DDDをScrumで廻す あるいは ScrumをDDDで廻す
DDDをScrumで廻す あるいは ScrumをDDDで廻す
 
デザパタ勉強会(上級編)
デザパタ勉強会(上級編)デザパタ勉強会(上級編)
デザパタ勉強会(上級編)
 
ぐるぐるDDD(ドメイン駆動設計)に参加してみました
ぐるぐるDDD(ドメイン駆動設計)に参加してみましたぐるぐるDDD(ドメイン駆動設計)に参加してみました
ぐるぐるDDD(ドメイン駆動設計)に参加してみました
 
戦略思考 〜考えろ、さすれば道は開かれん〜
戦略思考 〜考えろ、さすれば道は開かれん〜戦略思考 〜考えろ、さすれば道は開かれん〜
戦略思考 〜考えろ、さすれば道は開かれん〜
 
「実践ドメイン駆動設計」社内読書会まとめ ~IDDD本難民に捧げる1章から7章~
「実践ドメイン駆動設計」社内読書会まとめ ~IDDD本難民に捧げる1章から7章~「実践ドメイン駆動設計」社内読書会まとめ ~IDDD本難民に捧げる1章から7章~
「実践ドメイン駆動設計」社内読書会まとめ ~IDDD本難民に捧げる1章から7章~
 
Septeni × Scala 勉強会 第2回 - 会社紹介
Septeni × Scala 勉強会 第2回 - 会社紹介Septeni × Scala 勉強会 第2回 - 会社紹介
Septeni × Scala 勉強会 第2回 - 会社紹介
 
2016 ScalaMatsuri LT / セプテーニ・オリジナルの文化と歴史
2016 ScalaMatsuri LT / セプテーニ・オリジナルの文化と歴史2016 ScalaMatsuri LT / セプテーニ・オリジナルの文化と歴史
2016 ScalaMatsuri LT / セプテーニ・オリジナルの文化と歴史
 
シュードキーニートフリーク
シュードキーニートフリークシュードキーニートフリーク
シュードキーニートフリーク
 
Strings and Characters in Swift
Strings and Characters in SwiftStrings and Characters in Swift
Strings and Characters in Swift
 
Actor&stm
Actor&stmActor&stm
Actor&stm
 
JavaOne 2016 Java SE Feedback #jjug #j1jp
JavaOne 2016 Java SE Feedback #jjug #j1jpJavaOne 2016 Java SE Feedback #jjug #j1jp
JavaOne 2016 Java SE Feedback #jjug #j1jp
 
Value objects in JS - an ES7 work in progress
Value objects in JS - an ES7 work in progressValue objects in JS - an ES7 work in progress
Value objects in JS - an ES7 work in progress
 

Similar to GANMA!でDDDをやってみてから1年くらい経った

Implementing Domain-Driven Design: Part 1
Implementing Domain-Driven Design: Part 1Implementing Domain-Driven Design: Part 1
Implementing Domain-Driven Design: Part 1Atsushi Kambara
 
Halide, Darkroom - 並列化のためのソフトウェア・研究
Halide, Darkroom - 並列化のためのソフトウェア・研究Halide, Darkroom - 並列化のためのソフトウェア・研究
Halide, Darkroom - 並列化のためのソフトウェア・研究Yuichi Yoshida
 
Scalaと過ごした5ヶ月間
Scalaと過ごした5ヶ月間Scalaと過ごした5ヶ月間
Scalaと過ごした5ヶ月間Haruki Okada
 
マルチデバイス時代の高速化
マルチデバイス時代の高速化マルチデバイス時代の高速化
マルチデバイス時代の高速化Shin Takeuchi
 
ゴルフゲームでUnityの限界を突破する方法
ゴルフゲームでUnityの限界を突破する方法ゴルフゲームでUnityの限界を突破する方法
ゴルフゲームでUnityの限界を突破する方法Nohina Hidenari
 
MySQLやSSDとかの話・前編
MySQLやSSDとかの話・前編MySQLやSSDとかの話・前編
MySQLやSSDとかの話・前編gree_tech
 
circleci_meetup_tmasuyama_20201026
circleci_meetup_tmasuyama_20201026circleci_meetup_tmasuyama_20201026
circleci_meetup_tmasuyama_20201026t masuyama
 
EmbulkとDigdagとデータ分析基盤と
EmbulkとDigdagとデータ分析基盤とEmbulkとDigdagとデータ分析基盤と
EmbulkとDigdagとデータ分析基盤とToru Takahashi
 
EmbulkとDigdagとデータ分析基盤と
EmbulkとDigdagとデータ分析基盤とEmbulkとDigdagとデータ分析基盤と
EmbulkとDigdagとデータ分析基盤とToru Takahashi
 
ドメイン駆動設計(DDD)導入判定チェックシート
ドメイン駆動設計(DDD)導入判定チェックシートドメイン駆動設計(DDD)導入判定チェックシート
ドメイン駆動設計(DDD)導入判定チェックシートTakuya Kawabe
 
2016 Android × Scala @ScalaMatsuri2016
2016 Android × Scala @ScalaMatsuri20162016 Android × Scala @ScalaMatsuri2016
2016 Android × Scala @ScalaMatsuri2016Yasuyuki Sugitani
 
次世代エンタープライズの開発環境をライブで読み解く
次世代エンタープライズの開発環境をライブで読み解く次世代エンタープライズの開発環境をライブで読み解く
次世代エンタープライズの開発環境をライブで読み解くShin Takeuchi
 
SIG-Audio準備会#2 オーディオツールの作り方 超入門編
SIG-Audio準備会#2 オーディオツールの作り方 超入門編SIG-Audio準備会#2 オーディオツールの作り方 超入門編
SIG-Audio準備会#2 オーディオツールの作り方 超入門編Takafumi Inamori
 
現場で使えるDynamoDBと冪等デザインパターン
現場で使えるDynamoDBと冪等デザインパターン現場で使えるDynamoDBと冪等デザインパターン
現場で使えるDynamoDBと冪等デザインパターンcmaraiyusuke
 
Chainer でのプロファイリングをちょっと楽にする話
Chainer でのプロファイリングをちょっと楽にする話Chainer でのプロファイリングをちょっと楽にする話
Chainer でのプロファイリングをちょっと楽にする話NVIDIA Japan
 
Learning spaerk chapter03
Learning spaerk chapter03Learning spaerk chapter03
Learning spaerk chapter03Akimitsu Takagi
 
[141004] cedec 2014 참관기 & 강연 리뷰 #1
[141004] cedec 2014 참관기 & 강연 리뷰 #1[141004] cedec 2014 참관기 & 강연 리뷰 #1
[141004] cedec 2014 참관기 & 강연 리뷰 #1MinGeun Park
 

Similar to GANMA!でDDDをやってみてから1年くらい経った (20)

Implementing Domain-Driven Design: Part 1
Implementing Domain-Driven Design: Part 1Implementing Domain-Driven Design: Part 1
Implementing Domain-Driven Design: Part 1
 
Code Anything
Code AnythingCode Anything
Code Anything
 
Halide, Darkroom - 並列化のためのソフトウェア・研究
Halide, Darkroom - 並列化のためのソフトウェア・研究Halide, Darkroom - 並列化のためのソフトウェア・研究
Halide, Darkroom - 並列化のためのソフトウェア・研究
 
Scalaと過ごした5ヶ月間
Scalaと過ごした5ヶ月間Scalaと過ごした5ヶ月間
Scalaと過ごした5ヶ月間
 
マルチデバイス時代の高速化
マルチデバイス時代の高速化マルチデバイス時代の高速化
マルチデバイス時代の高速化
 
ゴルフゲームでUnityの限界を突破する方法
ゴルフゲームでUnityの限界を突破する方法ゴルフゲームでUnityの限界を突破する方法
ゴルフゲームでUnityの限界を突破する方法
 
MySQLやSSDとかの話・前編
MySQLやSSDとかの話・前編MySQLやSSDとかの話・前編
MySQLやSSDとかの話・前編
 
0621 ndk game
0621 ndk game0621 ndk game
0621 ndk game
 
circleci_meetup_tmasuyama_20201026
circleci_meetup_tmasuyama_20201026circleci_meetup_tmasuyama_20201026
circleci_meetup_tmasuyama_20201026
 
EmbulkとDigdagとデータ分析基盤と
EmbulkとDigdagとデータ分析基盤とEmbulkとDigdagとデータ分析基盤と
EmbulkとDigdagとデータ分析基盤と
 
EmbulkとDigdagとデータ分析基盤と
EmbulkとDigdagとデータ分析基盤とEmbulkとDigdagとデータ分析基盤と
EmbulkとDigdagとデータ分析基盤と
 
ドメイン駆動設計(DDD)導入判定チェックシート
ドメイン駆動設計(DDD)導入判定チェックシートドメイン駆動設計(DDD)導入判定チェックシート
ドメイン駆動設計(DDD)導入判定チェックシート
 
Start-padrino
Start-padrinoStart-padrino
Start-padrino
 
2016 Android × Scala @ScalaMatsuri2016
2016 Android × Scala @ScalaMatsuri20162016 Android × Scala @ScalaMatsuri2016
2016 Android × Scala @ScalaMatsuri2016
 
次世代エンタープライズの開発環境をライブで読み解く
次世代エンタープライズの開発環境をライブで読み解く次世代エンタープライズの開発環境をライブで読み解く
次世代エンタープライズの開発環境をライブで読み解く
 
SIG-Audio準備会#2 オーディオツールの作り方 超入門編
SIG-Audio準備会#2 オーディオツールの作り方 超入門編SIG-Audio準備会#2 オーディオツールの作り方 超入門編
SIG-Audio準備会#2 オーディオツールの作り方 超入門編
 
現場で使えるDynamoDBと冪等デザインパターン
現場で使えるDynamoDBと冪等デザインパターン現場で使えるDynamoDBと冪等デザインパターン
現場で使えるDynamoDBと冪等デザインパターン
 
Chainer でのプロファイリングをちょっと楽にする話
Chainer でのプロファイリングをちょっと楽にする話Chainer でのプロファイリングをちょっと楽にする話
Chainer でのプロファイリングをちょっと楽にする話
 
Learning spaerk chapter03
Learning spaerk chapter03Learning spaerk chapter03
Learning spaerk chapter03
 
[141004] cedec 2014 참관기 & 강연 리뷰 #1
[141004] cedec 2014 참관기 & 강연 리뷰 #1[141004] cedec 2014 참관기 & 강연 리뷰 #1
[141004] cedec 2014 참관기 & 강연 리뷰 #1
 

Recently uploaded

論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNetToru Tamaki
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...Toru Tamaki
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略Ryo Sasaki
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A surveyToru Tamaki
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムsugiuralab
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Yuma Ohgami
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものですiPride Co., Ltd.
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Danieldanielhu54
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdftaisei2219
 

Recently uploaded (9)

論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
 

GANMA!でDDDをやってみてから1年くらい経った