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

生鮮食品をユーザーに届ける流通の仕組みと技術 / Distribution in Cookpad Mart 2022

OSA Shunsuke
November 30, 2022

生鮮食品をユーザーに届ける流通の仕組みと技術 / Distribution in Cookpad Mart 2022

Cookpad TechConf 2022 で話した内容です。
https://techconf.cookpad.com/2022/

(近々動画がアップロードされる予定。アップロード後に URL を記載します)

OSA Shunsuke

November 30, 2022
Tweet

More Decks by OSA Shunsuke

Other Decks in Technology

Transcript

  1. 生鮮食品をユーザーに届ける 流通の仕組みと技術 長 俊祐 買物プロダクト開発部 流通基盤アプリケーション開発グループ 1

  2. 自己紹介 • 長 俊祐 / OSA Shunsuke • @s_osa_ •

    クックパッドマートの流通をつくっているサーバーサイドエンジニア • ソフトウェアと現実世界にまたがる問題解決が好物 • 先日、趣味でフォークリフトの免許を取りました 2
  3. 今日話すこと • クックパッドマートが流通をつくる理由 • これまでにつくってきたもの • これからつくっていくもの 3

  4. 4 クックパッドマートが流通をつくる理由

  5. 5 世の中には料理が楽しくなるような 魅力的な食材がある

  6. 6 農家直送の新鮮な野菜

  7. 7 塩をして焼くだけで 主菜にもつまみにもなる マグロのテール

  8. 8 もちもちでおいしい 包むのがいつもより上手くなる 餃子の皮

  9. 9 魅力的な食材に出会えていますか?

  10. 10 今ある仕組みでは届いていない 魅力的な食材を届けるための流通をつくる

  11. 11 これまでにつくってきたもの ステーション配送 配送オペレーション 配送計画

  12. 12 ステーション配送

  13. 毎日の料理に使いやすい食材配送 • 宅配の受け取りのための在宅は結構大変 • 生鮮食品には消費期限が短くて再配達が適切ではない食材も多い • 日々の食材を買うときに送料は大きな負担になる 13

  14. 14 • 冷蔵庫への置き配モデル • 好きなタイミングで受け取り • 在宅や再配達が不要 • まとめて配送することで1品か ら送料無料を実現

    ステーション配送
  15. QRコードによる冷蔵庫解錠 • アプリに表示されるQRコードで解錠 • 受け取りがある人だけが開けられる 15 (1) QRコード読み取り (2) QRコードの中身(JSON

    Web Token)を POST リクエストで送信 (3) 署名と内容の検証 (4) 解錠 QRコード スキャナ サーバー (Ruby/Sinatra) 施錠解錠機構 QRコード スキャナ サーバー (Ruby/Sinatra) 施錠解錠機構
  16. 16 配送オペレーション

  17. 大量の商品を正確に運ぶ • 様々な事業者からバラバラの荷姿で出荷 される • 複数の事業者から一見似たような商品が 出荷されることもある • 多種多様かつ大量の商品を正確に届ける 必要がある

    17
  18. 18 • 目の前のモノの識別 ◦ どういった商品か ◦ 誰の注文の商品なのか • 作業指示 ◦

    どこに届けるのか ◦ どのように仕分けするのか ラベル
  19. 安全かつ高速にラベルを改善する • ラベルは作業性に大きく影響するため、試行錯誤のために頻繁に変更 したい • ラベル印刷が止まったり、情報が正確でなくなると流通が止まってし まうため、ラベルまわりの変更はリスクが大きい • 高速に改善したいのに速度が出せない •

    読み書きしやすく、テストしやすく、安全かつ高速に変更を入れてい くために、データ生成用の仕組みを整備 19
  20. 使用 20 Label::Element 各種表現を生成 #to_binary #to_html #to_plain_text Label::Builder Label::Template •

    ラベル要素(Label::Element)を木構造のオ ブジェクトとして生成、必要に応じて各種 表現に変換 • 個々のラベルに加えてラベル生成の仕組み 自体もテストされ、プレビューなどの仕組 みも用意することで、安全かつ高速に変更 を入れていけるように • 印刷 • テスト • プレビュー • ログ • dry run 生成 生成 ラベル テキスト フォントサイズ変更 テキスト テキスト 中央寄せ
  21. 21 • 俯瞰的な情報の提供 ◦ 配送ルート情報の閲覧 ◦ 温度情報の表示・警告 ◦ 作業マニュアルの閲覧 •

    インタラクティブな操作 ◦ 各ドライバーへのルートの アサイン ◦ ラベル印刷 ◦ 作業経過の報告 配送アプリケーション
  22. オペレーション改善を駆動する配送アプリケーション • 配送オペレーションは頻繁に試行錯誤・改善していきたい • 元々は Android/iOS アプリだったが、チーム体制なども踏まえた開発 速度を考慮して Web に移行

    ◦ サーバーサイドの施策が続く時期があるなど、モバイル開発が常 に必要なわけではないので、専属の開発者を抱えるのが難しい ◦ QRコード読み取りなど Web でも出来ることが増えてきた • 主な使用技術 ◦ TypeScript, React (Next.js), GraphQL, MUI, OpenID Connect (Azure AD B2B) 22
  23. 23 配送計画

  24. 実行可能かつ効率的な配送計画 • オペレーション実行のためには計画が必要 • 所定時刻までの配送完了など、いくつかの満たすべき制約がある • 配送にかかるコストは極力小さくする必要がある 24

  25. 25 • 各ステーションに配送するため のルートを組む • 種々の制約を考慮する ◦ 配送所要時間 ◦ 積載量

    ◦ ステーションの営業時間 • 制約を満たした上で、できるだ け少ない車両で配送したい ルート生成
  26. ルート生成を支える技術 • OSRM (Open Source Routing Machine) ◦ 道路を考慮して、2点間の移動時間を計算してくれる •

    OR Tools ◦ 数理最適化ライブラリ ◦ Ruby 版の or-tools gem を使って、配送計画問題(VRP)の近似解 を求めている ◦ 2点間の移動時間の集合や積載量制約などの条件に基づいて、ルー トを組んでくれる • 上記の2つを軸に、自分たちのサービスが求める制約を満たすための 各種条件や前処理・後処理を追加して実装している 26
  27. 27 これからつくっていくもの

  28. 28 • 増え続ける物量を常に届け続け る • たとえば ◦ 作業効率や倉庫の空間効率 を高めるオペレーションの 設計

    ◦ オペレーションを実現する ソフトウェアの開発 ◦ オペレーションの自動化 スケーラブルな流通
  29. 29 • 人間が作業しているため、どう してもミスがある • ミスを限りなくゼロに近づけて いく • たとえば ◦

    ハンディスキャナの導入に よる作業支援 ◦ 商品追跡ログの取得による 原因究明と継続的改善 正確・確実に届く流通
  30. 30 • まだまだ届けられていない商品 がある • もっと便利にしたい • たとえば ◦ 大きい商品や長尺の商品を

    運ぶ仕組み ◦ 冷凍食材の取り扱い ◦ もっと早く届く仕組み 柔軟で便利な流通
  31. 31 おわりに

  32. まとめ • クックパッドマートでは魅力的な生鮮食品をユーザーに届けるため に、流通構造やオペレーションの設計からソフトウェア開発まで、流 通の仕組みづくりに総合的に取り組んでいます • 物理世界特有の課題などもあって決して簡単ではないけど、挑戦しが いがあって非常に楽しいです • ここで紹介できたのはごく一部なので、興味をもっていただけた方は

    ぜひお気軽にお声がけください 32
  33. 関連資料 • 『クックパッド生鮮 EC お届けの裏側 2022 年版』 ◦ https://techlife.cookpad.com/entry/cookpad-mart-distribution-2022 •

    『クックパッドマートにおける宣言的ラベル生成』 ◦ https://techlife.cookpad.com/entry/2021/08/18/100000 • 『クックパッドマートのドライバー向けWebアプリケーション』 ◦ https://techlife.cookpad.com/entry/driver-web-app-in-cookpad-mart-2022 • 『クックパッドマートの配送ルートを自動生成している仕組み』 ◦ https://techlife.cookpad.com/entry/cookpad-mart-routing-2022 33
  34. 34 Thank you for listening!