Sync Master
ブログ

未出荷注文ぶんを差し引きたい時の考え方

Shopify在庫同期のコツ

この記事の概要

シート在庫から未出荷注文ぶんを引いて反映したい——そう思った時に知っておくべきShopifyの「利用可能数」と「コミット済み」の関係を、シート同期の文脈で整理します。

Shopifyとシートを同期して在庫管理をしていると、ある時期からこんな悩みが出てきます。「倉庫に100個あるけど、未出荷の注文が20件入っている。シートには100と書いているけど、本当に売れるのは80個だ。これを正しくお客様に見せたい」。

この感覚はとても正しいのですが、Shopify側はすでに似たような考え方を持っています。それが「利用可能数」と「コミット済み」という2つの数字の関係です。今回は、シート同期の文脈で「未出荷ぶんを引く」というアプローチがどう成立するか、そしてShopifyのシステムとどう噛み合うかを整理してみます。

なぜ「シート在庫 − 未出荷」を考えるのか

まず、なぜこの計算をしたくなるのか。背景には、現場の感覚があります。倉庫の棚に100個ある商品。でも、すでに20件の注文が入っていて、明日には出荷予定。この時点で「実質的に売れる残り」は80個です。お客様には80と見せたい、という気持ちは自然です。

もう一つの動機は、オーバーセル防止です。シートの数字を100のままにしておくと、Shopify上でも100と表示され、その状態でさらに90件の注文が入ると、合計で110件の注文に対して在庫は100個、というオーバーセルが起きます。未出荷ぶんを引いた数字を表示しておけば、こうした事故を防げます。

つまり「シート在庫 − 未出荷 = 実質残数」という計算は、運用的には極めて健全な発想なのです。ただし、これをそのまま実装しようとすると、Shopify側の仕組みとぶつかる部分が出てきます。それを次に見ていきましょう。

利用可能数とコミット済みの関係

Shopifyは、在庫を複数のステータスで管理しています。代表的なのが「利用可能数(Available)」と「コミット済み(Committed)」です。これらの違いを理解しておくと、「シート − 未出荷」が必要なのか不要なのか、判断がつきます。

Shopifyにおける在庫の状態

Shopifyの在庫は、おおまかに以下のような状態に分かれます(公式ヘルプの記述を要約しています)。

  • On hand(在庫数) : 実際に倉庫にある総数
  • Committed(コミット済み) : 注文済みでまだ出荷していない数
  • Available(利用可能数) : 販売可能な数(On hand − Committed − その他)
  • Reserved(予約) : 一時的に確保されている数
  • Damaged(破損) : 販売不可の数

ポイントは、お客様の購入ボタンに反映されるのが「Available(利用可能数)」だということです。Shopifyは内部で勝手に「On hand − Committed」の計算をしてくれていて、利用可能数を表示してくれます。つまり、ある意味では「未出荷ぶんを引く」処理は、Shopify側ですでに行われているのです。

Shopify側の動きを理解する

ここが少し混乱しやすいポイントです。シートから同期している「100」という数字は、Shopify側でどの状態に書き込まれているのでしょうか。

多くの同期アプリは、シートの数字を「On hand(在庫数)」または「Available(利用可能数)」のどちらかに反映します。ここで設定を間違えると、思わぬ結果になります。

シートの数字を「On hand」として送る場合、Shopifyが自動的にコミット済みを引いてくれます。シート100、コミット20なら、お客様が見るのは80です。これは健全な動きです。

一方、シートの数字を「Available」として直接送る場合、Shopifyは引き算をしません。シート100をAvailable=100として上書きしてしまうので、コミット20ぶんが二重で考慮されないか、逆に消えてしまいます。これがしばしば混乱の原因になります。

シート同期での扱い方

ここまでの整理を踏まえて、シート側でどう運用するのがベストか考えてみます。結論から言うと、3つの選択肢があります。

  1. 011. シートには実在庫だけを持ち、Shopifyに「On hand」として送る。引き算はShopifyに任せる。
  2. 022. シートで未出荷ぶんを引いた数値を計算し、Shopifyに「Available」として送る。
  3. 033. シートには実在庫を持ち、バッファとして「コミット予測ぶん」をあらかじめ引く。

1番がもっともシンプルで、Shopifyの仕組みと素直に噛み合います。シート側は「倉庫にあるものを数えるだけ」に集中でき、コミット済みの数字を引っ張ってくる必要もありません。同期アプリも単純な動作で済みます。

2番は、シート側でShopifyの注文データを取り込む必要があるので、実装の手間が増えます。Apps Scriptや専用の連携ツールで未出荷数を引っ張ってきて、シートで引き算する流れになります。仕組みは作れますが、注文データとシートの同期タイミングがずれると、また別の問題が出てきます。

3番は、運用の知恵としてはアリです。「だいたいこれくらいの注文が常に未出荷で残っている」という肌感覚をもとに、その分をバッファとして差し引いておく。完璧ではないけれど、シンプルで運用しやすい方法です。

未出荷ぶんを引きたい、という発想自体は健全です。けれど、Shopifyにはすでに「コミット済み」という概念があり、ストアの設定次第では二重に引く必要がない場合も多い。まずはShopify側の在庫モデルを理解した上で、「自分のストアでは何を引きたいのか」「Shopifyが自動でやってくれるのは何か」を分けて考えると、混乱が解けるはずです。

在庫の数字一つにも、On hand、Committed、Availableといった複数の顔があります。シートとShopifyの同期を組む時は、これらの関係性を一度立ち止まって整理しておく価値があります。最初の数時間の理解が、後の何ヶ月もの混乱を防いでくれます。

関連記事

あわせて読みたい記事

在庫数を手で打ち込むのは、もうやめましょう。

Sync MasterをShopifyにインストールして、5分以内に最初の同期を実行。