Upgrade to Pro — share decks privately, control downloads, hide ads and more …

ドメインイベントを追っかけよ〜

Avatar for Hiroto Gamo Hiroto Gamo
September 25, 2025
160

 ドメインイベントを追っかけよ〜

# 秋のSRE談義

## 概要
APMをデフォルトで入れた状態だとAPIの1処理ごとにHTTPステータスなどと向き合うことになりますが、それだけだと課題が残ります。
その課題を解決するためにドメインイベントをトレースしてみたらいいんじゃないか、という紹介をしています。

Avatar for Hiroto Gamo

Hiroto Gamo

September 25, 2025
Tweet

Transcript

  1. © Dress Code Inc . All rights reserved. 自己紹介 •

    業務 ◦ プロダクトエンジニア/SRE ◦ IT(情シス)領域のプロダクトを中心に開発 • 経歴 ◦ 2017年~ 美容医療クリニックの口コミサイト開発 ◦ 2021年~ レバテックのSREチーム立ち上げ ◦ 2024年~ Dress Codeのプロダクト開発 • 趣味 ◦ 🐈、⚽、🎸 gamonges(@gamonges_eng) 2
  2. © Dress Code Inc . All rights reserved. 3 Agenda

    1. 対象プロダクト紹介 2. なぜドメインイベントを追いかけるのか 3. ドメインイベントを追いかけるには 4. Span設計 5. 学び
  3. © Dress Code Inc . All rights reserved. 4 本日のゴール

    • ドメインイベントをトレースするために必要な要素の共有 ◦ ドメインイベントに対して 011を当てはめるとどうなるのか ◦ ドメインイベントが システムの信頼性を図るのにどのくらい役立ちそうか • DDDとO11yを繋げるきっかけになれば
  4. © Dress Code Inc . All rights reserved. DRESS CODE

    全体像 HR Force RCT Force GA Force PJ Force Architecture Platform CG Force SaaS管理 デバイス 調達とストア IDとアクセス セキュリティとモバイル 倉庫と配送 メンバー 組織と配置 労務コア 給与計算 勤怠 福利厚生 サーベイ 業務契約者コア ATS 入社前事前調査 面談管理 リファラル推進 役職と職務内容管理 オファーレターとサイン 拠点 備品 車両 選考ステップ最適化 タレントプール プロジェクト 予算統制 リソース スケジュール 有効人員と作業量 個人情報 リスクとインシデント管理 コンプライアンス 監査 ベンダー管理 IT Force ※Recruiting ※General Affairs ※Project ※Corporate Governance 施設ファシリティ 安否確認 郵便物 社内イベント 株主総会 3 other Products 契約と支払い お知らせと通知 ユーザーとアカウント ビジネスモデルスタジオ 分析とレポート ワークフローと自動化 ルールとポリシー 権限と役割 業務オペレーションエンジン 卓越し標準化されたUI/UXa People Graph(CoreDB) 6
  5. © Dress Code Inc . All rights reserved. デバイス棚卸し機能 💡

    提供している価値 🤖 業務の流れ • デバイスの所在確認のプロセス提供 • 棚卸しレポートの可視化 • 棚卸し対象のデバイスをリストアップ • デバイスを付与している従業員、責任者に棚卸しを依頼 • 各デバイスの所有者がレポートを提出 • 情シス担当者がレポートをレビュー 9
  6. © Dress Code Inc . All rights reserved. APMそのままによる計装の課題 💯

    API処理ごとの指標 • 各エンドポイント単位のHTTPステータスやレイテンシの計測 ◦ 顧客の業務がどこまで進んだのか どの段階の業務フローに信頼性の課題があるのか が、業務が複数のエンドポイントに跨っている時に分かりづらい • システムの振る舞いがドメインのルールに沿っているのか ◦ ドメインモデリングされたルールに沿った振る舞い、計算結果を出しているかは HTTPステータスなどからは把握しづらい 技術的なエラーと、業務的なエラーは必ずしも繋がらない 11
  7. © Dress Code Inc . All rights reserved. ドメインイベントを計装に入れたらどうか 💡

    ドメインイベント • 「ビジネスドメイン上で発生した重要な出来事を表すメッセージ」 ◦ システム内の状態の変化(=集約の状態の変化)を表現するもの 12 🎯 理想 • システム上で業務の成否がどうなっているか分かる • システム内の状態の変化が適切なのかが分かる。 • インシデント調査が、エンドポイントのステータスではなく ユーザー影響ベースで進められる
  8. © Dress Code Inc . All rights reserved. 整理 📈必要な整理

    • ドメインイベントの整理 • 業務単位の整理 • システムでのドメインイベントの扱われ方の整理 14 🏗計装設計 • スパンの設計 • スパンに入れるSpan属性の決定
  9. © Dress Code Inc . All rights reserved. ドメインイベントの整理 💡

    表現している業務 🎯 業務の流れ • デバイスの所在確認のプロセス • 棚卸しレポート • 棚卸し対象のデバイスをリストアップ • デバイスを付与している従業員、責任者に棚卸しを依頼 • 各デバイスの所有者がレポートを提出 • 情シス担当者がレポートをレビュー 15
  10. © Dress Code Inc . All rights reserved. 業務単位の整理 💡

    業務をどういう単位で区切るのか 📃 区切るために必要なSpan属性 • デバイス単位 • デバイスの所有者単位 • タスク単位 • リストアップ対象のデバイス群単位 • デバイスID • 所有者ID • リストアップデバイス群を識別できるID • 会社の組織ごとに棚卸しを行なっていくなら、組織ID 17
  11. © Dress Code Inc . All rights reserved. システムでのドメインイベントの扱われ方 🎫

    イベントの処理方法 • 同期・非同期 • 並列処理、順序 18 🕺 ドメインイベントによる振る舞い • セルフレポート送信 ◦ レポート結果によってNAが決定する ▪ 紛失していれば紛失手続き、故障していれば修理手続き、など • レポートレビュー ◦ レビューが終わると、各デバイスの棚卸し結果が更新される
  12. © Dress Code Inc . All rights reserved. Span Attribute

    { "domainContext": { "category": "DeviceInventory", "inventoryId": "123456", ←棚卸しイベント "package": { "id": "123456", "taskName": "セルフレポート送信", "taskId": "123456", "deviceId": "123456", "inventoryResult": {←セルフレポート結果 "result": "OWND", "deviceCondition": "BAD", "memo": "キーボードが故障しています" "nextAction": "repairProcedure" } } } }
  13. © Dress Code Inc . All rights reserved. 学び 🤔

    役立つレベルにまで計装を高めていくのって難しい ⚖ カーディナリティと計装コストのトレードオフ • 結局データベースで調査クエリを叩いた方が早い ◦ (対象システムに知見がある人からすれば) ▪ 調査のノウハウなどを形式知化するのがO11yの目的ではあるのだが... ◦ 知見がない人からのフィードバックをもらうと良さそう • ドメインイベントでの状態遷移や、各業務単位ごとのトレースをリッチに 可視化しようとすると計装コストがかかる • インシデント調査の初動が早くなるような計装を心掛けるのが大事 25
  14. © Dress Code Inc . All rights reserved. 技術ブログやってます https://zenn.dev/p/dress_code

    ご清聴ありがとうございました 26 採用してます https://herp.careers/v1/dresscode/