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
8
10k
ネットスーパーにおける商品在庫データのアプリケーション構築事例
10xinc
November 11, 2022
Tweet
Share
More Decks by 10xinc
See All by 10xinc
株式会社10X - Company Deck
10xinc
89
1.5M
アセスメントで紐解く、10Xのデータマネジメントの軌跡
10xinc
2
690
スーパーマーケットのこれまでとこれから
10xinc
5
11k
データプロダクト開発の歩み
10xinc
5
4.7k
10XにおけるData Contractの導入について: Data Contract事例共有会
10xinc
9
9.8k
10Xでのデータ基盤の変遷とこれから: データマネジメントのリアル 〜BtoB企業3社の歩みとこれから〜
10xinc
8
13k
10Xが掲げるオリジナルの品質特性について #nihonbashitesttalk / 10X quality characteristic
10xinc
2
1.7k
データマネジメントを支える武器としてのメタデータ管理
10xinc
8
45k
Elementaryを用いたデータ品質の可視化とデータ基盤の運用改善
10xinc
9
20k
Other Decks in Programming
See All in Programming
AI時代の『改訂新版 良いコード/悪いコードで学ぶ設計入門』 / ai-good-code-bad-code
minodriven
24
9.6k
「App Intent」よくわからんけどすごい!
rinngo0302
1
110
テスターからテストエンジニアへ ~新米テストエンジニアが歩んだ9ヶ月振り返り~
non0113
2
220
チームで開発し事業を加速するための"良い"設計の考え方 @ サポーターズCoLab 2025-07-08
agatan
1
470
20250708_JAWS_opscdk
takuyay0ne
2
130
[SRE NEXT] 複雑なシステムにおけるUser Journey SLOの導入
yakenji
0
150
Flutterで備える!Accessibility Nutrition Labels完全ガイド
yuukiw00w
0
170
AIと”コードの評価関数”を共有する / Share the "code evaluation function" with AI
euglena1215
1
180
“いい感じ“な定量評価を求めて - Four Keysとアウトカムの間の探求 -
nealle
2
12k
バイブコーディング超えてバイブデプロイ〜CloudflareMCPで実現する、未来のアプリケーションデリバリー〜
azukiazusa1
0
360
High-Level Programming Languages in AI Era -Human Thought and Mind-
hayat01sh1da
PRO
0
880
リバースエンジニアリング新時代へ! GhidraとClaude DesktopをMCPで繋ぐ/findy202507
tkmru
3
970
Featured
See All Featured
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
Statistics for Hackers
jakevdp
799
220k
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
Unsuck your backbone
ammeep
671
58k
Gamification - CAS2011
davidbonilla
81
5.4k
Balancing Empowerment & Direction
lara
1
460
Git: the NoSQL Database
bkeepers
PRO
430
65k
It's Worth the Effort
3n
185
28k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
7
750
Intergalactic Javascript Robots from Outer Space
tanoku
271
27k
Fireside Chat
paigeccino
37
3.5k
Build your cross-platform service in a week with App Engine
jlugia
231
18k
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