メインコンテンツまでスキップ
ストア運営・コンテンツ

Shopifyの公式は「On hand = Committed + Unavailable + Available」。上位表示されている解説記事は真ん中の項を落としている

Shopifyヘルプセンターは、On handをCommitted・Unavailable・Availableの合計だと定義しています。ところが「Shopify available vs on hand」で上位に出てくる解説記事は「Available = On hand − Committed」と書き、Unavailableを丸ごと落としています。その落ちた項こそが、サードパーティアプリの保留在庫が入る場所です。Shopify自身のドキュメントには「ドラフト注文の予約はCommitted、サードパーティアプリが保持する在庫はUnavailableとして表示される」と明記されています。API側は8つの数量ステートを持ち、そのうち4つを管理画面の1ラベルに畳んでいます。2026年8月5日、Shopifyはドラフト注文・移動・出荷の保留をreservedからcommittedへ移行しました。アプリはcommittedに書き込めず、inventorySetQuantitiesはon_handとavailableしか設定できず、8ステートのうち5つは変更してもWebhookが飛びません。各数字の意味、8月の移行で何が変わったか、syncX: Stock Sync・Trunk・Prediko・Sumtrackerがどの数字を触るのか、管理画面だけでできる確認手順を整理しました。Shopify公式ドキュメントと各社の料金ページは2026年9月8日に確認しています。

AIECアプリ研究所 AI編集部公開日 読了 18#Shopifyブログ運営#アプリ比較

この記事でわかること

この記事の目次Contents閉じる開く

Shopifyヘルプセンターの在庫ステートのページには、こう書かれています。「On hand在庫は、CommittedUnavailableAvailableの合計で構成されます」。

項は3つです。ところが「Shopify available vs on hand」で検索して出てくる解説記事を読むと、Sumtrackerのガイドは公式を「Available Inventory = On Hand − Committed」と書いています。Predikoのガイドは本文中でUnavailableに触れているぶん精度が高いのですが、それでも自社のFAQでは「ShopifyはOn Hand、Available、Committed、Incomingの4ステートで在庫を管理している」「AvailableはOn HandからCommittedを引いて自動計算される」と説明しています。

どちらもUnavailableが消えています。そしてUnavailableは、サードパーティアプリが在庫を書き込む先そのものです。

これは細かい言葉遣いの問題ではありません。数字が合う状態と合わない状態の差です。

Shopifyは8つの数字を持ち、5つだけ見せている

管理画面に出る列は5つです。On handAvailableCommittedUnavailableIncoming

一方、GraphQL Admin APIは8つの数量名を扱います。Shopifyの在庫管理ドキュメントによる対応関係は次のとおりです。

APIのステート中身管理画面での表示
on_handロケーションに物理的にある総数On hand
available販売できる在庫Available
committed未フルフィルの注文、ドラフト注文での予約、出荷準備完了の移動に含まれる数量Committed
reserved保留や検査のために一時的に取り置いた在庫Unavailable
damaged破損により販売できない在庫Unavailable
safety_stock売り越し防止のために確保した在庫Unavailable
quality_control品質検査中の在庫Unavailable
incomingロケーションへ向かっている在庫Incoming

APIの4ステートが、管理画面では1つのラベルに畳まれています。Shopifyは計算式も明示していて、on_handは「availablecommittedreserveddamagedsafety_stockquality_controlの各ステートにある在庫数量の合計に等しい」とされ、on_hand以外の7ステートは相互排他です。

つまり、項を落とさない式はこうなります。

Available = On hand − Committed − Unavailable

棚に100個あり、未フルフィルの注文に10個がCommitted、アプリがsafety stockとして35個を確保しているなら、Availableは55です。2項の式で計算すると90になるはずだと思い込み、動いていない35個を半日探すことになります。

2026年8月5日に何が変わったか

Shopifyは2026年8月5日、「Draft order and transfer/shipment inventory is moving from reserved to committed」という変更を告知しました。内容は次のとおりです。

  • ドラフト注文、移動、出荷について、これまでreservedに入っていた数量がcommittedに入るようになった。
  • 移行が走った時点で在庫を保持していたアクティブなドラフト注文と未完了の移動・出荷だけを対象にした、1回限りのデータ移行である。
  • availableon_handは影響を受けない。Shopifyの表現では「数量は2つの『unavailable』なバケットの間を移動するだけ」で、これは販売できない2つのステートという意味であり、管理画面がUnavailableと呼ぶものが2つあるという意味ではない。
  • reservedcommittedも引き続き有効なクエリ可能名で、削除も改名もされていない。

マーチャント側に見える影響は、Shopifyの注記に書かれています。在庫調整レポートを使っているマーチャントには「reservedの値がcommittedへ移り、移行実行時に1回限りの補正エントリが加わる」ように見えます。

上の対応表を踏まえると、この違いが効いてきます。reservedは管理画面でUnavailableとして表示され、committedCommittedとして表示されます。つまり管理画面上では、移行が適用された日にUnavailable列が減り、Committed列が増えました。調整履歴には、誰も指示していない補正行が1つ残ります。On handとAvailableの合計は動いていません。8月に説明のつかないステート変動を見つけていたなら、まずここを確認する価値があります。

ヘルプセンターの記述も現在は一致していて、Committedは「未フルフィルの注文、ドラフト注文での予約、出荷準備完了になった移動に含まれる、販売できない数量」と定義されています。

落ちている項が効いてくる場所

1. アプリの保留在庫はCommittedではなくUnavailableに入る

Shopifyの調整履歴のドキュメントは、この点をはっきり書いています。Reservation createdというアクティビティの説明として「ドラフト注文のために確保された在庫はCommittedとして表示され、サードパーティアプリが保持する在庫はUnavailableとして表示される」とあります。

保留の種類が2つ、表示される列も2つ。そしてUnavailableには、Adjust byで調整するときに移動元・移動先として選べる4つの内訳があります。Damaged、Quality control、Safety stock、Otherです。

2. Committedに書き込めるアプリは存在しない

Shopifyの在庫管理ガイドのLimitationsには「Admin APIを使ってcommittedステートの在庫数量を調整・移動することはできません」と書かれています。Committedは、注文の作成とフルフィル、ドラフト注文での予約、出荷準備完了になった移動を通じて、Shopify側だけが動かします。

アプリにできることは、想像より狭い範囲です。

  • inventorySetQuantitieson_handまたはavailableの数量を明示的に設定する。この2つだけです。
  • inventoryMoveQuantitiesavailableと4つのunavailableステートの間、またはunavailableステート同士の間で在庫を移動する。
  • inventoryAdjustQuantitiesは差分で調整する。

3PLや同期アプリが在庫を「予約」するとき、実際に起きているのはavailableから4つのunavailableステートのどれかへの移動です。Committedには触れていませんし、触れられません。

3. 8ステートのうち5つは変更してもWebhookが飛ばない

Shopifyのドキュメントの記述はそのままです。「committedreserveddamagedsafety_stockquality_controlの各在庫ステートの変更は、Webhookをトリガーしません」。

在庫関連のWebhookトピックはinventory_items/createinventory_items/updateinventory_items/deleteinventory_levels/connectinventory_levels/disconnectinventory_levels/updateです。

ここに前掲の計算式を当てると、少し落ち着かないケースが出てきます。注文をフルフィルするとcommittedが減り、その分on_handも減りますが、availableは動きません。販売可能在庫の変化だけを見ているアプリは、在庫が物理的に倉庫を出るその瞬間に、反応する材料を持っていないことになります。

4. 月末在庫金額はUnavailableを除外している

Month-end inventory snapshotMonth-end inventory valueはどちらもAvailableの数量を使います。Shopifyはこれらのレポートについて、Availableは「フルフィル待ちの注文のCommitted在庫」と「移動に含まれるIncomingの数量」を除外すると明記しています。定義上、AvailableはさらにUnavailableも除外します。

月末時点でアプリが35個をsafety stockとして保持していれば、その在庫は棚にあり、仕入代金も払っているのに、Shopifyの月末在庫金額レポートでは0として扱われます。これらのレポートにはもう2つ制約があります。在庫系メトリクスの履歴は2023年10月1日までしか遡れないこと、削除したロケーションの過去在庫はまったく表示されないことです。

5. CSVで書き戻せる数字は1つだけ

All statesを選んで在庫をエクスポートすると、Incoming、Unavailable、Committed、Availableの列が並びますが、すべて**(not editable)と付きます。加えてOn hand (current)On hand (new)**があり、書き戻せるのはOn handだけです。

Available形式のエクスポートはロケーション名を列見出しに使う簡易版で、Shopify自身の言葉では「誤った上書きに対する保護を提供しません」。All states形式はOn hand (current)を現在値と突き合わせ、エクスポート後に変わった行を弾いてくれます。

監査という観点でもう1つ。外部システムから同期しているマーチャント向けの案内は一括編集ツールを勧めたうえで、「一括編集ツールを使った場合、在庫の動きの記録は残りません」と注記しています。

アプリはどの数字を触っているのか

導入前に確認する価値があるのはこの点ですが、4本のうち公開ドキュメントで答えているのは1本だけでした。

syncX: Stock Sync Migrate BulkのShopify App Storeリスティングページ上部

出典: Shopify App Store(syncX: Stock Sync Migrate Bulk、2026-09-08時点)

syncX: Stock Sync Migrate Bulk は、この選択を設定項目として明記している唯一のアプリでした。Quantity Fieldのヘルプ記事にはQuantity Selectionという設定があり、「デフォルトではStock SyncはAvailable Quantityを使います。これをOn Hand Quantityに変更でき、更新は選択した方に従います」と説明されています。

関連記事では、それぞれを選んだときに何が起きるかを数値例で追っていて、その計算はCommittedとUnavailableの両方がある場合まで含んだ3項の式になっています。App Storeの料金は、2,000商品まで・手動更新のみのFreeプラン、Starterが$7/month、Expertが$10/monthで、追加フィード・追加5,000商品・スケジュール短縮がそれぞれ従量です。リスティングにはBuilt for Shopifyバッジがあり、評価は910件で4.7です。

Trunk ‑ Stock Sync & BundlingのShopify App Storeリスティングページ上部

出典: Shopify App Store(Trunk ‑ Stock Sync & Bundling、2026-09-08時点)

Trunk ‑ Stock Sync & Bundling は逆の設計を取っています。マスターを指定させません。FAQには「Trunkはタイムスタンプ付きの変更を基準にするため、マスター在庫を指定する必要はありません。Trunk自体が実質的なマスターになります」とあり、「他の連携が加えた在庫変更も検知して同期できます」と書かれています。同じFAQは範囲についても率直で、「現時点でTrunkが同期するのは在庫数だけです」としています。

Shopifyのどの数量ステートを読み書きしているかは、公開FAQにもShopify連携ページにも記載がありません。料金は月間注文数によるバンド制で、基本ティアがEssential $35/month、Pro $39/month、次のバンドが月101〜200件から始まり、月401〜800件でそれぞれ$89と$119になります。14日間の無料トライアルがあり、評価は407件で4.9です。

Prediko Inventory ManagementのShopify App Storeリスティングページ上部

出典: Shopify App Store(Prediko Inventory Management、2026-09-08時点)

Prediko Inventory Management はStockyの移行先として打ち出されています。Shopifyヘルプセンターは自社の在庫アプリについて「Stockyアプリは2026年8月31日以降利用できなくなります」と告知しています。需要予測、発注書、移動、棚卸しを備え、料金はFree to installで、プランは店舗の売上規模で区切られます。Starterが$49/monthで売上$100kまで、Scale-upが$119/monthで$500Kまで、Growthが$199/monthで$2Mまで、$2M超のEnterpriseはFree to install表記で価格は要問い合わせです。14日間の無料トライアル、評価は247件で4.9です。

Predikoの解説記事は競合記事の中では最も精度が高く、本文でUnavailableを列挙し、在庫バッファの挙動も正しく説明しています。それでもFAQブロックだけは、4ステートと2項の式に戻ってしまっています。

Sumtracker Inventory ManagerのShopify App Storeリスティングページ上部

出典: Shopify App Store(Sumtracker Inventory Manager、2026-09-08時点)

Sumtracker Inventory Manager はFree to installで無料トライアルあり、評価は124件で4.8です。料金は売上ではなく年間受注件数で区切られ、料金ページの表では年間2,500件でManageが$59/month、Replenishが$119/month、年間100,000件でそれぞれ$399と$599です。なお同じページの説明文はReplenishを「$199/monthから」としており、表と本文が食い違っています(2026年9月8日時点)。どちらのプランも倉庫10拠点・販売チャネル10件までを含みます。

FAQにある次の一文は安心材料であり、同期系ベンダーに共通して確認すべき点でもあります。「Sumtrackerは安全にインストールできます。ストアには何もプッシュしません。同期をオンにしたときに初めて在庫の更新を始めます」。

syncX: Stock SyncTrunkPredikoSumtracker
書き込むステートの明記あり(AvailableまたはOn hand)記載なし記載なし記載なし
最低料金(USD/month)Freeプランあり/Starter $7$35Free to install/Starter $49Free to install/Manage $59
課金の分母商品数・フィード数・更新頻度月間注文数店舗売上バンド年間受注件数
無料トライアルFreeプランあり14日14日あり
Built for Shopifyバッジあり表示なし表示なし表示なし
App Store評価(件数)4.7(910)4.9(407)4.9(247)4.8(124)

「記載なし」は、末尾の出典に挙げた各社ページで確認できなかったという意味です。設定が存在しないという意味ではないので、必要なら提供元に直接確認してください。料金と評価は2026年9月8日時点のものです。

そして4本とも、Committedには書き込めません。どのアプリにもできないからです。

アプリなしでできる確認手順

以下はすべて標準機能です。

  1. バリアント単位で内訳を見る。 商品ページ・バリアントページの在庫カードには、アクティブなロケーションごとにOn handと、0を超えるCommitted・Unavailable・Incomingが表示されます。そのバリアントをフルフィルしないロケーションではAvailableは表示されません。
  2. 1SKUで検算する。 On handからCommittedとUnavailableを引きます。Availableと一致しないなら、見ているロケーションが違うか表示が古いだけで、在庫が消えたわけではありません。
  3. 誰が動かしたかを見る。 バリアントのView adjustment historyを開きます。Created by列に、調整を行ったスタッフ・アプリ・販売チャネルが表示されます。Reservation createdReservation updatedReservation deletedがドラフト注文とサードパーティアプリの保留です。
  4. 180日より前を見る。 商品単位の調整履歴は直近180日までです。それ以前はInventory adjustment changesレポートを使うと、SKU、ロケーション、スタッフ、アプリ、調整理由で絞り込めます。
  5. アプリ別の調整回数を数える。 Inventory adjustments by countレポートは「各アプリが作成した在庫調整は何件か」に直接答えます。同じSKUに2つのアプリが書き込んでいるなら、ここに出ます。
  6. 見つけたUnavailableを戻す。 在庫ページでSet toAdjust byに切り替え、移動元にunavailableステート、移動先に自店舗ロケーションを指定します。履歴にはMoved from Safety stockのように記録されます。

何が必要かの判断

アプリが不要なケース。 Shopifyストア1つ・1チャネルで販売していて、On handとAvailableの差が未フルフィルの注文だけなら、それはCommittedが本来の役目を果たしているだけです。アプリで改善できる部分はありません。

まず数字を読むべきケース。 すでに数字が合っていないなら、導入済みのアプリがUnavailableに在庫を置いている可能性があります。標準の調整履歴レポートを使えば、どのアプリがどの調整をしたかは数分で特定できます。

フィード同期型のアプリ。 syncX: Stock Syncのようなアプリは、仕入先や別システムから定期的に数量が送られてきて、そのフィードがAvailableとOn handのどちらを設定するかを明示的に制御したい場合に向きます。safety stockを併用しているときほどこの差は大きく、同社の数値例が示しているのはまさにその違いです。

リアルタイム多チャネル同期型のアプリ。 Trunkのようなアプリは、同じSKUをShopifyとマーケットプレイスに同時出品していて、買いたいリスクが「夜間ファイルの突き合わせ」ではなく「数秒単位のチャネル間売り越し」である場合に向きます。

在庫計画型のアプリ。 PredikoやSumtrackerは、問いが「チャネル間で同期しているか」ではなく「何を、いつ、どこから発注するか」に移ったときの選択肢です。2026年8月31日以降Stockyが使えなくなって空いた領域です。ただし課金の分母が違うため結論も変わります。Predikoは店舗売上、Sumtrackerは年間受注件数です。売上が大きく件数が少ない店と、売上が小さく件数が多い店では、同じ2つの価格表から逆の答えが出ます。

どのアプリを入れるにしても、同期をオンにする前に提供元へ聞いておく質問は1つです。このアプリはどの数量ステートに書き込みますか。 4本のうち公開ドキュメントで答えているのは1本だけで、しかもそれが月末に在庫が合うかどうかを決める答えです。

出典

RelatedShopifyにカート内送料計算の標準機能はない。全アプリが同じAjaxエンドポイントを叩いていて、2026年に2回壊れた

Shopifyの無料テーマは「Taxes and shipping calculated at checkout」の一行で終わります。カート内で送料を見積もる標準UIはありません。あるのはCart Ajax APIだけで、POST /cart/prepare_shipping_rates.json と GET /cart/async_shipping_rates.json、それにスロットリング対象の GET /cart/shipping_rates.json です。App Storeにあるカート内送料計算アプリはすべてこの上に乗っています。つまり単一障害点であり、実際に2026年に2回落ちました。2026年1月27日にShopify側の変更で422エラーが発生し翌28日にロールバック、2月3日に再発して2月6日に再ロールバックされています。さらにMarket-driven shippingが2026年10月1日から段階提供され、料金の合算ルールが変わります。フィーチャープレビューでは、チェックアウトでは正しく出る住所に対してこれらのエンドポイントが「Country/region not supported」を返す事象も報告されました。Shopifyが標準で何を提供しているか、カート内表示アプリとチェックアウト側のレート計算アプリがなぜ別物なのか、CBB Shipping Rates Calculator、Dr Cart Shipping Rates & Rules、FP1 - Cart Shipping Calculator、SMART Shipping Rates & Rulesの検証済みUSD料金までまとめました。Shopify公式ドキュメント、開発者フォーラム、App Storeリスティングは2026年9月9日に確認しています。