在庫同期がひととおり回りはじめたころに、多くのショップがぶつかる壁があります。ギフトセット、スターターキット、3本まとめ買いパック。名前はさまざまですが、共通しているのは「単品としても売っているものが、セットの中身としても売られている」という状態です。この形の商品が数点でも混ざると、それまで問題なく合っていた数字が、なぜか少しずつずれはじめます。
原因は同期の設定でも、シートの書き方でもありません。棚の上にある1つの山を、Shopify側では複数の販売単位が別々に指しているという構造そのものにあります。この記事では、その構造をまず正しく捉えたうえで、セット商品をどうモデル化し、シートでどう表現し、日々どう運用すれば同期する数字が正しくなるのかを順に見ていきます。難しい計算は出てきません。考え方の整理がほとんどすべてです。
セット商品が在庫同期を壊す理由
まずは何が起きているのかをはっきりさせておきましょう。セット商品の在庫が合わなくなるのは運用が雑だからではなく、物理的な現実とShopifyの数え方のあいだにずれがあるからです。そのずれの正体を3つの角度から見ていきます。
棚にある山は1つ、売り場の入口は複数
たとえば人気のハンドクリームが40本、倉庫の棚に積んであるとします。この40本は単品としても販売していますし、同時に「ハンドクリーム+ソープのギフトセット」の中身としても使われます。棚の上には山が1つしかないのに、その山にたどり着く売り場の入口が2つある、という状態です。
実務の感覚では、これは何も特別なことではありません。倉庫の担当者に聞けば「ハンドクリームは40本ですよ」と即答が返ってきます。ところがオンラインストアの側から見ると、単品ページにも在庫数が表示され、ギフトセットのページにも在庫数が表示されます。この2つの数字は、同じ40本という現実を別々に説明しようとしているわけです。在庫状態の違いを押さえておくと、この二重約束の理屈が腑に落ちます。詳しくはShopifyの在庫状態の読み解き方をどうぞ。
同じ1本が二重に約束されてしまう
入口が2つあるということは、同じ1本を2人のお客様に同時に約束してしまう可能性がある、ということでもあります。単品ページで40本を売れる状態にし、同時にギフトセットのページでも40セット分を売れる状態にしてしまえば、理屈のうえでは80本を売る用意ができていることになります。棚には40本しかないのにです。
この二重約束は、売れ行きが穏やかなうちは表面化しません。単品が5本、セットが3つ売れた程度なら、棚には十分な余裕があります。危ないのは、キャンペーンやセールで一気に注文が集まったときです。売り越しが起きるのはたいてい忙しい日で、しかも気づくのは出荷しようとして棚を見た瞬間、という遅いタイミングになります。
Shopifyの在庫はバリエーション単位で独立している
ではShopify側はどうなっているのかというと、在庫の数はバリエーション(正確にはその裏にある在庫アイテム)ごとに、ロケーション単位で保持されています。ギフトセットという商品を作れば、それは単品とはまったく別のバリエーションであり、別の在庫アイテムを持ち、自分専用の数字を抱えることになります。
そして重要なのは、この2つの数字のあいだに、標準では何の関係も設定されていないという点です。ギフトセットが1つ売れても、中身であるハンドクリームの在庫は自動的には減りません。両者は同じ棚の同じ山を指しているつもりでも、システムから見れば完全に独立した2つのカウンターなのです。
この事実は、悲観する話ではなく、むしろ設計の出発点になります。Shopifyが勝手に紐づけてくれない以上、その関係をどこかで自分たちが引き受ければよい、ということだからです。そしてその引き受け先として、在庫の単一の真実を置いているスプレッドシートは、かなり適した場所になります。
セット商品をどうモデル化するか
構造がわかったところで、次は方針を選びます。大きく分けると、構成品を真実として扱いセットの在庫を計算で出す方法と、あらかじめセットを組み立てて独立した在庫にしてしまう方法の2つです。どちらが優れているという話ではなく、商品特性と作業体制で決まります。
構成品を真実とし、セットは計算で出す
1つめの考え方は、在庫として実在するのはあくまで構成品であり、セットは「まだ形になっていない売り方」にすぎないと捉えるものです。ハンドクリームが40本、ソープが25個あるという事実だけを在庫として管理し、ギフトセットが何組作れるかは、そこから導き出す。棚の現実にいちばん近いモデルです。
この方式の良いところは柔軟さです。セットの構成を変えても、キャンペーンで新しい組み合わせを追加しても、管理すべき在庫の実体は増えません。構成品の数さえ正しく保たれていれば、セットの側は計算のルールを差し替えるだけで済みます。季節ごとに詰め合わせを組み替えるようなショップとは、とても相性が良い形です。
一方で負担もあります。セットが売れたときに構成品の在庫を減らす作業を、誰かが確実にやらなければなりません。出荷時に構成品を棚から取っているのですから現実は減っているのに、シート上の数字は自動では動かない。この差分をどう埋めるかを決めずに始めると、数日で数字が信用できなくなります。
セットの在庫数は「導かれる数字」である
構成品を真実とするなら、セットの在庫数は入力する数字ではなく、導かれる数字になります。ハンドクリームが40本、ソープが25個で、セットが各1つずつの構成なら、作れるセットは25組。組み合わせのうち、いちばん少ない構成品が上限を決めます。
この「いちばん少ないものが決める」という性質は、慣れると強力な武器になります。セットの在庫が少ない理由をいちいち調べなくても、どの構成品が足を引っ張っているかが数字を見れば一目でわかるからです。補充の優先順位も自然に決まりますし、仕入れ担当への相談も具体的になります。
ただし、この導かれた数字をそのままShopifyへ送るかどうかは、もうひと考え必要です。単品でも売っている構成品の場合、セット用に全量を割り当ててしまうと単品側が売れなくなります。実務では、構成品の在庫のうちどこまでをセットに回すかという配分の判断が必ず入ってきます。この点は後半の運用の話で詳しく扱います。
先に組んでしまえば、セットは普通の商品になる
2つめの考え方は、注文を待たずに実際にセットを組み立ててしまう方法です。箱に詰め、ラベルを貼り、専用のSKUを振って棚に並べる。こうなればギフトセットは計算で出す数字ではなく、数えられる実在庫になります。20組作れば在庫は20。単品と同じように扱えます。
この方式は運用が圧倒的に単純です。セットが売れたら、セットの在庫が1つ減るだけ。構成品との連動を気にする必要がありません。在庫同期の観点でも、セットは他の商品とまったく同じ1行として扱えるので、特別なルールが不要になります。定番の詰め合わせを継続的に売っているショップには、この形が向いています。
引き換えに失うのは柔軟性です。組んでしまった20組は、単品としては売れません。セットが動かず単品だけが売れ続ければ、箱の中で在庫が眠ります。また、組み立てそのものが作業時間を必要とします。どちらの方式を選ぶかは、次のような観点で整理すると判断しやすくなります。
- 構成品を真実とする方式 : 組み合わせの変更に強く、在庫が眠りません。ただしセット販売時に構成品を減らす運用ルールが必須です
- 先に組んでしまう方式 : 運用が単純で同期も普通の商品と同じ。ただし組んだ分は単品に戻せず、作業時間もかかります
- 販売期間が短く構成が頻繁に変わるなら前者、定番として長く売るなら後者が扱いやすくなります
- 両方を併用することもできます。定番セットは先に組み、期間限定セットは計算で出す、という使い分けは現実的です
シートでどう表現するか
方針が決まったら、それをスプレッドシート上の形に落とします。ここでの目標はひとつ、同期の瞬間にShopifyへ渡る数字が、狙ったとおりの確定した値になっていることです。構成品を真実とする方式を前提に、3つのポイントを見ていきます。
基礎データは構成品の行に置く
シートの土台になるのは、構成品ごとの実在庫です。ハンドクリーム、ソープ、巾着袋。それぞれが1行を持ち、ロケーションごとの実在庫を列で持つ。ここには計算を入れず、棚を数えた結果や入荷数といった、人が確認した事実だけを置きます。この層が濁ると、その上に載るすべての数字が信用を失います。
セットの行も同じシートに置いて構いませんが、性格がまったく違うことは意識しておいてください。構成品の行は「数えた結果」、セットの行は「計算した結果」です。列の背景色を変える、あるいはシートを分けるといった工夫で、入力していい場所とそうでない場所が一目でわかるようにしておくと、共同作業での事故が減ります。構成品の行をどう並べるかは、在庫管理シートの列設計の考え方が使えます。
制約になる構成品からセットの数を出す
セットの在庫数は、構成品ごとに「その構成品だけを見たら何組作れるか」を出し、その中の最小値を取ることで決まります。ハンドクリーム40本で1本ずつ使うなら40組、ソープ25個なら25組、巾着袋が60枚なら60組。最小の25が、このセットの上限です。
1セットに同じものを複数個使う場合も考え方は同じで、必要数で割ってから比べるだけです。3本セットならハンドクリーム40本で13組。小数は切り捨てます。細かい話に見えますが、切り上げてしまうと1組足りないセットが生まれるので、ここは必ず切り捨てにしてください。
そして忘れやすいのがロケーションです。構成品が複数拠点に分かれている場合、拠点をまたいで組み立てられるとは限りません。東京にハンドクリームが40本あっても、ソープが大阪にしかないなら、東京で作れるセットはゼロです。セットの数は必ず、同じ拠点にある構成品どうしで計算してください。
同期するのは数式ではなく確定した値
ここが実務でいちばん事故が起きやすい部分です。セットの在庫数を数式で導いていると、その数式は構成品のセルが変わるたびに再計算されます。誰かが棚卸しの途中で構成品の数を書き換えた瞬間、セットの数字も一緒に動く。そしてちょうどそのタイミングでスケジュール同期が走ると、作業途中の中途半端な数字がそのままShopifyへ渡ります。
対策はシンプルで、同期の対象にする列は、計算用の列とは別に用意しておくことです。計算列で導いた値を確認したうえで、同期用の列へ確定値として移す。この一手間を挟むだけで、シートの編集中に意図しない数字が飛んでいく事故はほぼ防げます。同期される数字が「今この瞬間の計算結果」ではなく「人が確認して確定させた値」になるからです。
同期のタイミングそのものも見直す価値があります。棚卸しや入荷作業が集中する時間帯を避けてスケジュールを組んでおけば、そもそも中途半端な状態に出くわす確率が下がります。そして万一おかしな数字が入ったときのために、同期の実行ログは必ず残しておいてください。いつ、どの値が送られたのかが追えれば、原因の特定は驚くほど早くなります。
日々の運用で気をつけること
設計が整っても、セット商品の在庫は動きの速い領域です。最後に、事故を未然に防ぐための3つの習慣を紹介します。どれも特別な仕組みは要らず、決めておくだけで効果があるものばかりです。
共有している在庫にはバッファを持たせる
単品としてもセットの中身としても売っている構成品は、常に二重約束のリスクを抱えています。ここを守るいちばん現実的な方法が、バッファを持たせることです。ハンドクリームが40本あるなら、単品用に25本、セット用に15本と分けて考える。あるいは全体から数本を安全在庫として引いてから配分する。
バッファは在庫を遊ばせる行為に見えるかもしれませんが、実際には売り越しのキャンセル対応や、お詫びの連絡にかかる時間を買っていると考えてください。数本の在庫を余らせるコストと、注文をキャンセルしたときに失う信頼を比べれば、どちらが高くつくかは明らかです。バッファの決め方は、在庫バッファの考え方にまとめています。
いちばん先に切れる構成品を見張る
セットの在庫数は最小の構成品で決まるのですから、日々見るべき数字も自然と決まります。全構成品を等しく気にする必要はなく、いま上限を作っている1つを追いかければ十分です。この観点を持つだけで、在庫の確認作業はぐっと軽くなります。
気をつけたいのは、この「足を引っ張っている構成品」が入れ替わることです。ソープを補充した翌日には、今度は巾着袋が上限になっているかもしれません。ですからシート上には、セットごとにいまどの構成品が制約になっているかが見える列を用意しておくと便利です。数字を並べるだけでなく、意味が読み取れる形にしておくということです。
組み立てをしたら必ず数え直す
セットを実際に組み立てた日は、在庫の意味が変わる日です。朝の時点でハンドクリーム40本という1つの山だったものが、夕方には単品用の25本とギフトセット15組という、性格の違う2つのものに分かれています。作業の前後で同じ数字を使い続けるわけにはいきません。
ですから、組み立て作業をひとつの在庫イベントとして扱ってください。作業が終わったら、使った構成品を減らし、出来上がったセットを数えてシートに反映する。この記録を後回しにすると、翌朝には誰も正確な数を言えなくなります。作業した本人が、その日のうちに数え直すのがいちばん確実です。
運用としては、次のような手順を決めておくと迷いません。難しいことは何もなく、順番を固定しておくだけで抜け漏れが防げます。
- 01組み立てを始める前に、使う構成品の在庫数をシートで確認します
- 02作業が終わったら、消費した構成品の数を実在庫から引きます
- 03出来上がったセットを実際に数え、セットの実在庫として記録します
- 04同期用の列を更新し、接続テストで宛先を確かめてから同期を実行します
- 05ログを開き、意図した値が送られていることを確認して作業を締めます
セット商品の在庫同期は、仕組みが複雑なのではなく、現実の捉え方が一段深いだけです。棚にある山は1つで、売り場の入口は複数ある。この非対称をどこで吸収するかを決めれば、あとはいつもどおりの在庫同期に戻ります。構成品を真実として扱うのか、先に組んで独立した在庫にするのか。自分たちの商品と作業体制に合うほうを選んで、シートの上でその選択をはっきり形にしておけば、セットが増えても数字は崩れません。