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
ネットスーパーにおける商品在庫データのアプリケーション構築事例
Search
10xinc
November 11, 2022
Programming
11k
7
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
ネットスーパーにおける商品在庫データのアプリケーション構築事例
10xinc
November 11, 2022
More Decks by 10xinc
See All by 10xinc
ディメンショナルモデリングを支えるData Vaultについて
10xinc
1
390
プロダクト本部カジュアル面談資料
10xinc
0
620
dbtとAIエージェントを組み合わせて見えたデータ調査の新しい形
10xinc
7
3.4k
データエンジニアがこの先生きのこるには...?
10xinc
0
820
株式会社10X - Company Deck
10xinc
90
1.7M
dbt開発 with Claude Codeのためのガードレール設計
10xinc
2
8.6k
会社にデータエンジニアがいることでできるようになること
10xinc
11
8.6k
アセスメントで紐解く、10Xのデータマネジメントの軌跡
10xinc
2
2.5k
スーパーマーケットのこれまでとこれから
10xinc
6
13k
Other Decks in Programming
See All in Programming
そこに3びきプロダクトがいるじゃろう——生成AI時代における“価値が届かない理由”の構造
kosuket
0
470
属人化した知識を、 AIが辿れる地図にする
pkshadeck
PRO
1
170
進化を続けるGo toolsの現在地 / The Current State of Ever-Evolving Go Tools
hond0413
0
200
全PRの83%がAIレビューだけでマージできるようになった開発組織はその後どうなったか
athug
1
1.6k
自動化したのに回らないテスト運用の壁ーAI時代の品質責任と生産性
mfunaki
0
130
Laravel Boostに学ぶ、AIにPHPを書かせる技術 〜OSSの実装から蒸留するエージェント制御の王道〜
kentaroutakeda
3
690
Japan Community Day at Kubecon + CloudNativeCon Japan 2026: Learning Container Privilege Control by Building My Own Low-Level Container Runtime
ternbusty
1
150
AI時代に設計が 最大の生産性レバーになる 意図駆動開発とデータを消さない設計|Don't Delete Your Data or Your Intent — Design as the Deepest Lever in the AI Era
tomohisa
1
830
AI Engineeringは、AIプロダクトだけのものか? 〜AIがソフトウェアを作る時代の新しい当たり前〜 / No AI in your product. AI Engineering in your development.
rkaga
4
400
仕様書を書く前にハーネスを作る - Agent Native開発は「探索を速く、判定を固く」
gotalab555
4
1.6k
複数の Claude Code が"放置"されてしまう問題をCLI ダッシュボードを自作して解決した話
sumihiro3
1
680
その節約、円になってますか?
isamumumu
1
730
Featured
See All Featured
Design of three-dimensional binary manipulators for pick-and-place task avoiding obstacles (IECON2024)
konakalab
0
540
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
287
14k
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.9k
Effective software design: The role of men in debugging patriarchy in IT @ Voxxed Days AMS
baasie
0
470
SEO in 2025: How to Prepare for the Future of Search
ipullrank
3
3.7k
Believing is Seeing
oripsolob
1
190
The Straight Up "How To Draw Better" Workshop
denniskardys
239
140k
Bash Introduction
62gerente
615
220k
The innovator’s Mindset - Leading Through an Era of Exponential Change - McGill University 2025
jdejongh
PRO
1
240
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.5k
My Coaching Mixtape
mlcsv
0
220
How Software Deployment tools have changed in the past 20 years
geshan
1
34k
Transcript
©10X, Inc. All Rights Reserved. ネットスーパーにおける商品在庫データのア プリケーション構築事例 データビジネスにおける dbtの活用事例 〜Ubie、LayerX、10X〜 株式会社10X 瀧本晋也
1
©10X, Inc. All Rights Reserved. 2 今日話すこと ドメイン駆動設計を参考に レイヤードアーキテクチャを設計し テストやCI等の工夫をしている話
©10X, Inc. All Rights Reserved. 自己紹介 3 所属: 株式会社10X 氏名: 瀧本 晋也
職種: データプロダクトエンジニア 居住: 山梨 Twitter: @takimo 最近はTokyo dbt Meetupのオーガナイザーを やってます
None
None
©10X, Inc. All Rights Reserved. 6 DWH構築以外にもdbtを使って 商品在庫データを作ってます
©10X, Inc. All Rights Reserved. なぜ商品在庫データを作る必要があるのか? 7 通常EC 店舗型ネットスーパー
品揃え 数十〜数百 数万点 在庫数の 管理 倉庫の入庫数と販売数で管理が可 能 基本的に日次での残在庫数等は数値管 理していない場合が多い(生鮮系や賞味 期限が短いものは売り切りが基本) 金額 あまり変わることはない チラシ価格や特売等、日単位で同一商品 で変化する • 日々変化する「金額」と取り扱う「商品数の多さ」から厳密な在庫数確認が困難で、人的な対応も限界 がある • Stailerでは店頭在庫数を自動で推定し、ネットスーパーの在庫データとして提供している
©10X, Inc. All Rights Reserved. 商品在庫データの作成プロセス 8
©10X, Inc. All Rights Reserved. 9 ここで 商品在庫データの 歴史を振り返ってみる
©10X, Inc. All Rights Reserved. 2021年前半 爆誕期 • 社内ではDWHの構築のためにdbtの導入が進んでおり、 dbtを使える人が増加 •
外部パートナーから提供されるデータから商品在庫データを生成する必要性が出る • データ内容の理解の難しさや変換処理の設計難易度 、プロダクトエンジニアのリソース的な観 点もあり、「データ変換処理」をdbtで実装するためのチーム が組成された • ファーストリリースがされる🎉 10 商品在庫データの歴史
©10X, Inc. All Rights Reserved. 2021年後半 拡大期 • 嬉しいことに様々なパートナーにお声をかけて頂き、 dbtを使った商品在庫データの生成 パイプ
ラインは増えた • パートナーごとに保有しているデータ仕様が異なりがあったが、開発ガイドライン(初期)を策定 し、一定の変換対応ができればサービスを提供できるようになっていた • dbtを採用した事により開発に携われる人の採用職種の幅を出すことができ、機動的に開発 チームを増員していくことが出来た 11 商品在庫データの歴史
©10X, Inc. All Rights Reserved. 2022年前半 戦乱期 • 個社毎に作ったパイプラインにも問題がで始める 🔥 •
複雑に入り組むリネージ • 同じような処理ロジックが様々なところに&下流に様々なロジックが混在しやすくなってしまって いた • また属人的に開発をする必要が高く、キャッチアップコストも高い状態に • 修正をしたりする開発難易度や品質確認のためのQA工数も高くなってしまった ◦ リネージが複雑でデータの流れを追うのが大変だったり、抽象度が荒いので様々なテーブルの確認が必要等 12 商品在庫データの歴史
©10X, Inc. All Rights Reserved. 13 何を改善すべきか 整理を始めた
©10X, Inc. All Rights Reserved. 課題の整理と理想へのギャップからのアクション 14 何を改善すべきか整理を始めた
©10X, Inc. All Rights Reserved. 15 ※知ろうとしてなかったわけではないですよ もっと業務を理解しないと 最適なモデリングの 抽象度、粒度を
より良い設計が出来ない!
©10X, Inc. All Rights Reserved. 16 パートナーのエキスパートな人の話しも聞きつつ 「そうだ現場に行こう」
©10X, Inc. All Rights Reserved. 実際にパートナーの店舗に伺って業務してみたり 17 アーキテクチャの共通化
©10X, Inc. All Rights Reserved. 配送やピッキング等すべての工程を知識をアップデート 18 アーキテクチャの共通化
©10X, Inc. All Rights Reserved. どういうモデリング、アーキテクチャにすべきか検討 • DRY(SSOT)を実現し、計算ロジックをテスト出来る状態にすることが必要命題 •
様々な開発手法のアプローチやモデリングを検討した ◦ dbtのベスプラ(staging, mart) ◦ ディメンジョンモデリング(fact, dimension) ◦ 他の開発手法であるMVCやDDD(ドメイン駆動設計)等 • 最終的にドメイン駆動設計の思考に近いアプローチが良さそうだと判断 19 アーキテクチャの共通化
©10X, Inc. All Rights Reserved. ドメイン駆動設計とは? • このスライドだけではぱっと説明するのは自分には無理だなと感じつつ。。 •
以下のようなアプローチで解決をしようとするものです ◦ 解決したい関心事(ビジネスや業務)を「ドメイン」という粒度で捉える ◦ ただし「ドメイン」を整理するためにはドメインの深い知識と理解が必要 ◦ 「ドメイン」同士の複雑性をオブジェクト指向や制約でコントロールする • 詳しく勉強したい人は書籍を! 20 アーキテクチャの共通化
©10X, Inc. All Rights Reserved. 21 ドメイン駆動設計の思想を取り込み レイヤードアーキテクチャ化する
©10X, Inc. All Rights Reserved. リファインしたアーキテクチャ 22 アーキテクチャの共通化
©10X, Inc. All Rights Reserved. なぜドメイン駆動設計が良いと思ったのか • 大まかな設計方針として「データを一定の粒度に一度まとめる(SSOT)」、その後利用する といった考えは持っていた •
DDDの中でドメイン(モデル)をまたぐ複雑な処理(今回の実装でいうと計算処理)はドメイ ンサービスとして切り出すような思想になっている • 実際のパイプラインでもこの計算処理の部分が複雑になりやすく、この処理を切り出し、テ ストできるようにしたかったのでやりたいことと思想がマッチした 23 アーキテクチャの共通化
©10X, Inc. All Rights Reserved. 5つのレイヤリングに役割を区分しテストで品質を保証 24 アーキテクチャの共通化 ソースデータ
・このデータを様々な ところから利用しない ゲートウェイ ・ソースデータをクレン ジングする処理層 ・データレイクとの入り 口を意識した名前 ドメインモデル ・ビジネスドメインを一 定の粒度で集約する ・ドメインモデル同士 は依存させない ドメインサービス ・ドメインモデル同士 を利用して複雑な処 理をするための処理 層 ・必ず実装する必要 はない アプリケーション ・最終的なユースケー スに沿った結合処理 等を行う
©10X, Inc. All Rights Reserved. 25 各レイヤーの責務を担保するため テストやCI等の工夫をしている
©10X, Inc. All Rights Reserved. not_emptyテスト • ソースデータが日付シャーディングで保存されているようなデータに対して •
実行日に所定のシャーディングがあるのか簡単にチェックできるカスタムジェネリックテスト 26 テストによる責務や品質の保証をする
©10X, Inc. All Rights Reserved. スキーマテスト(ジェネリックテスト) • dbt標準で提供されているnot_nullや uniqueを利用 •
追加で内包されているデータ型をチェック するための型チェック用のカスタムテスト も実装 27 テストによる責務や品質の保証をする
©10X, Inc. All Rights Reserved. ロジックテスト(スタブテスト) 28 テストによる責務や品質の保証をする
©10X, Inc. All Rights Reserved. datamocktoolの設定方法 29
©10X, Inc. All Rights Reserved. スプレッドシートのデータをもとにスタブテスト用の データ(SQL)に変換するツールを実装 30 テストによる責務や品質の保証をする
©10X, Inc. All Rights Reserved. リグレッションテスト用のチェッククエリマクロ • 本番の特定のテーブルの日次毎のデータ量推移と開発で作ったものを比較可能
• 自動的に標準偏差等も計算してくれる 31 テストによる責務や品質の保証をする
©10X, Inc. All Rights Reserved. まだまだ道半ばです • ネットスーパーを運営するためにはまだまだ様々なことが必要です •
今日はその難しさの中の一部分を紹介させてもらいました • 本日は技術方面の話が中心でしたが、実際は先方と仕様を調整したり、データプロダクトの企 画や仕様策定といった業務をリードする データプロダクトマネージャーと一緒に仕事をしていま す • 是非ご興味ある方はカジュアル面談等お気軽にお尋ねください 32 まとめ
None