見出し画像

Amazon Freshでのお買い物に学ぶバッチ処理

どうも、エンジニアのgamiです。

最近は乳飲み子の子育て真っ最中です。日々の買い物も、スーパーにわざわざ行くよりはネットスーパーの力を借りています。

いくつかのネットスーパーを検討した結果、最近ではAmazon Freshに落ち着いています。生鮮食品を含む大抵の買い物がAmazon上で完結するのはとても便利で、Amazonのお買い物体験には勝てないなあと痛感する日々です。

我が家では「そろそろマヨネーズが無くなりそうだから買わなきゃ」など気付いたとき、とりあえずAmazon Freshのカートに入れています。こうして日々カートに商品が追加されていき、カート金額が送料無料になる10,000円を超えたら購入します。

Amazon Freshで日々の買い物をしているとき、ふと「これバッチ処理みたいだなあ」と思いました。思ってしまったものは仕方が無いので、noteのネタとして昇華することにします。

今回は、Wikipediaの「バッチ処理」にある下記の説明を、Amazonのお買い物に例えて理解することを目標にしてみましょう。

データ処理におけるバッチ処理(バッチしょり)は、ひとまとまりのデータを一括して処理する方式である。逐次生み出されるデータを一定期間・一定量集めたものをバッチといい、このバッチ単位で処理をおこなう方式がバッチ処理である。
比較される方式として、逐次生み出されるデータをストリームとして捉え到着したデータを順次扱うストリーム処理がある[2][3]。データをキューイングせず即時処理するリアルタイム処理とも比較される。

バッチ処理 - Wikipedia

そこから日常的な出来事に例えて抽象的な技術用語を理解することの有用性について考えます。


我が家のAmazon Fresh運用

Amazon Freshトップページ

そもそもAmazon Freshとは、Amazon上で利用できるネットスーパーの1種です。通常のAmazonと比較すると、主に3つの特徴があります。

  • 通常のAmazonでは扱っていない生鮮食品を買うことができる

  • Amazon Primeに加入していても送料がかかるが、10,000円を超えると送料が無料になる

  • 通常のAmazonで買える商品でも、日用品はAmazon Fresh扱いで買えることがある

普通Amazonでは生鮮食品を購入することはできません。それに対してAmazon Freshはカートや購入フローがAmazonとは別になっており、生野菜や生肉などもAmazonのサービス上から購入することができます。

僕はAmazon Primeに入っているので、Amazonの通常配送料は無料になります。一方で、生鮮食品の方が在庫管理や配送スピードに対する要求が高いからか、Amazon Freshでの買い物には送料がかかるようになっています。

我が家では、次のようなフローでAmazon Freshでの買い物運用をしています。

  • 日々、買うべき物に気付いたタイミングでAmazon Freshのカートに追加しておく

  • Amazon Freshのカートが10,000円超えたら購入する

この運用の良いところは、買わなきゃいけない物を覚えたりどこかにメモしたりする必要が無くなることです。実店舗のスーパーに買い物に行く場合、買う物リストをどこかに持っておいて、それを見ながらかごに商品を入れていくことになります。他方、ほとんどの買い物をAmazonに寄せると、買うべき物が生じたらとりあえずAmazonかAmazon Freshのカートに突っ込んでおくだけでよくなります。いわばカート自体を「買う物リスト」として使うわけです。しかも、それがそのまま購入フローに乗るので買い忘れが発生しにくくなります。

より細かい話をすると、各アイテムの重要度、消費期限、消費スピードなどに応じて、家にどのくらいの在庫を持つべきかの分類を何となくしています。たとえば牛乳は無くても困らないが賞味期限が短いので、1回のAmazon Freshの注文で1つずつ注文します。ハンドソープやトイレットペーパーなどは、無くなると困るが消費期限は考えなくてもよいので、常に1セットは在庫を抱えるようにし、そのストックに手を付けた時点で新しくカートに追加します。だいたい2週間に1回はAmazon Freshの注文をするので、次の購入タイミングが来るまでの最大2週間はそのストックでしのぐことができます。

バッチ処理とは?

こうしたAmazon Fresh運用をしているとき、僕は「これバッチ処理みたいだなあ」と感じました。どういうことでしょうか?

実際の運用を再掲します。

  • 日々、買うべき物に気付いたタイミングでAmazon Freshのカートに追加しておく

  • Amazon Freshのカートが10,000円超えたら購入する

Wikipediaの説明を改めて見てみましょう。

データ処理におけるバッチ処理(バッチしょり)は、ひとまとまりのデータを一括して処理する方式である。逐次生み出されるデータを一定期間・一定量集めたものバッチといい、このバッチ単位で処理をおこなう方式がバッチ処理である。

バッチ処理 - Wikipedia

Amazon Freshで言えば、「逐次生み出されるデータ」というのは日々追加されるカート商品情報のことです。ここでいう「一括して処理する」とは「カート内の商品を一括して購入処理する」ことになります。僕の運用では、「約10,000円分という量のカート商品情報」が「バッチ」の単位です。

もちろん、普通はAmazon Freshの購入フローを指して「これはバッチ処理だ」とは言いません。しかし、技術的な概念が示す構造を現実世界の何かにたとえて理解することは、抽象的な概念の理解に役に立ちます。

ここで、システムにおけるバッチ処理の事例を見てみましょう。

たとえばあなたの会社が、顧客情報を管理しているシステムとマーケティング用のシステムを持っていたとします。マーケティング用のシステムでも顧客の情報を使った施策の出し分けがしたいので、顧客システム側で顧客情報が更新されたらマーケティングシステム側にもそれを反映させる必要があります。

こうしたシステム連携をバッチ処理で行いたいとき、たとえば次のようなフローでそれを実現します。

  • 顧客システムでは、会員用Webサイトなどを通じて顧客情報がリアルタイムに更新される

  • 夜中の2時に、前日分の顧客システム側更新データをまとめて抽出し、CSVファイルに出力して外部ストレージにエクスポートする

  • マーケティングシステムは、夜中の3時にそのCSVファイルをインポートしてマーケティングシステム側で保持する顧客マスタを更新する

2つの図を見比べると、我が家のAmazon Fresh運用と実際のシステムにおけるバッチ処理データ連携とで、データ処理の構造が似ていることがわかります。

Amazonのお買い物運用で理解する3つのデータ処理方式

Wikipediaの説明では、バッチ処理と比較される処理方式として、ストリーム処理とリアルタイム処理の2つが挙げられています。

比較される方式として、逐次生み出されるデータをストリームとして捉え到着したデータを順次扱うストリーム処理がある。データをキューイングせず即時処理するリアルタイム処理とも比較される。

バッチ処理 - Wikipedia

これらもAmazonでのお買い物に例えて説明してみます。

リアルタイム処理は、その名の通りデータが生まれた瞬間に即時で行う処理方式です。これはデータが生じてから処理されるまでのスピードに注目した呼び名です。バッチ処理はデータ生成から処理までそれなりのタイムラグがある点が、リアルタイム処理と異なります。

Amazonで言えば、買いたい物を思い付いたらすぐに「今すぐ購入」ボタンで購入処理に進むようなものです。

ストリーム処理は、この中だと最も抽象的で理解が難しい概念です。この言葉は、生成されるデータをどう捉えるかに注目した呼び名です。ストリーム処理では、データを「バッチ」のような大きな塊ではなく、水の流れのような「ストリーム」として扱います。

Amazonの買い物で言えば、日々追加されるカート商品を1日に1回1〜3個買い続けるようなイメージでしょうか。10,000円分のカート商品群を約2週間に一回購入するバッチ的な購入よりも、より細かい単位で随時購入をしていく感じです。ストリーム処理等で一時的に処理待ちのデータを貯めておく場所のことを「バッファ」と呼びます。このAmazonの例では、カートがバッファの役割を担っています。

ストリーム処理を使うシステムの例でいえば、たとえばYouTubeのLive配信システムが挙げられます。Live配信システムでは、配信者から動画データがリアルタイムに順次送られてきます。その次々に来る動画データを順次処理して視聴者に配信するような処理は、まさにストリーム処理と言えます。

抽象的な概念を現実世界の出来事に置き換えて理解する

抽象的な概念は、そのままの抽象度で理解しようとするとだいたい失敗します。例え話など、自分が理解できる具体的な事象からボトムアップに理解していった方が楽です。

たとえば「フロントエンド」と「サーバーサイド」の違いがわからない場合は、フロントエンドを「銀行の窓口」、サーバーサイドを「裏側の銀行業務」に例えてみるとわかりやすいかもしれません。

もちろん、例え話は常に不正確です。技術的なディティールを全て表現することはできません。一方で、最初に大枠を掴むときには役に立ちます。その概念が登場する文脈や概念同士の関係性をざっくりと把握したいとき、現実の何かに置き換えて考えてみると近道できることがあります。

こうしたテクニックは、難しい概念を誰かに教えるときだけではなく、その概念を理解したい人が詳しい人に質問するときにも使えます。「バッチ処理って例えばAmazonでカート商品をまとめて買うみたいなことですか?」などと例え話を使って質問ができれば、抽象的な世界に具体の楔を打ち込むことができます。そこから地に足のついた学習が始まるはずです。

ここから先は

0字
同僚と飲むビール1杯分の金額で、飲み会で愚痴るよりもきっと仕事が楽しくなる。そんなコラムを月に3〜4本お届けする予定です。

【初月無料】デジタル時代の歩き方について考えたことを発信します。ソフトウェアの時代とは何か。エンジニアの頭の中はどうなっているのか。NoC…

サポートをいただけると、喜びドリブンで発信量が増えます!初月無料のマガジン『仕事を楽しくするデジタルリテラシー読本』もおすすめです!