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つの選択肢があります。
- 011. シートには実在庫だけを持ち、Shopifyに「On hand」として送る。引き算はShopifyに任せる。
- 022. シートで未出荷ぶんを引いた数値を計算し、Shopifyに「Available」として送る。
- 033. シートには実在庫を持ち、バッファとして「コミット予測ぶん」をあらかじめ引く。
1番がもっともシンプルで、Shopifyの仕組みと素直に噛み合います。シート側は「倉庫にあるものを数えるだけ」に集中でき、コミット済みの数字を引っ張ってくる必要もありません。同期アプリも単純な動作で済みます。
2番は、シート側でShopifyの注文データを取り込む必要があるので、実装の手間が増えます。Apps Scriptや専用の連携ツールで未出荷数を引っ張ってきて、シートで引き算する流れになります。仕組みは作れますが、注文データとシートの同期タイミングがずれると、また別の問題が出てきます。
3番は、運用の知恵としてはアリです。「だいたいこれくらいの注文が常に未出荷で残っている」という肌感覚をもとに、その分をバッファとして差し引いておく。完璧ではないけれど、シンプルで運用しやすい方法です。
未出荷ぶんを引きたい、という発想自体は健全です。けれど、Shopifyにはすでに「コミット済み」という概念があり、ストアの設定次第では二重に引く必要がない場合も多い。まずはShopify側の在庫モデルを理解した上で、「自分のストアでは何を引きたいのか」「Shopifyが自動でやってくれるのは何か」を分けて考えると、混乱が解けるはずです。
在庫の数字一つにも、On hand、Committed、Availableといった複数の顔があります。シートとShopifyの同期を組む時は、これらの関係性を一度立ち止まって整理しておく価値があります。最初の数時間の理解が、後の何ヶ月もの混乱を防いでくれます。