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.5k
データエンジニアがこの先生きのこるには...?
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
運用ダッシュボードの設計を誰も教えてくれないのだけどみなさんどうしてるんですか? - チームに監視するという文化を根付かせるための第一歩を踏みたい -
satoshi256kbyte
1
110
Detecting Compromised CI with eBPF and Cilium Tetragon
lizrice
0
180
TSX の <Hoge<Fuga>> という構文に驚いた話 / tsx-type-argument-syntax
kanaru0928
0
220
全PRの83%がAIレビューだけでマージできるようになった開発組織はその後どうなったか
athug
1
1.6k
the container ship “Apple Silicon”@WWDC26 Recap -Japan-\(region).swift
shingangan
0
120
5分で問診!Composer セキュリティ健康診断
codmoninc
0
970
【やさしく解説 設計編・中級 #6】良いアーキテクチャとは ~ 一本の登り道の、行き先 ~
panda728
PRO
0
210
Cloudflare is Agents
chimame
0
160
PHP初心者セッション2026 〜生成AIでは見えない裏側を知る:今だからLAMPを通して仕組みを学ぶ〜
kashioka
0
900
「人を評価する AI」の設計と実装
ryoyanara
0
190
S3 を使うアプリケーションをローカル完結で動かすことに全力を注いでみた / Running S3 Apps Offline
contour_gara
0
450
琵琶湖の水は止められてもNet--HTTPのリトライは止められない / You might be able to stop the water flow of Lake Biwa but you can't stop Net::HTTP retries
luccafort
PRO
0
670
Featured
See All Featured
Why You Should Never Use an ORM
jnunemaker
PRO
61
10k
The Cost Of JavaScript in 2023
addyosmani
55
10k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.5k
HDC tutorial
michielstock
2
790
Evolving SEO for Evolving Search Engines
ryanjones
0
250
The SEO identity crisis: Don't let AI make you average
varn
0
530
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.8k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
4.3k
Leveraging LLMs for student feedback in introductory data science courses - posit::conf(2025)
minecr
1
340
Leadership Guide Workshop - DevTernity 2021
reverentgeek
1
330
Discover your Explorer Soul
emna__ayadi
2
1.3k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.5k
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