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
imkaoru
October 07, 2025
Programming
4
1.2k
Goで実践するドメイン駆動開発 AIと歩み始めた新規プロダクト開発の現在地
imkaoru
October 07, 2025
Tweet
Share
More Decks by imkaoru
See All by imkaoru
Goで作成したコンテナ形式のLambdaに New Relicを導入する際の備忘録
imkaoru
0
18
Other Decks in Programming
See All in Programming
全員アーキテクトで挑む、 巨大で高密度なドメインの紐解き方
agatan
7
8.9k
AI時代もSEOを頑張っている話
shirahama_x
0
160
「文字列→日付」の落とし穴 〜Ruby Date.parseの意外な挙動〜
sg4k0
0
250
Rails Girls Sapporo 2ndの裏側―準備の日々から見えた、私が得たもの / SAPPORO ENGINEER BASE #11
lemonade_37
2
190
AIと協働し、イベントソーシングとアクターモデルで作る後悔しないアーキテクチャ Regret-Free Architecture with AI, Event Sourcing, and Actors
tomohisa
2
8.3k
AIの弱点、やっぱりプログラミングは人間が(も)勉強しよう / YAPC AI and Programming
kishida
13
5.3k
AI駆動開発ライフサイクル(AI-DLC)のホワイトペーパーを解説
swxhariu5
0
1.4k
TVerのWeb内製化 - 開発スピードと品質を両立させるまでの道のり
techtver
PRO
3
1.2k
ゼロダウンタイムでミドルウェアの バージョンアップを実現した手法と課題
wind111
0
210
モビリティSaaSにおけるデータ利活用の発展
nealle
0
590
DartASTとその活用
sotaatos
2
150
Agentに至る道 〜なぜLLMは自動でコードを書けるようになったのか〜
mackee
5
1.9k
Featured
See All Featured
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
130k
Making the Leap to Tech Lead
cromwellryan
135
9.6k
Measuring & Analyzing Core Web Vitals
bluesmoon
9
680
Rebuilding a faster, lazier Slack
samanthasiow
84
9.3k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
127
54k
Building a Scalable Design System with Sketch
lauravandoore
463
34k
Context Engineering - Making Every Token Count
addyosmani
9
410
Building an army of robots
kneath
306
46k
Designing Experiences People Love
moore
142
24k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
31
3k
Reflections from 52 weeks, 52 projects
jeffersonlam
355
21k
The Straight Up "How To Draw Better" Workshop
denniskardys
239
140k
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.. ご清聴ありがとうございました