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

AI時代 DDDやってて良かったこと

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
Avatar for Suzu Ito Suzu Ito
August 19, 2026
1k

AI時代 DDDやってて良かったこと

Avatar for Suzu Ito

Suzu Ito

August 19, 2026

Transcript

  1. サービス概要 カウシェ SNSのように 毎⽇開きたくなるECアプリ ダウンロード 累 計 700万 突 破

    ※2026年7⽉時点 GMV DAU 35 倍 81 倍 ※FY23.8⽉→FY26.5⽉⽐較 ※FY23.8⽉→FY26.5⽉⽐較 売上総利益 売上総利益/⼈ 411 倍 1.6 億 ※FY23.8⽉→FY26.5⽉⽐較 ※FY26.5⽉速報値を年換算
  2. DDDをどのように実践しているか 開発の流れ • • • • • • • •

    • • PRD(1つの機能、施策)が共有される(開発スタート!) 簡易版イベントストーミング ドメインモデル構築 ドメインモデル実装(Goのソースコード) Design Docの作成 実装計画の作成(AIにコードを書かせるための⼿順書) AIがコードを書く AIがレビューする QA リリース
  3. ドメインモデル実装 モデルを表現する構造体 モデルの振る舞いを表現する関数 ルール レポジトリインターフェース もドメイン層 ドメインモデル実装は ⼈間が⼿厚くレビュー // ユーザーのレベルと経験値

    type UserLevel struct { UserID string // ユーザーID Level Level // レベル Exp Exp // 経験値 } // 経験値を獲得、場合によってはレベルアップ、経験値獲得の履歴を返す func(s *UserLevel) GainExp(exp Exp, rule LevelUpRule) History // レベルアップのルール type LevelUpRule struct { Steps []LevelUpStep } type LevelUpStep struct { Level Level // レベル RequiredTotal Exp // 必要累計経験値 } // 永続化を担うレポジトリー type Repository interface { GetUserLevel(uid string) (UserLevel, error) PutUserLevel(uid string, lv UserLevel) error PutHistory(hist History) error }
  4. 上位レイヤーではCQRS(‧‧‧を⽬指してる) domain/ farmlevel/*.go plants/*.go … CommandとQueryを完全に分離 (‧‧‧を⽬指しています) command/*.go なぜこうする? readmodel/

    farmlevel/*.go plants/*.go … query/*.go ドメインモデルはCommand側 (Queryから参照されない) データ読み取り(Query)要件によって ドメインモデルの実装が汚染されることを防⽌したい 読み(⾼トラフィック、低レイテンシー) 書き(⼀貫性、ソースコードのシンプルさ) それぞれで最適化したい 上位レイヤーはドメインモデルを⽤いたトランザクションスクリプト レポジトリへのデータ読み書き、トランザクション管理 ハンドラーへのデータ返却