Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
DDDやってみたら 実装以前の領域での学びが深かった話
Search
kumaGoro95
October 20, 2023
Programming
8.8k
13
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
DDDやってみたら 実装以前の領域での学びが深かった話
kumaGoro95
October 20, 2023
More Decks by kumaGoro95
See All by kumaGoro95
アジャイルの名を捨ててアジャイルをやる ─アジャイルに忌避感のある現場での“困りごと駆動”の実践─
kumagoro95
0
530
昭和の職場からアジャイルの世界へ
kumagoro95
1
830
要件定義で得た学び・気づき
kumagoro95
4
2.7k
メンバーのわかりませんはチームが成長するチャンス.pdf
kumagoro95
1
470
ふりかえりでふりかえることしかできなかったジュニアチームが、次の打ち手を出せるチームになるのにやったこと
kumagoro95
3
1.6k
Githubのアクティビティ履歴からチームの健康状態を知る(Findy Teams使ってみた)
kumagoro95
0
680
プログラミングで小数計算すると なんで誤差が発生するのか?
kumagoro95
0
320
導入事例を通じて理解するドメイン駆動設計
kumagoro95
0
550
The Assembly ~ directly controlling CPU ~
kumagoro95
0
540
Other Decks in Programming
See All in Programming
Snowflake Openflow Connector利用の勘所 / 20261024developersio2026tokyo-snowflake-openflow
kasacchiful
PRO
0
310
プロジェクトコードをキレイキレイしよう!暗黙的な参照を読み解く静的解析
ostk0069
0
210
조합이폭발하는디자인시스템이걸눈으로도테스트하라고요
giljongyu
0
730
Web3Dライブラリを作ってVue Custom Rendererの仕組みを理解しよう / lets learn vue custom renderer by making 3d library
drumath2237
1
130
Apple Intelligenceとオンデバイス時代の到来
yahir0
0
230
あなたの await、OS まで届いてる? strace で覗く JavaScript の非同期
hasutosasaki
1
2.3k
Vapor Mode でアクセシビリティは 壊れないか検証した話
fuqda
1
330
小さなアプリを作って公開するまで
onozaty
0
140
AI時代のIaC入門 〜なぜインフラをコードで管理したいのか?〜 / Introduction to IaC in the AI Era
akihisaikeda
6
1.4k
S3 TablesのIcebergデータに、AIエージェントからアクセスしてみた / 20261016developersio2026joetsu-accessing-iceberg-in-s3tables-via-agent
kasacchiful
PRO
0
290
AI時代のシニアエンジニアとは
yosuke_furukawa
PRO
15
11k
Performance Optimization With LLMs
xleitix
0
250
Featured
See All Featured
Navigating the moral maze — ethical principles for Al-driven product design
skipperchong
2
680
Being A Developer After 40
akosma
PRO
92
590k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
56
3.5k
Build The Right Thing And Hit Your Dates
maggiecrowley
39
3.5k
The Organizational Zoo: Understanding Human Behavior Agility Through Metaphoric Constructive Conversations (based on the works of Arthur Shelley, Ph.D)
kimpetersen
PRO
0
530
コードの90%をAIが書く世界で何が待っているのか / What awaits us in a world where 90% of the code is written by AI
rkaga
63
48k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
130k
Believing is Seeing
oripsolob
1
270
HTML-Aware ERB: The Path to Reactive Rendering @ RubyCon 2026, Rimini, Italy
marcoroth
5
910
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.9k
Lightning Talk: Beautiful Slides for Beginners
inesmontani
PRO
2
760
[SF Ruby Conf 2025] Rails X
palkan
3
1.5k
Transcript
DDDやってみたら 実装以前の領域での学びが深かった話 くまごろー
くまごろー @kumaGoro_95 ・北海道出身 ・元公務員 ・ホテル運営会社でエンジニアやってます ・来年には北海道に帰る(決意)
3 話したいこと - ドメイン駆動設計(DDD)て何 - 私が参加しているプロジェクト - どんなことがあったか - 学び・気づき
4 ドメイン駆動設計とは(DDD) - ドメインモデル(=業務領域を表現したモデル)をソフトウェアの主役にして - コードとドメインモデルが常に一致した状態を保ち - 開発者とドメインエキスパート(業務をよく知る人)が協力し、イテレーディブにモデル の精度を上げていくことで より価値の高いアプリケーションを生み出していこうとする考え方
参考:「Domain-Driven Designのエッセンス」
5 DDDって... - 値オブジェクト・エンティティ - ドメイン層 - コンテキスト境界 - ユビキタス言語
なんかめっちゃ小難しいイメージ 概念はなんとなく理 解したけど、実際ど んなコードになるの かな? と思っていたら、 職場で実際にやることになった
6 どんなプロジェクトなのか - 自社業務に利用しているシステム群(顧客向け/スタッフ向け)の新規開発 - 今まではビジネス側がやりたいことがシステム制約で出来てなかった - 既存の業務が継続でき、なおかつ今後の業務改善・新しいチャレンジにも対応 できるようなシステムを開発したい -
くまごろーはプラットフォーム的なプロダクトを担当するチームに所属 開発がスタートしたが。。。
7 業務要件整理は終わっていた(はずだった) 一足先に参画していたPM・先輩エンジニアが業務要件を整理していた 業務の枠組はもう整 理できてる 共有するからそれに 適合するようにモデ リングしてみて 仕様はもう決まってるみ たいだから、それにそっ
てモデリングすればい いんだな 多分ドメインエキスパー トにもすぐOKもらえるは ずだから、そしたら実装 だな〜
8 最初のレビュー - ドメインエキスパートにレビューしてもらった - 私が作ったモデルは全然ダメダメだった - 対象業務の表層をなぞっただけで、現実の業務に全く対応出来てなかった - 開発者から又聞きした情報だけでは解像度が低すぎた
「xxの業務にはこう いうパターンもあっ て...」 「この料金構造だと xxx商品の料金情 報が表現出来ない なあ」 「この業務は今のシステ ムがこんな構造だからそ うしてるだけで... 本当はこうしたいんだよ ねえ」 「実は既存システ ムのx機能は、yの 用途に使ってて...」
9 FBループ地獄のはじまり - DDDの定義が頭をよぎった「ドメイン知識を深めながら反復的に深化させていく」 - これを繰り返した - どういう業務があるのかドメインエキスパートに聞く - 業務をUC単位に分けてモデリング
(モブ作業多め) - ドメインエキスパートに見せる - 課題点や新情報が出てくる。話を掘り下げて業務理解を深める 「xxx」には実はこ ういうケースもあっ て... なるほど... 「xxx」というのはzzと いう意味で使われて るんですね 業務用語の意味もこの段階で認 識合わせ かくかくしかじ か その場合ってyyは どういう扱いになる んですか?
10 その結果... - モデルは最初と全然違う姿に - モデルが自然と進化し続ける感じになった - ドメインエキスパート含めたメンバー皆がシステム設計について話し合えるよう になったので、折に触れてFBがくる -
開発者が実装時に課題に気づいてモデルを更新する - 開発メンバーの誰でも実装可能な状態に(後述) - 業務自体にも色々と課題があることがわかってきた
11 見えてきた課題 - 長年やってる会社なので、業務自体に不整合があった - 業務領域と部署の区分けが一致していない(コンテキスト境界がぐちゃぐちゃ) - 既存システムの機能が不親切で、業務担当者が作業フローを魔改造して乗り 切っている(そして、魔改造したフローの上に新しい業務が成り立っている。。) 業務担当者が「システムがこ
うだから」と中ば諦めていた こともわかった... システム設計の視点 で業務を観察するこ とで見えてきたこと
12 見えてきた課題 私たちが作ろうと思ってた仕組みのいくつかは、ビジネス側の課題が解決されないと無 用の長物だった - 開発のマイルストーンを更新して後回しに - それに合わせてモデルも変更。対象箇所を拡張可能な設計にしておいた → 使えない道具を無駄に作ってしまうことを回避できた そもそもの目的はシステムを
作ることじゃなく、新しい価値 を生み出すことだったな
13 実装視点では めちゃくちゃコードが描きやすくなった - 「業務的にこういうことがしたい」を理解できている - どの種類のロジックをどのレイヤーで書くかしっかり区分けされている - 詰まった時、原因が業務要件由来なのかシステム由来なのかがすぐわかる 画面表示に関するロ
ジックはここ DBアクセスなどのシス テム固有のロジック ドメインオブジェクトを 使ってシステムが担当 する仕事の流れを表現 ※あくまで一例 こいつが依存の絶対的頂点 業務ルールは絶対ここに書く
14 この半年での学び・気づき - 解決したい大きな課題があって、そのアプローチとして DDDがあるんだなあ - DDDの「ドメインモデルの反復的な深化」というスタイルは課題の解像度を上げやすい。課題解決 の効果を最大化してくれる (と感じる) -
課題について皆が同じ方向を向いてないと、 DDDを取り入れても効果を発揮仕切れないかも - エンジニアがこの活動に参加することについて - 業務っていうのは千差万別なので、業務内容と現場の課題感を知れていないと良い設計はできな いなと実感 - コードを書く前に課題整理が出来ていると実装が本当に楽 - 多くの業務はシステムに根ざしているので、むしろ開発者の知見も要件定義では必要不可欠なの かも - クライアント(≒ドメインエキスパート)はお客さんではなく一緒に課題解決する仲間 - ビジネスとシステム両輪で活動を進めることで本当にやりたいことができる - 逆にいうと、DDDにはビジネスサイドとの距離の近さが必要かも
ご清聴ありがとうございました! 15