Upgrade to Pro — share decks privately, control downloads, hide ads and more …

RDRA, ICONIX, DDDの実践から得た学び

hsawaji
September 15, 2023

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

Other Decks in Programming

Transcript

  1. © asken.inc
    RDRA, ICONIX, DDDの実践から得た学び
    23/09/14
    asken hsawaji

    View Slide

  2. © asken.inc 2
    背景
    「あすけん」のサービスをリアーキテクチャするために、約5ヶ月間、技術検証を行って
    きました。
    この検証では、既存システムを対象に分析から実装まで一通り行いました。その際、
    RDRA, ICONIX, DDDなどの手法を活用して進めてきました。
    今回は、各手法をどの用に使ったのか、どのような学びが合ったのかを紹介したいと
    思います。

    View Slide

  3. © asken.inc 3
    自己紹介
    askenでバックエンドエンジニアをやっています。
    海外事業部にいたり、医療事業部にいたりして、
    今は国内事業部でシステムのリアーキテクチャを推進しています。
    askenではずっとPHPを触っていましたが今回のリアーキテクチャからKotlinを触るよ
    うになりました。
    設計とアーキテクチャの勉強中です。

    View Slide

  4. © 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

    View Slide

  5. © asken.inc 5
    スタート時点の私
    RDRA
    - 「RDRAハンドブック2.0」は読んだ
    - 用語はざっくりと理解している
    - 実践した経験はない
    ICONIX
    - 「ユースケース駆動開発実践ガイド」は未読
    - 用語はいくつか聞いたことがある
    - 実践した経験はない
    DDD
    - 「エヴァンス本」は読んだ
    - 社内の勉強会で学んだ
    - 用語と概要くらいはわかる
    - 実践した経験はない

    View Slide

  6. © asken.inc 6
    RDRA

    View Slide

  7. © asken.inc 7
    スプレッドシート版のRDRAを使用しました。
    このスプレッドシートは、左のシートから順番に埋めていくことで、RDRAの
    工程を進めてられるような構成になっています。
    スプレッドシート版のRDRA:
    http://vsa.co.jp/rdratool/rdragraph0.7/RDRAToolDoc.pdf

    View Slide

  8. © asken.inc 8
    スプレッドシート版RDRAは下記のようなような流れで使い方を覚えました
    - ミライトデザインさんのRDRAワークショップの勉強会動画を見る
    - 参考: 【RDRA × AI】AI時代の要件定義ワークショップ【ペチオブ】
    - https://www.youtube.com/watch?v=IfEu2KE7_5U
    - RDRAハンドブック2.0を見直しながらスプレッドシートと対応させていく

    View Slide

  9. © asken.inc 9
    食事記録
    - ビジネスユースケース(BUC)
    - アクティビティ
    - ユースケース(UC)
    - 情報
    - アクター

    View Slide

  10. © asken.inc 10
    食事記録
    目的達成までの
    ユーザの動き
    システムの動作
    ユーザの目的 「情報」はエンティティ 対象ユーザ
    左から記載していく

    View Slide

  11. © asken.inc 11
    あすけん会員
    (アクティビティ)
    システム
    (UC)
    食品検索
    食事記録
    分量変更
    キーワード
    検索を行う
    食事記録を
    保存する
    食事記録の分量を
    更新する
    食品選択
    食事を記録しよう
    (BUC)
    データ
    (情報)
    食品マスタ
    食事記録
    あすけん会員
    (アクター)

    View Slide

  12. © asken.inc 12
    効果
    RDRAではユースケースをアクティビティから分析するので、既存のシステム
    に影響されることなくユースケースを洗い出すことができた
    複数のユースケースが含まれていたControllerも
    ユースケース毎にクラスが切り出され処理がわかりやすくなった

    View Slide

  13. © asken.inc
    Controller
    13
    Controller
    UseCase1 クラス
    UseCase2 クラス
    UseCase1.処理()
    UseCase2.処理()
    UseCase1の処理
    UseCase2の処理
    UseCase1’の処理
    UseCase3の処理
    UseCase2’の処理
    UseCase3.処理() UseCase3 クラス

    View Slide

  14. © asken.inc 14
    概念モデル

    View Slide

  15. © asken.inc 15
    設計に入る前に、既存システムの構成要素と各要素の関係を整理するために
    「概念モデル」を作ることにしました
    合計10時間ほど時間をかけて、全員でワークショップを行なった

    View Slide

  16. © asken.inc 16
    ワークショップはMiroを使って下記のような流れで行なった
    1. 要素を付箋を書きながら周辺の業務知識を説明していく
    2. 疑問点は都度質問を受けて付箋を使って説明をしていく
    3. モデリングの観点で議論しながら付箋を修正していく

    View Slide

  17. © asken.inc 17

    View Slide

  18. © asken.inc 18
    効果
    - システムが「どうあるべきか」の共通認識が持てた
    - 既存システムがどうなっているかではなく「どうあるべきか」話すことができた
    - ドメイン知識の伝達ができた
    - 概念に関連する知識を網羅的に説明できた
    - 質問を受けることで「暗黙的な知識」も説明できた
    - システムの複雑な箇所が可視化された
    - システムの複雑な所に対して検証を行うことができた
    - 概念と説明を同じ資料にまとめたので後で参照しやすくなった
    - 質問などで前提を説明する必要がなくなった
    - ドメインエキスパートとも同じ資料で会話ができた
    - 用語と関連性の情報なのでエンジニア以外も理解がしやすい

    View Slide

  19. © asken.inc 19
    チームで「概念モデル」を一緒に作ることにより素早く共通認識を作る事がで
    きた、出来上がったもと同じくらい過程も大切だと感じた
    このワークショップは、その後の開発をスムーズに行うために効果的だった

    View Slide

  20. © asken.inc 20
    ICONIX / ユースケース記述

    View Slide

  21. © asken.inc 21
    RDRAで洗い出したユースケースに対して、ユースケース記述をつくる
    ユースケース記述は、ユーザの操作とシステムの処理を数行で記載する

    View Slide

  22. © asken.inc 22
    ユーザの動作と
    システムの処理
    代替コースは途中で
    処理が終了するもの

    View Slide

  23. © asken.inc 23
    振る舞い
    モデルに必要な用語 ドメインモデルに反映
    ドメインモデルに反映

    View Slide

  24. © asken.inc 24
    ユースケースを具体的に記述することで、見えていなかった概念が見えてくる
    それをドメインモデルに反映することで良いモデルにアップデートできる
    必要な振る舞いがわかることで、クラス設計の足がかりになる
    効果

    View Slide

  25. © asken.inc 25
    DDD (クラス設計 ~ 実装)

    View Slide

  26. © asken.inc 26
    分析を元に設計する
    概念モデル
    ドメイン
    モデル
    ユースケース
    記述
    クラスの
    分け方
    クラスの
    振る舞い

    View Slide

  27. © asken.inc 27
    設計を元に実装する
    概念モデル
    ドメイン
    モデル
    ユースケース
    記述
    クラスの
    分け方
    クラスの
    振る舞い
    ソースコード
    実装

    View Slide

  28. © asken.inc 28
    実装の結果でモデルを更新する
    概念モデル
    ドメイン
    モデル
    ユースケース
    記述
    クラスの
    分け方
    クラスの
    振る舞い
    ソースコード
    実装
    フィードバック

    View Slide

  29. © asken.inc 29
    実装中に得られる情報
    - 実装することで得られた知識
    - 新しく思いついたアイデア
    - モデルの欠陥 (実装できない・情報が取れない)
    実装を進めていくと、ドメインモデルがどんどん変わっていく
    実装しながらドメインモデルも洗練していく
    アイデアを素早く確認するためにドメインモデルを使用する

    View Slide

  30. © asken.inc 30
    DDDを使うメリット
    - 実装からドメインモデルにフィードバックをするメリット
    - ドメインモデルの検証を実装で行なう
    - 実装することで、ドメインモデルの矛盾点や欠陥が明らかになる
    - ドメインモデルを使うメリット
    - 設計の良し悪しはドメインモデルで全体を見たほうが分かりやすい
    - 視覚的に分かりやすいので、設計の議論をする際に共通認識を取りやすい
    - 簡単に変更できるので、レビューと修正がしやすい

    View Slide

  31. © asken.inc 31
    まとめ
    今回の技術検証では RDRA、ICONIX、DDDを1つ1つ丁寧に行うことで、それぞ
    れの成果物が実装に繋がっている感覚を得ることができた
    概念モデルは、素早く共通認識を作ることができ、非常に有効なものであった
    その概念モデルからドメインモデルを作るので、認識のズレが少なく設計の議
    論ができたと感じている

    View Slide

  32. © asken.inc 32
    成果物のつながりのモデル

    View Slide

  33. © asken.inc 33
    スタート時点の私
    RDRA
    - 「RDRAハンドブック2.0」は読んだ
    - 用語はざっくりと理解している
    - 実践した経験はない
    ICONIX
    - 「ユースケース駆動開発実践ガイド」は読んでいない
    - 用語はいくつか聞いたことがある
    - 実践した経験はない
    DDD
    - 「エヴァンス本」は読んだ
    - 社内の勉強会で学んだ
    - 用語と概要くらいはわかる
    - 実践した経験はない

    View Slide

  34. © asken.inc 34
    今の私
    RDRA
    - RDRAの各要素の意味を理解した
    - 業務フローを意識して RDRAで分析できるようになった
    - 既存システムに影響されないユースケースの分析ができるようになった
    ICONIX
    - ユースケース記述とモデルの関係性を理解した
    - ユースケース記述を設計に繋げられるようになった
    DDD
    - モデルと実装のフィードバックループの利点を理解した
    - ドメインモデルを中心とした開発を実践できるようになった

    View Slide

  35. © asken.inc 35
    この5ヶ月間で業務をモデル化してソースコードで検証する方法を学ぶことが出
    来ました。
    これらの方法を使って、リアーキテクチャを確実に前に進められるようになっ
    たと思います。
    まだまだ勉強中ですが、頑張っていきます。

    View Slide

  36. © asken.inc 36
    ご清聴ありがとうございました

    View Slide