Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
RDRA, ICONIX, DDDの実践から得た学び
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
hsawaji
September 15, 2023
Programming
5
3.3k
RDRA, ICONIX, DDDの実践から得た学び
2023.09.14
asken withミライトデザインのDDDのはじめ方 DDD x RDRA x ICONIX
https://asken.connpass.com/event/293085/
hsawaji
September 15, 2023
Tweet
Share
More Decks by hsawaji
See All by hsawaji
リアーキテクチャxDDD 1年間の取り組みと進化
hsawaji
1
1k
Other Decks in Programming
See All in Programming
AIで開発はどれくらい加速したのか?AIエージェントによるコード生成を、現場の評価と研究開発の評価の両面からdeep diveしてみる
daisuketakeda
1
2.5k
Rust 製のコードエディタ “Zed” を使ってみた
nearme_tech
PRO
0
210
ノイジーネイバー問題を解決する 公平なキューイング
occhi
0
110
例外処理とどう使い分ける?Result型を使ったエラー設計 #burikaigi
kajitack
16
6.1k
Apache Iceberg V3 and migration to V3
tomtanaka
0
170
16年目のピクシブ百科事典を支える最新の技術基盤 / The Modern Tech Stack Powering Pixiv Encyclopedia in its 16th Year
ahuglajbclajep
5
1k
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
620
Oxlint JS plugins
kazupon
1
1k
要求定義・仕様記述・設計・検証の手引き - 理論から学ぶ明確で統一された成果物定義
orgachem
PRO
1
230
OSSとなったswift-buildで Xcodeのビルドを差し替えられるため 自分でXcodeを直せる時代になっている ダイアモンド問題編
yimajo
3
630
dchart: charts from deck markup
ajstarks
3
1k
IFSによる形状設計/デモシーンの魅力 @ 慶應大学SFC
gam0022
1
310
Featured
See All Featured
How Fast Is Fast Enough? [PerfNow 2025]
tammyeverts
3
460
Amusing Abliteration
ianozsvald
0
110
Tips & Tricks on How to Get Your First Job In Tech
honzajavorek
0
440
Why Our Code Smells
bkeepers
PRO
340
58k
HU Berlin: Industrial-Strength Natural Language Processing with spaCy and Prodigy
inesmontani
PRO
0
230
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
122
21k
Git: the NoSQL Database
bkeepers
PRO
432
66k
Agile Leadership in an Agile Organization
kimpetersen
PRO
0
85
Jamie Indigo - Trashchat’s Guide to Black Boxes: Technical SEO Tactics for LLMs
techseoconnect
PRO
0
65
HDC tutorial
michielstock
1
390
Leveraging LLMs for student feedback in introductory data science courses - posit::conf(2025)
minecr
0
160
Primal Persuasion: How to Engage the Brain for Learning That Lasts
tmiket
0
260
Transcript
© asken.inc RDRA, ICONIX, DDDの実践から得た学び 23/09/14 asken hsawaji
© asken.inc 2 背景 「あすけん」のサービスをリアーキテクチャするために、約5ヶ月間、技術検証を行って きました。 この検証では、既存システムを対象に分析から実装まで一通り行いました。その際、 RDRA, ICONIX, DDDなどの手法を活用して進めてきました。
今回は、各手法をどの用に使ったのか、どのような学びが合ったのかを紹介したいと 思います。
© asken.inc 3 自己紹介 askenでバックエンドエンジニアをやっています。 海外事業部にいたり、医療事業部にいたりして、 今は国内事業部でシステムのリアーキテクチャを推進しています。 askenではずっとPHPを触っていましたが今回のリアーキテクチャからKotlinを触るよ うになりました。 設計とアーキテクチャの勉強中です。
© asken.inc 4 テックブログも書いています PHPからKotlinへ、ドメイン駆動設計を用いたリアーキテクチャへの挑戦 https://tech.asken.inc/entry/2023/08/10/170000 より良い設計にするための勉強会を行いました https://tech.asken.inc/entry/2022/03/30/180000 Slackで「マルチチャンネルゲスト」のGithub通知を改善しました https://tech.asken.inc/entry/2022/10/07/170000
© asken.inc 5 スタート時点の私 RDRA - 「RDRAハンドブック2.0」は読んだ - 用語はざっくりと理解している -
実践した経験はない ICONIX - 「ユースケース駆動開発実践ガイド」は未読 - 用語はいくつか聞いたことがある - 実践した経験はない DDD - 「エヴァンス本」は読んだ - 社内の勉強会で学んだ - 用語と概要くらいはわかる - 実践した経験はない
© asken.inc 6 RDRA
© asken.inc 7 スプレッドシート版のRDRAを使用しました。 このスプレッドシートは、左のシートから順番に埋めていくことで、RDRAの 工程を進めてられるような構成になっています。 スプレッドシート版のRDRA: http://vsa.co.jp/rdratool/rdragraph0.7/RDRAToolDoc.pdf
© asken.inc 8 スプレッドシート版RDRAは下記のようなような流れで使い方を覚えました - ミライトデザインさんのRDRAワークショップの勉強会動画を見る - 参考: 【RDRA ×
AI】AI時代の要件定義ワークショップ【ペチオブ】 - https://www.youtube.com/watch?v=IfEu2KE7_5U - RDRAハンドブック2.0を見直しながらスプレッドシートと対応させていく
© asken.inc 9 食事記録 - ビジネスユースケース(BUC) - アクティビティ - ユースケース(UC)
- 情報 - アクター
© asken.inc 10 食事記録 目的達成までの ユーザの動き システムの動作 ユーザの目的 「情報」はエンティティ 対象ユーザ
左から記載していく
© asken.inc 11 あすけん会員 (アクティビティ) システム (UC) 食品検索 食事記録 分量変更
キーワード 検索を行う 食事記録を 保存する 食事記録の分量を 更新する 食品選択 食事を記録しよう (BUC) データ (情報) 食品マスタ 食事記録 あすけん会員 (アクター)
© asken.inc 12 効果 RDRAではユースケースをアクティビティから分析するので、既存のシステム に影響されることなくユースケースを洗い出すことができた 複数のユースケースが含まれていたControllerも ユースケース毎にクラスが切り出され処理がわかりやすくなった
© asken.inc Controller 13 Controller UseCase1 クラス UseCase2 クラス UseCase1.処理()
UseCase2.処理() UseCase1の処理 UseCase2の処理 UseCase1’の処理 UseCase3の処理 UseCase2’の処理 UseCase3.処理() UseCase3 クラス
© asken.inc 14 概念モデル
© asken.inc 15 設計に入る前に、既存システムの構成要素と各要素の関係を整理するために 「概念モデル」を作ることにしました 合計10時間ほど時間をかけて、全員でワークショップを行なった
© asken.inc 16 ワークショップはMiroを使って下記のような流れで行なった 1. 要素を付箋を書きながら周辺の業務知識を説明していく 2. 疑問点は都度質問を受けて付箋を使って説明をしていく 3. モデリングの観点で議論しながら付箋を修正していく
© asken.inc 17
© asken.inc 18 効果 - システムが「どうあるべきか」の共通認識が持てた - 既存システムがどうなっているかではなく「どうあるべきか」話すことができた - ドメイン知識の伝達ができた
- 概念に関連する知識を網羅的に説明できた - 質問を受けることで「暗黙的な知識」も説明できた - システムの複雑な箇所が可視化された - システムの複雑な所に対して検証を行うことができた - 概念と説明を同じ資料にまとめたので後で参照しやすくなった - 質問などで前提を説明する必要がなくなった - ドメインエキスパートとも同じ資料で会話ができた - 用語と関連性の情報なのでエンジニア以外も理解がしやすい
© asken.inc 19 チームで「概念モデル」を一緒に作ることにより素早く共通認識を作る事がで きた、出来上がったもと同じくらい過程も大切だと感じた このワークショップは、その後の開発をスムーズに行うために効果的だった
© asken.inc 20 ICONIX / ユースケース記述
© asken.inc 21 RDRAで洗い出したユースケースに対して、ユースケース記述をつくる ユースケース記述は、ユーザの操作とシステムの処理を数行で記載する
© asken.inc 22 ユーザの動作と システムの処理 代替コースは途中で 処理が終了するもの
© asken.inc 23 振る舞い モデルに必要な用語 ドメインモデルに反映 ドメインモデルに反映
© asken.inc 24 ユースケースを具体的に記述することで、見えていなかった概念が見えてくる それをドメインモデルに反映することで良いモデルにアップデートできる 必要な振る舞いがわかることで、クラス設計の足がかりになる 効果
© asken.inc 25 DDD (クラス設計 ~ 実装)
© asken.inc 26 分析を元に設計する 概念モデル ドメイン モデル ユースケース 記述 クラスの
分け方 クラスの 振る舞い
© asken.inc 27 設計を元に実装する 概念モデル ドメイン モデル ユースケース 記述 クラスの
分け方 クラスの 振る舞い ソースコード 実装
© asken.inc 28 実装の結果でモデルを更新する 概念モデル ドメイン モデル ユースケース 記述 クラスの
分け方 クラスの 振る舞い ソースコード 実装 フィードバック
© asken.inc 29 実装中に得られる情報 - 実装することで得られた知識 - 新しく思いついたアイデア - モデルの欠陥
(実装できない・情報が取れない) 実装を進めていくと、ドメインモデルがどんどん変わっていく 実装しながらドメインモデルも洗練していく アイデアを素早く確認するためにドメインモデルを使用する
© asken.inc 30 DDDを使うメリット - 実装からドメインモデルにフィードバックをするメリット - ドメインモデルの検証を実装で行なう - 実装することで、ドメインモデルの矛盾点や欠陥が明らかになる
- ドメインモデルを使うメリット - 設計の良し悪しはドメインモデルで全体を見たほうが分かりやすい - 視覚的に分かりやすいので、設計の議論をする際に共通認識を取りやすい - 簡単に変更できるので、レビューと修正がしやすい
© asken.inc 31 まとめ 今回の技術検証では RDRA、ICONIX、DDDを1つ1つ丁寧に行うことで、それぞ れの成果物が実装に繋がっている感覚を得ることができた 概念モデルは、素早く共通認識を作ることができ、非常に有効なものであった その概念モデルからドメインモデルを作るので、認識のズレが少なく設計の議 論ができたと感じている
© asken.inc 32 成果物のつながりのモデル
© asken.inc 33 スタート時点の私 RDRA - 「RDRAハンドブック2.0」は読んだ - 用語はざっくりと理解している -
実践した経験はない ICONIX - 「ユースケース駆動開発実践ガイド」は読んでいない - 用語はいくつか聞いたことがある - 実践した経験はない DDD - 「エヴァンス本」は読んだ - 社内の勉強会で学んだ - 用語と概要くらいはわかる - 実践した経験はない
© asken.inc 34 今の私 RDRA - RDRAの各要素の意味を理解した - 業務フローを意識して RDRAで分析できるようになった
- 既存システムに影響されないユースケースの分析ができるようになった ICONIX - ユースケース記述とモデルの関係性を理解した - ユースケース記述を設計に繋げられるようになった DDD - モデルと実装のフィードバックループの利点を理解した - ドメインモデルを中心とした開発を実践できるようになった
© asken.inc 35 この5ヶ月間で業務をモデル化してソースコードで検証する方法を学ぶことが出 来ました。 これらの方法を使って、リアーキテクチャを確実に前に進められるようになっ たと思います。 まだまだ勉強中ですが、頑張っていきます。
© asken.inc 36 ご清聴ありがとうございました