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で実践するドメイン駆動開発 AIと歩み始めた新規プロダクト開発の現在地
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
imkaoru
October 07, 2025
Programming
1.9k
5
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Goで実践するドメイン駆動開発 AIと歩み始めた新規プロダクト開発の現在地
imkaoru
October 07, 2025
More Decks by imkaoru
See All by imkaoru
Goで作成したコンテナ形式のLambdaに New Relicを導入する際の備忘録
imkaoru
0
31
Other Decks in Programming
See All in Programming
AIとASP.NET Coreで雑Webアプリを作った話
mayuki
0
650
「なぜそう決めたのか」を残し続ける仕組み ― Notion AI カスタムエージェント × Slack連携による設計判断の自動記録 - NIKKEI Tech Talk #47
niftycorp
PRO
0
180
脅威をエンジニアリングの糧にして――現場編 / Turning Threats into Engineering Fuel — Field Edition
nrslib
0
280
代数的データ型って何が嬉しいの? #frontend_phpcon_do
kajitack
8
3.7k
気圧・高度・GPSを記録&可視化するアプリ「Koudo」を作った話
hjmkth
1
270
AIだと陥りがちなJakarta EE最新技術への移行時の落とし穴と解決策
tnagao7
0
110
RTSPクライアントを自作してみた話
simotin13
0
610
ローカルLLMを使ってB2Bサービスを作っていての学び
yaotti
0
180
スマートグラスで並列バイブコーディング
hyshu
0
150
Even G2とAWSで推しのエージェントを召喚しよう!
har1101
1
120
Spring Security 実践 ─ GraphQL APIで実務に役立つ 認証・認可 を学ぶ
wagyu
0
240
TypeScript+Orvalで実現する型安全かつ堅牢でスケーラブルなマルチチャネル通知基盤 / TSKaigi Night talks ~after conference~
d0riven
0
340
Featured
See All Featured
The Language of Interfaces
destraynor
162
27k
Faster Mobile Websites
deanohume
310
31k
How Software Deployment tools have changed in the past 20 years
geshan
0
34k
Documentation Writing (for coders)
carmenintech
77
5.4k
Building Flexible Design Systems
yeseniaperezcruz
330
40k
Deep Space Network (abreviated)
tonyrice
0
170
Leadership Guide Workshop - DevTernity 2021
reverentgeek
1
300
Java REST API Framework Comparison - PWX 2021
mraible
34
9.4k
ラッコキーワード サービス紹介資料
rakko
1
3.7M
The Pragmatic Product Professional
lauravandoore
37
7.3k
Agile Leadership in an Agile Organization
kimpetersen
PRO
0
160
Learning to Love Humans: Emotional Interface Design
aarron
275
41k
Transcript
© dip Corporation. Goで実践するドメイン駆動開発 AIと歩み始めた新規プロダクト開発の現在地 バックエンドGo開発の裏側 直面する課題と今後の展望とは? 日付:2025/10/07(火) 12:00 〜
13:00 佐藤 薫 (Kaoru Sato)
© dip Corporation. このLTで伝えたいこと 2 • AIにより素早い仮説検証が可能となった今だからこそ、ドメ インを基にした “本質的な設計 ”の重要性が高まっている
• そして、その思想を自然に表現できる言語として Go × DDD の相性の良さ
© dip Corporation. このLTで伝えたいこと 3 現在進行形の試行錯誤を共有します!!
© dip Corporation.. Agenda 1. ⾃⼰紹介 2. 会社概要 3. 前提:所属チーム‧⽬的‧開発体制
4. ドメイン駆動設計について 5. GoとDDDの相性 6. ドメインモデルの実装 7. 開発課題と取り組み事例
© dip Corporation. 佐藤 薫 2023年4⽉ 新卒⼊社 プロダクト開発統括部 / バイトルエンジニアリング部
Go歴:⼊社とともに DDD歴:5⽉〜 福岡歴:⼤学から。就職を機に⼀度東京へ⾏き、昨年9⽉に戻る 最近楽しかったこと:スクラム祭り!!
VISION Labor force solution company ⼈材サービスとDXサービスの提供を通して、 労働市場における諸課題を解決し、 誰もが働く喜びと幸せを感じられる社会の実現を⽬指します。 Copyright ©
dip Corporation, All rights reserved.
× Human work force solution ユーザーファーストな独⾃機能を搭載した、 求⼈情報‧⼈材紹介サービスの提供を通じて、 ユーザーの就業課題を解決しています。 ⼈材サービス事業 Digital
labor force solution バイトコミュニケーションアプリ『バイトル トーク』や、機能を絞ったシンプルなSaaS型の 『コボット』を通じて、職場環境やコミュニ ケーション課題を解決しています。 DX事業
© dip Corporation.. 前提:所属チーム‧⽬的‧開発体制
© dip Corporation. 前提:所属チーム・役割・開発体制 9 • 所属チーム :新規プロダクトのAPIプラットフォームチーム • チームの役割
:変更容易性の高いAPIを作成し、素早い仮説検証 サイクルを回せるものづくり体制を実現すること
© dip Corporation. 前提:所属チーム・役割・開発体制 10 開発体制 ◦ 関係チームとしては、複数のフロントチーム ◦ スクラム:PO,
SM, 開発者(TL含め4人) ◦ モノレポ
© dip Corporation. 前提:所属チーム・役割・開発体制 11 Goを採用した理由 ◦ 弊社では「標準化」「省力化」「最新化」という3つの基本方針に基 づいて、バックエンドではGoを推奨言語としている ◦
純粋なパフォーマンスと安定性が求められるバックエンドAPIなど で採用実績がある
© dip Corporation.. ドメイン駆動設計について
© dip Corporation. ドメイン駆動設計について 13 ドメインとは、事業領域のこと
© dip Corporation. ドメイン駆動設計について 14 ドメイン駆動設計 (DDD) ◦ 意図の伝達を円滑にし、事業戦略とソフトウェアの実装を結びつける設計手 法
◦ アジャイルとの相性もよく、市場や戦略の変化に柔軟に適応していけるパ ワーを秘めている
© dip Corporation. ドメイン駆動設計について 15 重要な概念 • 戦略的設計と戦術的設計 ◦ Why・WhatとHowの関係性
• 業務領域(サブドメイン ) ◦ 事業目標を達成するために、事業活動を分析することを目的にドメイン を細分化したもの ◦ 建設的に手を抜いて、中核領域に集中できるように業務領域を分類す る • 境界付けられたコンテキスト (BC) ◦ ソフトウェア設計の視点から事業活動モデルを扱いやすい単位にするた めに、ドメインを分解したもの
© dip Corporation. ドメイン駆動設計について 16 ドメインモデルとは ◦ 中核の業務領域を対象に、複雑な業務ロジックを扱うための設計手法 業務ロジックとは ◦
業務領域におけるルールや前提条件、制約 ◦ 値オブジェクト、集約、業務サービスで扱うドメインに関するロジックの総称
© dip Corporation.. Go と DDD の相性
© dip Corporation. Go と DDD の相性 18 Goの事例があまりないのはなぜか?
© dip Corporation. Go と DDD の相性 19 • シンプルで明示的な言語仕様
◦ 暗黙的な魔法が少なく、意図をコードにそのまま表現できる • 後方互換性の高 さと豊富な標準ライブラリ ◦ ドメインロジックの継続的な改善に集中できる ◦ ドメインモデルのような単純なオブジェクト中心の設計と本質的に相性が良い • 設計の自由度と制御性 ◦ フレームワークに縛られず、アーキテクチャを自分たちのドメインに合わせて構築でき る
© dip Corporation. 20 Go と DDD の相性 依存関係逆転の原則 ◦
Goのinterfaceは、ポートとアダプターの分離を自然に表現できる 実装ではなく抽象に依存する構造(依存の整合性)を型システム自体で保証できる
© dip Corporation.. ドメインモデルの実装
© dip Corporation. ドメインモデルの実装 22 実装例のテーマ • 「AIを使用し、ユーザーの悩み解決におすすめの書籍をピックアップする」機能を 提供するケースを例に、複数BC連携が必要な場合の実装を想定 •
「Recommendation (レコメンド) 」を中核の業務領域とし、そのために別BCである 「お気に入りリスト」「ユーザープロファイル」の情報を扱う
© dip Corporation. ドメインモデルの実装 23
© dip Corporation. 実行結果例 24
© dip Corporation. ディレクトリ構成 25
© dip Corporation. 処理の流れ 26
© dip Corporation. 値オブジェクト 27
© dip Corporation. 集約 28
© dip Corporation. 集約 29
© dip Corporation. 補足 30 • 粒度が大きいとパフォーマンス悪化につながる • 粒度が小さいと結果整合の制御が増え、設計コストが高くなる •
物理的な境界はBC(1BCに対しスキーマ群)・1集約1リポジトリ(永続化の単位 は集約) • BCに対してマイクロサービスを適用 ◦ モノレポでBCごとにモジュール化
© dip Corporation. 業務サービス 31
© dip Corporation. ドメインモデルの実装 32 実践ポイント ◦ フィールド非公開と、慣習的なファクトリメソッドを使用する ◦ スライスやマップを扱う場合は外部へ渡す前に必ずコピーするなど不変性を意識
する ◦ アプリケーションサービスは薄くし、業務ロジックはドメイン層で
© dip Corporation.. 開発課題と取り組み事例
© dip Corporation. 開発課題と取り組み事例 34 ドメイン駆動設計の難しさは ....?
© dip Corporation. 先日のスクラム祭りにて 35
© dip Corporation. 開発課題と取り組み事例 36 ドメイン駆動設計 ◦ プロジェクトの価値や目的を自分の言葉で再定義し、所属チームレベルに ブレイクダウンした ◦
企画職の方と日次15分間、理解を深める枠を設けた ◦ 「ドメイン駆動設計をはじめよう」をチーム全員で読むことにし、用語自体の 勉強会を実施 ◦ AWSワークショップ & 社内でのイベントストーミング実施
© dip Corporation. 開発課題と取り組み事例 37 AI活用 ◦ Claude Code での開発
◦ 速さを落とさず、基盤的内容変更の共通認識を最短ループで回すことを目的と して以下を構想中 ▪ CLAUDE.md に人もAIも認識しておきたい内容を記載 ▪ Claude Code Actions を使用し、PR作成時に「CLAUDE.mdのルール準 拠チェック」「追記要否判定」を
© dip Corporation.. まとめ
© dip Corporation. まとめ 39 • AIにより素早い仮説検証が可能となった今だからこそ、ドメインを基にした “本 質的な設計 ”の重要性が高まっている
• そして、その思想を自然に表現できる言語として Go × DDD の相性の良さ
© dip Corporation. まとめ 40 • AIにより素早い仮説検証が可能となった今だからこそ、ドメインを基にした “本 質的な設計 ”の重要性が高まっている
▶ 「共通言語となるモデル」「変更容易性の高いシステム」 • そして、その思想を自然に表現できる言語として Go × DDD の相性の良さ
© dip Corporation. まとめ 41 • AIにより素早い仮説検証が可能となった今だからこそ、ドメインを基にした “本 質的な設計 ”の重要性が高まっている
▶ 「共通言語となるモデル」「変更容易性の高いシステム」 • そして、その思想を自然に表現できる言語として Go × DDD の相性の良さ ▶ 「後方互換性の高い言語仕様」「設計の自由度」
「挑戦し、変化し、リードする仲間」を募集中! 📎採用情報 📎インタビュー記事 📎テックブログ
© dip Corporation.. ご清聴ありがとうございました