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

RDRA/DDD/Goでモジュラーモノリスのアプリを開発してみた話 / developing a modular monolith application with RDRA DDD Go

RDRA/DDD/Goでモジュラーモノリスのアプリを開発してみた話 / developing a modular monolith application with RDRA DDD Go

Imamoto Hikaru

July 24, 2023
Tweet

More Decks by Imamoto Hikaru

Other Decks in Technology

Transcript

  1. 開発フェーズごとの戦略・アウトプット 要件定義 基本/詳細設計 実装 戦略 アウト プット RDRAを用いた要求分析 ・業務、BUCの洗い出し ・画面、システム機能の洗い出し

    ・要求元との要件合意の迅速化 RDRA資料を利用してDDD ・RDRAの業務分割を前提としたコン テキスト分割 ・RDRAと同じドメイン名 ・コンテキスト単位で設計資料作成 Goでモジュラーモノリス ・コンテキストごとに Go modulesを割 り当て(Workspace Mode使用) ・moduleごとにレイヤードアーキテク チャで実装 RDRAの 各種ダイアグラム コンテキストマップ コンテキストごとの 設計資料 Goプログラム
  2. 開発フェーズごとの戦略・アウトプット 要件定義 基本/詳細設計 実装 戦略 アウト プット RDRAを用いた要求分析 ・業務、BUCの洗い出し ・画面、システム機能の洗い出し

    ・要求元との要件合意の迅速化 RDRA資料を利用してDDD ・RDRAの業務分割を前提としたコン テキスト分割 ・RDRAと同じドメイン名 ・コンテキスト単位で設計資料作成 Goでモジュラーモノリス ・コンテキストごとに Go modulesを割 り当て(Workspace Mode使用) ・moduleごとにレイヤードアーキテク チャで実装 RDRAの 各種ダイアグラム コンテキストマップ コンテキストごとの 設計資料 Goプログラム
  3. RDRAに関する概念①:レイヤー システム価値 役割 具体的な 作業 システムが 「誰にとっての価値を 実現するのか」 を明らかにする 関連するアクター、

    外部システム、 システム化目的等を定義 システム外部環境 システム境界 システム システムが 「どのように使われる のか」 を明らかにする システムと 「どう関わるか」 を明らかにする システムそのものを 表現する 業務、 ビジネスユースケースを洗 い出し、 業務フローや利用ケース を定義する 誰がどのようにシステムを 利用するか (画面・イベント)や システムの処理の単位 (ユースケース)を定義す る システム化する 「情報」と その情報が取り得る 「状態」で システムを明示する 上位 下位 レイヤー名
  4. 上位レイヤーを入力として下位レイヤー作業を実施する システム価値 役割 具体的な 作業 システムが 「誰にとっての価値を 実現するのか」 を明らかにする 関連するアクター、

    外部システム、 システム化目的等を定義 システム外部環境 システム境界 システム システムが 「どのように使われる のか」 を明らかにする システムと 「どう関わるか」 を明らかにする システムそのものを 表現する 業務、 ビジネスユースケースを洗 い出し、 業務フローや利用ケース を定義する 誰がどのようにシステムを 利用するか (画面・イベント)や システムの処理の単位 (ユースケース)を定義す る システム化する 「情報」と その情報が取り得る 「状態」で システムを明示する Input Input Input 上位 下位 レイヤー名
  5. 上位レイヤーは下位レイヤーの「WHY」になっている システム価値 役割 具体的な 作業 システムが 「誰にとっての価値を 実現するのか」 を明らかにする 関連するアクター、

    外部システム、 システム化目的等を定義 システム外部環境 システム境界 システム システムが 「どのように使われる のか」 を明らかにする システムと 「どう関わるか」 を明らかにする システムそのものを 表現する 業務、 ビジネスユースケースを洗 い出し、 業務フローや利用ケース を定義する 誰がどのようにシステムを 利用するか (画面・イベント)や システムの処理の単位 (ユースケース)を定義す る システム化する 「情報」と その情報が取り得る 「状態」で システムを明示する WHY WHY WHY 上位 下位 レイヤー名
  6. • アイコン ◦ レイヤーごとに定義されるモデル • ダイアグラム ◦ レイヤーごと明らかにすべき事柄を 示すための図 •

    例:システムコンテキスト図 ◦ システム価値レイヤーで定義されるダ イアグラム ◦ システムに関わるアクター、外部シス テムをアイコンとして定義する ◦ システム化の目的を認識合わせする RDRAに関する概念②:アイコン・ダイアグラム
  7. 開発フェーズごとの戦略・アウトプット 要件定義 基本/詳細設計 実装 戦略 アウト プット RDRAを用いた要求分析 ・業務、BUCの洗い出し ・画面、システム機能の洗い出し

    ・要求元との要件合意の迅速化 RDRA資料を利用してDDD ・RDRAの業務分割を前提としたコン テキスト分割 ・RDRAと同じドメイン名 ・コンテキスト単位で設計資料作成 Goでモジュラーモノリス ・コンテキストごとに Go modulesを割 り当て(Workspace Mode使用) ・moduleごとにレイヤードアーキテク チャで実装 RDRAの 各種ダイアグラム コンテキストマップ コンテキストごとの 設計資料 Goプログラム
  8. 開発フェーズごとの戦略・アウトプット 要件定義 基本/詳細設計 実装 戦略 アウト プット RDRAを用いた要求分析 ・業務、BUCの洗い出し ・画面、システム機能の洗い出し

    ・要求元との要件合意の迅速化 RDRA資料を利用してDDD ・RDRAの業務分割を前提としたコン テキスト分割 ・RDRAと同じドメイン名 ・コンテキスト単位で設計資料作成 Goでモジュラーモノリス ・コンテキストごとに Go modulesを割 り当て(Workspace Mode使用) ・moduleごとにレイヤードアーキテク チャで実装 RDRAの 各種ダイアグラム コンテキストマップ コンテキストごとの 設計資料 Goプログラム
  9. 実装の基本方針 • コンテキストマップと同じ粒度でGo Moduleを作成することで、モジュラーモ ノリスを実現する ◦ Moduleの名前や依存関係はコンテキストマップを踏襲 ◦ 1つのリポジトリ(モノレポ)で複数Moduleを管理し、同一リポジトリ内のModuleにも依存可能 •

    Moduleごとにレイヤードアーキテクチャ構成にする • コンテキストごとにDBも分割 ◦ PostgreSQLで同一DBクラスタで複数DBを作成 • その他の細かい実装方針は以下のStyleGuideでも公開しています ◦ https://github.com/rakus-public/styleguide/tree/main/go
  10. 交通費・経費精算 システム 勤怠管理システム コールセンター向けCRM システム 問い合わせ管理 システム メールマーケティングサービ ス 販売管理業務

    システム 電子請求書発行・電子保存 システム 社内向け AIチャットボット BtoB SaaSのマルチヒットメーカーとして成長中! 企業の業務の効率化、付加価値化に貢献する複数のサービスを展開!