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
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
32
Other Decks in Programming
See All in Programming
「正の参照」と 「負の導出」で組む ハーネスエンジニアリング
cottpan
1
140
Embedded SREと共に達成した会員管理システムのAWS移行 - SRE NEXT 2026 ランチスポンサーセッション
niftycorp
PRO
1
2.3k
SREの積み重ねがAI駆動開発のガードレールになった ― 7つの実践/SRE Guardrails The 7
tomoyakitaura
8
3.9k
言語を使う側から、作る側へ。 自作 Lisp で得た新たな気づき。
andpad
0
110
Webフレームワークの ベンチマークについて
yusukebe
0
200
なぜ関数型プログラミングで「型」と「証明」が語られるのか #fp_matsuri
kajitack
3
800
Skillsは効率化、Agentsは"自分の拡張"——Builder時代のエージェント編成(CC Night 2026)
wemra
1
210
Generative UI & AI-Assistants for Your Angular Solutions
manfredsteyer
PRO
0
100
【やさしく解説 設計編・中級 #6】良いアーキテクチャとは ~ 一本の登り道の、行き先 ~
panda728
PRO
0
130
「なぜそう決めたのか」を残し続ける仕組み ― Notion AI カスタムエージェント × Slack連携による設計判断の自動記録 - NIKKEI Tech Talk #47
niftycorp
PRO
0
260
『コードを書く以外の』エンジニアリング〜課金基盤移行プロジェクト推進のためのTips4選
yuriko1211
0
300
どこまでゆるくて許されるのか
tk3fftk
0
470
Featured
See All Featured
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
1.4k
Stewardship and Sustainability of Urban and Community Forests
pwiseman
0
280
Exploring anti-patterns in Rails
aemeredith
3
440
SEO in 2025: How to Prepare for the Future of Search
ipullrank
3
3.6k
Rails Girls Zürich Keynote
gr2m
96
14k
How to build a perfect <img>
jonoalderson
1
5.8k
Chasing Engaging Ingredients in Design
codingconduct
0
230
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
Raft: Consensus for Rubyists
vanstee
141
7.6k
Tips & Tricks on How to Get Your First Job In Tech
honzajavorek
1
560
Scaling GitHub
holman
464
140k
How to Grow Your eCommerce with AI & Automation
katarinadahlin
PRO
1
220
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.. ご清聴ありがとうございました