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
1k
Goで実践するドメイン駆動開発 AIと歩み始めた新規プロダクト開発の現在地
imkaoru
October 07, 2025
Tweet
Share
More Decks by imkaoru
See All by imkaoru
Goで作成したコンテナ形式のLambdaに New Relicを導入する際の備忘録
imkaoru
0
13
Other Decks in Programming
See All in Programming
ネストしたdata classの面倒な更新にさようなら!Lensを作って理解するArrowのOpticsの世界
shiita0903
1
280
EMこそClaude Codeでコード調査しよう
shibayu36
0
690
開発組織の戦略的な役割と 設計スキル向上の効果
masuda220
PRO
10
2.1k
Health Kit × Foundation Models でAIコーチを作ってみた
ryunakayama
0
100
CSC305 Lecture 13
javiergs
PRO
0
370
coconala_slide_pop.pdf
yukihito13
0
230
例外処理を理解して、設計段階からエラーを見つけやすく、起こりにくく #phpconfuk
kajitack
12
5.2k
外接に惑わされない自システムの処理時間SLIをOpenTelemetryで実現した話
kotaro7750
0
220
Swift Concurrency 年表クイズ
omochi
3
220
AsyncSequenceとAsyncStreamのプロポーザルを全部読む!!
s_shimotori
1
240
エンジニアインターン「Treasure」とHonoの2年、そして未来へ / Our Journey with Hono Two Years at Treasure and Beyond
carta_engineering
0
490
ビルドプロセスをデバッグしよう!
yt8492
0
260
Featured
See All Featured
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.3k
Product Roadmaps are Hard
iamctodd
PRO
55
11k
Stop Working from a Prison Cell
hatefulcrawdad
272
21k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
130k
Mobile First: as difficult as doing things right
swwweet
225
10k
GitHub's CSS Performance
jonrohan
1032
470k
Fashionably flexible responsive web design (full day workshop)
malarkey
407
66k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
36
6.1k
For a Future-Friendly Web
brad_frost
180
10k
Bash Introduction
62gerente
615
210k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
16k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
508
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.. ご清聴ありがとうございました