Slide 1

Slide 1 text

© dip Corporation. Goで実践するドメイン駆動開発 AIと歩み始めた新規プロダクト開発の現在地 バックエンドGo開発の裏側 直面する課題と今後の展望とは? 日付:2025/10/07(火) 12:00 〜 13:00 佐藤 薫 (Kaoru Sato)

Slide 2

Slide 2 text

© dip Corporation. このLTで伝えたいこと 2 ● AIにより素早い仮説検証が可能となった今だからこそ、ドメ インを基にした “本質的な設計 ”の重要性が高まっている ● そして、その思想を自然に表現できる言語として Go × DDD の相性の良さ

Slide 3

Slide 3 text

© dip Corporation. このLTで伝えたいこと 3 現在進行形の試行錯誤を共有します!!

Slide 4

Slide 4 text

© dip Corporation.. Agenda 1. ⾃⼰紹介 2. 会社概要 3. 前提:所属チーム‧⽬的‧開発体制 4. ドメイン駆動設計について 5. GoとDDDの相性 6. ドメインモデルの実装 7. 開発課題と取り組み事例

Slide 5

Slide 5 text

© dip Corporation. 佐藤 薫 2023年4⽉ 新卒⼊社 プロダクト開発統括部 / バイトルエンジニアリング部 Go歴:⼊社とともに DDD歴:5⽉〜 福岡歴:⼤学から。就職を機に⼀度東京へ⾏き、昨年9⽉に戻る 最近楽しかったこと:スクラム祭り!!

Slide 6

Slide 6 text

VISION Labor force solution company ⼈材サービスとDXサービスの提供を通して、 労働市場における諸課題を解決し、 誰もが働く喜びと幸せを感じられる社会の実現を⽬指します。 Copyright © dip Corporation, All rights reserved.

Slide 7

Slide 7 text

× Human work force solution ユーザーファーストな独⾃機能を搭載した、 求⼈情報‧⼈材紹介サービスの提供を通じて、 ユーザーの就業課題を解決しています。 ⼈材サービス事業 Digital labor force solution バイトコミュニケーションアプリ『バイトル トーク』や、機能を絞ったシンプルなSaaS型の 『コボット』を通じて、職場環境やコミュニ ケーション課題を解決しています。 DX事業

Slide 8

Slide 8 text

© dip Corporation.. 前提:所属チーム‧⽬的‧開発体制

Slide 9

Slide 9 text

© dip Corporation. 前提:所属チーム・役割・開発体制 9 ● 所属チーム :新規プロダクトのAPIプラットフォームチーム ● チームの役割 :変更容易性の高いAPIを作成し、素早い仮説検証 サイクルを回せるものづくり体制を実現すること

Slide 10

Slide 10 text

© dip Corporation. 前提:所属チーム・役割・開発体制 10 開発体制 ○ 関係チームとしては、複数のフロントチーム ○ スクラム:PO, SM, 開発者(TL含め4人) ○ モノレポ

Slide 11

Slide 11 text

© dip Corporation. 前提:所属チーム・役割・開発体制 11 Goを採用した理由 ○ 弊社では「標準化」「省力化」「最新化」という3つの基本方針に基 づいて、バックエンドではGoを推奨言語としている ○ 純粋なパフォーマンスと安定性が求められるバックエンドAPIなど で採用実績がある

Slide 12

Slide 12 text

© dip Corporation.. ドメイン駆動設計について

Slide 13

Slide 13 text

© dip Corporation. ドメイン駆動設計について 13 ドメインとは、事業領域のこと

Slide 14

Slide 14 text

© dip Corporation. ドメイン駆動設計について 14 ドメイン駆動設計 (DDD) ○ 意図の伝達を円滑にし、事業戦略とソフトウェアの実装を結びつける設計手 法 ○ アジャイルとの相性もよく、市場や戦略の変化に柔軟に適応していけるパ ワーを秘めている

Slide 15

Slide 15 text

© dip Corporation. ドメイン駆動設計について 15 重要な概念 ● 戦略的設計と戦術的設計 ○ Why・WhatとHowの関係性 ● 業務領域(サブドメイン ) ○ 事業目標を達成するために、事業活動を分析することを目的にドメイン を細分化したもの ○ 建設的に手を抜いて、中核領域に集中できるように業務領域を分類す る ● 境界付けられたコンテキスト (BC) ○ ソフトウェア設計の視点から事業活動モデルを扱いやすい単位にするた めに、ドメインを分解したもの

Slide 16

Slide 16 text

© dip Corporation. ドメイン駆動設計について 16 ドメインモデルとは ○ 中核の業務領域を対象に、複雑な業務ロジックを扱うための設計手法 業務ロジックとは ○ 業務領域におけるルールや前提条件、制約 ○ 値オブジェクト、集約、業務サービスで扱うドメインに関するロジックの総称

Slide 17

Slide 17 text

© dip Corporation.. Go と DDD の相性

Slide 18

Slide 18 text

© dip Corporation. Go と DDD の相性 18 Goの事例があまりないのはなぜか?

Slide 19

Slide 19 text

© dip Corporation. Go と DDD の相性 19 ● シンプルで明示的な言語仕様 ○ 暗黙的な魔法が少なく、意図をコードにそのまま表現できる ● 後方互換性の高 さと豊富な標準ライブラリ ○ ドメインロジックの継続的な改善に集中できる ○ ドメインモデルのような単純なオブジェクト中心の設計と本質的に相性が良い ● 設計の自由度と制御性 ○ フレームワークに縛られず、アーキテクチャを自分たちのドメインに合わせて構築でき る

Slide 20

Slide 20 text

© dip Corporation. 20 Go と DDD の相性 依存関係逆転の原則 ○ Goのinterfaceは、ポートとアダプターの分離を自然に表現できる 実装ではなく抽象に依存する構造(依存の整合性)を型システム自体で保証できる

Slide 21

Slide 21 text

© dip Corporation.. ドメインモデルの実装

Slide 22

Slide 22 text

© dip Corporation. ドメインモデルの実装 22 実装例のテーマ ● 「AIを使用し、ユーザーの悩み解決におすすめの書籍をピックアップする」機能を 提供するケースを例に、複数BC連携が必要な場合の実装を想定 ● 「Recommendation (レコメンド) 」を中核の業務領域とし、そのために別BCである 「お気に入りリスト」「ユーザープロファイル」の情報を扱う

Slide 23

Slide 23 text

© dip Corporation. ドメインモデルの実装 23

Slide 24

Slide 24 text

© dip Corporation. 実行結果例 24

Slide 25

Slide 25 text

© dip Corporation. ディレクトリ構成 25

Slide 26

Slide 26 text

© dip Corporation. 処理の流れ 26

Slide 27

Slide 27 text

© dip Corporation. 値オブジェクト 27

Slide 28

Slide 28 text

© dip Corporation. 集約 28

Slide 29

Slide 29 text

© dip Corporation. 集約 29

Slide 30

Slide 30 text

© dip Corporation. 補足 30 ● 粒度が大きいとパフォーマンス悪化につながる ● 粒度が小さいと結果整合の制御が増え、設計コストが高くなる ● 物理的な境界はBC(1BCに対しスキーマ群)・1集約1リポジトリ(永続化の単位 は集約) ● BCに対してマイクロサービスを適用 ○ モノレポでBCごとにモジュール化

Slide 31

Slide 31 text

© dip Corporation. 業務サービス 31

Slide 32

Slide 32 text

© dip Corporation. ドメインモデルの実装 32 実践ポイント ○ フィールド非公開と、慣習的なファクトリメソッドを使用する ○ スライスやマップを扱う場合は外部へ渡す前に必ずコピーするなど不変性を意識 する ○ アプリケーションサービスは薄くし、業務ロジックはドメイン層で

Slide 33

Slide 33 text

© dip Corporation.. 開発課題と取り組み事例

Slide 34

Slide 34 text

© dip Corporation. 開発課題と取り組み事例 34 ドメイン駆動設計の難しさは ....?

Slide 35

Slide 35 text

© dip Corporation. 先日のスクラム祭りにて 35

Slide 36

Slide 36 text

© dip Corporation. 開発課題と取り組み事例 36 ドメイン駆動設計 ○ プロジェクトの価値や目的を自分の言葉で再定義し、所属チームレベルに ブレイクダウンした ○ 企画職の方と日次15分間、理解を深める枠を設けた ○ 「ドメイン駆動設計をはじめよう」をチーム全員で読むことにし、用語自体の 勉強会を実施 ○ AWSワークショップ & 社内でのイベントストーミング実施

Slide 37

Slide 37 text

© dip Corporation. 開発課題と取り組み事例 37 AI活用 ○ Claude Code での開発 ○ 速さを落とさず、基盤的内容変更の共通認識を最短ループで回すことを目的と して以下を構想中 ■ CLAUDE.md に人もAIも認識しておきたい内容を記載 ■ Claude Code Actions を使用し、PR作成時に「CLAUDE.mdのルール準 拠チェック」「追記要否判定」を

Slide 38

Slide 38 text

© dip Corporation.. まとめ

Slide 39

Slide 39 text

© dip Corporation. まとめ 39 ● AIにより素早い仮説検証が可能となった今だからこそ、ドメインを基にした “本 質的な設計 ”の重要性が高まっている ● そして、その思想を自然に表現できる言語として Go × DDD の相性の良さ

Slide 40

Slide 40 text

© dip Corporation. まとめ 40 ● AIにより素早い仮説検証が可能となった今だからこそ、ドメインを基にした “本 質的な設計 ”の重要性が高まっている ▶ 「共通言語となるモデル」「変更容易性の高いシステム」 ● そして、その思想を自然に表現できる言語として Go × DDD の相性の良さ

Slide 41

Slide 41 text

© dip Corporation. まとめ 41 ● AIにより素早い仮説検証が可能となった今だからこそ、ドメインを基にした “本 質的な設計 ”の重要性が高まっている ▶ 「共通言語となるモデル」「変更容易性の高いシステム」 ● そして、その思想を自然に表現できる言語として Go × DDD の相性の良さ ▶ 「後方互換性の高い言語仕様」「設計の自由度」

Slide 42

Slide 42 text

「挑戦し、変化し、リードする仲間」を募集中! 📎採用情報 📎インタビュー記事 📎テックブログ

Slide 43

Slide 43 text

© dip Corporation.. ご清聴ありがとうございました