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
Go×TDD/DDDによるリアーキテクチャ半年間の振り返り
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
ディップ株式会社
PRO
October 06, 2025
Technology
0
1.4k
Go×TDD/DDDによるリアーキテクチャ半年間の振り返り
ディップ株式会社
PRO
October 06, 2025
Tweet
Share
More Decks by ディップ株式会社
See All by ディップ株式会社
Agent Skils
dip_tech
PRO
0
130
Databricksについて.pdf
dip_tech
PRO
0
130
なぜ今_私たちはDDDに向き合うのか_佐藤薫.pdf
dip_tech
PRO
0
120
AIに仕事を丸投げしたら、本当に楽になれるのか
dip_tech
PRO
0
90
【dip】価値が「伝わる体験」を設計する ディップのDevRelが実践する、Findyサービス活用戦略
dip_tech
PRO
0
43
プロフェッショナルへの道:ビジネスを動かすエンジニアリング思想
dip_tech
PRO
0
130
ユーザーファーストを実現するためのチーム開発の工夫
dip_tech
PRO
0
94
1年目エンジニアが働いてみて感じたリアルな悩みと成長
dip_tech
PRO
0
46
ベイズマルチファクターモデルとbPCausal
dip_tech
PRO
0
36
Other Decks in Technology
See All in Technology
コスト削減から「セキュリティと利便性」を担うプラットフォームへ
sansantech
PRO
3
1.6k
私たち準委任PdEは2つのプロダクトに挑戦する ~ソフトウェア、開発支援という”二重”のプロダクトエンジニアリングの実践~ / 20260212 Naoki Takahashi
shift_evolve
PRO
2
210
AI駆動開発を事業のコアに置く
tasukuonizawa
1
390
プロポーザルに込める段取り八分
shoheimitani
1
650
[CV勉強会@関東 World Model 読み会] Orbis: Overcoming Challenges of Long-Horizon Prediction in Driving World Models (Mousakhan+, NeurIPS 2025)
abemii
0
150
ファインディの横断SREがTakumi byGMOと取り組む、セキュリティと開発スピードの両立
rvirus0817
1
1.7k
20260208_第66回 コンピュータビジョン勉強会
keiichiito1978
0
200
10Xにおける品質保証活動の全体像と改善 #no_more_wait_for_test
nihonbuson
PRO
2
340
Claude Code for NOT Programming
kawaguti
PRO
1
100
Tebiki Engineering Team Deck
tebiki
0
24k
Cloud Runでコロプラが挑む 生成AI×ゲーム『神魔狩りのツクヨミ』の裏側
colopl
0
140
Exadata Fleet Update
oracle4engineer
PRO
0
1.1k
Featured
See All Featured
Jess Joyce - The Pitfalls of Following Frameworks
techseoconnect
PRO
1
68
Building Better People: How to give real-time feedback that sticks.
wjessup
370
20k
Building Flexible Design Systems
yeseniaperezcruz
330
40k
Agile Actions for Facilitating Distributed Teams - ADO2019
mkilby
0
120
Build The Right Thing And Hit Your Dates
maggiecrowley
39
3k
The agentic SEO stack - context over prompts
schlessera
0
650
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
117
110k
Skip the Path - Find Your Career Trail
mkilby
0
59
Conquering PDFs: document understanding beyond plain text
inesmontani
PRO
4
2.3k
How To Stay Up To Date on Web Technology
chriscoyier
791
250k
Jamie Indigo - Trashchat’s Guide to Black Boxes: Technical SEO Tactics for LLMs
techseoconnect
PRO
0
65
SEO for Brand Visibility & Recognition
aleyda
0
4.2k
Transcript
GoとTDD/DDDによるリアーキテクチャ 半年間の振り返り 奥野 志洋
奥野 志洋 新卒2年⽬ 電⾞に乗らなくて良い⼈⽣を求めて エンジニアを志す バックエンドエンジニアとして⼊社し Goをメインに開発 少しNext.jsも 最近はTerraformなども
01 リアーキを始めた理由 02 03 04 05 Agenda 戦略的DDD Goによる戦術的 DDD
GoによるTDD DDDとTDDのシナジー
サービスの紹介
Copyright © DIP Corporation, All rights reserved. リアーキを始めた理由 : 現状の課題と解決策
リアーキを始めた理由 : 解決したい課題 複数のシステムが共通の DB、 テーブル、レコードを参照 開発チームも利用者単位で分割 同様のビジネスロジックが各所に 分散、異なる業務ロジックが密結 合している状態
リアーキを始めた理由 : 解決したい課題 一つの業務変更が複数の チームに影響を与える ↓ 全チームで足並みを揃えて矛 盾が起きないように慎重に開 発するのが状態化
解決するために取り組んだこと : DDDとTDD DDD TDD x 設計面でDDD(ドメイン駆動設計 ) 開発フローとして TDD(テスト駆動開発
)をGoで実践
Copyright © DIP Corporation, All rights reserved. 戦略的DDDと戦術的DDD
DDD(ドメイン駆動設計) 業務 → モデリング 戦略的DDD 戦術的DDD モデリング → システム
Copyright © DIP Corporation, All rights reserved. 戦略的DDD : イベントストーミング
戦略的DDD : イベントストーミング ドメインエキスパートである POに加え バックエンド、フロントエンド アプリ、インフラのエンジニアが 集まって業務を整理しました。
戦略的DDD : イベントストーミング 思いつく業務イベントを 書き出し時間軸に整理 ビジネスの分割点となる Event (Pivotal Event)を見つける。
戦略的DDD : イベントストーミング Pivotal Eventを元に さらに業務を分解していく 使用者の意思と業務イベントをつなぐ システムを洗い出す コマンド (意思)
システム イベント
戦略的DDD : イベントストーミング 整理したイベントに 共通するシステムこそが集約と呼ばれる 業務モデルのまとまりの単位となる 求人を 登録する 求人 求人を
登録した 求人を 削除する 求人を 更新する 求人を 削除した 求人を 更新した
戦略的DDD : イベントストーミング 集約を整理し、境界づけられたコンテキスト (システムの単位 )を発見 その依存関係であるコンテキストマップを作成 →
戦略的DDD : 振り返り 業務を正しい単位で分解 疎結合かつ高凝集なモデル ドメイン知識の獲得 ユビキタス言語の制定 モデリング ドメイン知識
Copyright © DIP Corporation, All rights reserved. 戦術的DDD : Goによるモデリング
戦術的DDD : モデルの種類 ・明確な識別子 (ID)を必要とする ・エンティティーは更新可能 例えば「Worker」構造体 エンティティー
戦術的DDD : モデルの種類 ・構成要素の値によって識別されるオ ブジェクト • 識別子(ID)を必要としない • イミュータブルで変更する場合は全 体を置き換える
例えば「支給額」構造体 値オブジェクト
戦術的DDD : モデルの種類 同一のトランザクション境界に 属するエンティティと値オブジェクトの組 み合わせ • 集約もエンティティなので IDが必要 •
集約がトランザクションの単位 集約 値 オブジェクト ワーカー 求人
戦術的DDD : Goによるモデルの表現 ・値オブジェクトは使える時はできる だけ使ったほうが良い ・Goではプリミティブな型にエイリア スとして型を作成できる ・uint64ではなくお金に関するフィー ルドだということがわかるだけで価値 がある。
・ロジックのカプセル化 値オブジェクト
戦術的DDD : Goによるモデルの表現 Goで集約を実装する際には 紐づくエンティティや値オブジェクト を構造体のフィールドとして定義 また、集約のみが メソッドを外部のパッケージに公開 紐づくフィールドに触れるには集約を通 して行うようにして業務モデルを
カプセル化を目指しました。 集約
戦術的DDD : Goの⾔語仕様による課題 ・値オブジェクトの不変制を担保できない ・コンストラクタの使用が強制できない ・privateがない(非exportしても同一パッケージからは触れる ) ・継承が無いので値オブジェクトに同じようなメソッドを 毎回書く必要がある (Valueメソッドなど
) クラスが存在しないことによる弊害
戦術的DDD : Goの⾔語仕様による課題 クラスが存在しないことによる弊害 左のようにコンストラクタに バリデーションをカプセル化しても 下記のように書けてしまう
戦術的DDD : 振り返り interfaceをうまく使えばコンストラクタを強制することは可能だが、 Goの簡潔に記述する思想と相反する どこまでprivate化してカプセル化を担保するか、どこまで値オブジェクトとして作成 するかなどもそう感じました。 DDDの本に書かれているような定義はあくまで設計思想の一例なので チームでコミュニケーションをとってベストな方法を育てていくのが良い!
Copyright © DIP Corporation, All rights reserved. TDD : TDDの基本的な説明
TDD : TDDの基本ステップ
TDD: TDDのメリット TDDは不確実な事象を小さなステップのサイクルで一歩ずつ確実に進む手法 AIの発展でステップの単位は大きくしながら、安全性を担保することが可能に ・小さな単位なので指示が明確 ・テストコードがプロンプト ・生成コードをその場で検証可能 ・レビューの負担減少 AI活用による生産性向上 安全性の担保
Copyright © DIP Corporation, All rights reserved. TDD : GoでTDDを行う際のポイント
TDD: テストパターンの使い分け 開発時にテーブル駆動テストではなくAAAパターンのテストを採⽤ Arrenge (準備) Act (実行) Assert (検証)
TDD: テストパターンの使い分け 開発時にテーブル駆動テストではなくAAAパターンのテストを採⽤ テストケースが他のテストケースに依存しない形になる TDDのサイクルを回す中で詳細化していくテストケースやテスト観点に対応可能 下記のような使い分けで GoによるTDDを実践していきました。 機能開発時に TDDのステップでスピード高く開発していく際には AAA
機能実装後に、品質を高めるためのテストを追加する際にはテーブル駆動
Copyright © DIP Corporation, All rights reserved. DDD と TDD
のシナジー
DDDとTDDのシナジー DDD x TDD x AI ・DDDによる責務が分割された業務モデル簡潔化されたロジック ・ユビキタス言語をリポジトリ内で管理 ・型も値オブジェクトを用い、業務で使われる共通言語を使用 ・生成AIと相性の良い
TDDの開発フロー
DDDとTDDのシナジー 構造化された t.Run()のテストケースが 業務の⾔葉で書かれて 動く仕様書に
Copyright © DIP Corporation, All rights reserved. まとめ
まとめ Goの⾔語仕様では完全な業務のカプセル化はできないが、 チームで認識を合わせて⾃分たちにあったルールや開発フローを 定めていくことが重要 テストを書く意味を考えてAAAパターンとテーブル駆動テストを 使い分けることでTDDのサイクルのスピードを⾼めて開発ができた
Copyright © DIP Corporation, All rights reserved. より深い話は懇親会などで! ご清聴ありがとうございました!!!