【Shopify GraphQL API徹底解説】在庫とストアのAPI連携を可能にする3つのオブジェクト

  • このエントリーをはてなブックマークに追加
  • Pocket
  • LINEで送る
inventory-object-relationship

本記事の所要時間: 6分

Graph APIは最初から全てを理解することが困難なので、範囲を決めて少しずつ理解していく必要があります。

【Shopify GraphQL API徹底解説】シリーズでは、Shopify GraphQL APIの仕様から、主要なオブジェクトを少しずつ読み解いていきます。

説明は記事内で完結しているので、シリーズの他の記事を参照しなくても理解できるようにしています。

今回解説するのはInventoryItemとLocationとInventoryLevelです。

商品の在庫管理は、ストア運営において、最も煩雑な業務のひとつと言えるでしょう。

返品に対応することや、正確な在庫数を保持することなどが求められます。

特定の業界に限った商慣習なども考慮する必要があります。

在庫管理にまつわるアプリは切実に求められています。

今回の内容を理解すれば、マーチャントに喜ばれるアプリのアイデアが浮かんでくるかもしれません。

まずは、在庫管理で登場する3つのオブジェクトに商品バリエーション(ProductVariation)を含めた関係性を見ていきましょう。

InventoryItemとInventryLevelとLocationの関係性

inventory-objects-relatinship

InventoryItemは商品バリエーション(ProductVariant)の在庫管理に関するメタ情報です。

商品バリエーションとは
商品(Product)に対して、サイズや色などのバリエーションを表すオブジェクトです。 例えば、ジャケットが商品(Product)だとすると、赤いSサイズのジャケットは商品バリエーション(ProductVariant)です。

具体的には、商品バリエーション(ProductVariant)の在庫を識別するコードや、在庫が管理される場所の数などの情報を持っています。

Locationは在庫がストックされる場所に関する情報です。

住所や郵便番号、電話番号などが含まれます。

“場所”を”倉庫”と読み替えても差し支えありません。

InventoryLevelは特定のLocationにストックされた在庫数を表します。

そして、InventoryItemとLocationを結びつける役割を果たしています。

では、それぞれのオブジェクトの詳細を見ていきましょう。

InventoryItem

InventoryItemは特定の商品バリエーション(ProductVariant)の在庫に関するメタ情報です。

IntentoryItemは特定の商品バリエーション(ProductVariant)と1対1でひも付いています。

複数の場所に、どれだけの商品数がストックされているのか、という情報は、InventoryLevelとのConnectionを介して取得できます。

InventoryItemの主要なフィールド

variantProductVariant!在庫管理される特定の商品バリエーション
trackedBoolean!在庫管理される商品バリエーション数を追跡するかどうか
skuString在庫を追跡するための独自コード
unitCostMoneyV2商品バリエーションの単価
inventoryLevel
(locationIdという引数をとる。)
InventoryLevellocationId(Int)で指定された特定の場所に、どれだけ在庫があるかを表すInventoryLevelを返す。
locationsCountInt!在庫が管理される場所の数。inventoryLevelの数と一致する。
requireShippingBoolean!在庫管理される商品バリエーションが発送を必要とするかどうか

requireShippingフィールド

requireShippingフィールドは、在庫管理される商品バリエーションが発送を必要とするかを表しますが、発送が必要ではない商品バリエーションとは何でしょうか?

これは、映画や音楽、動画といったデジタルデータです。

サービスのサブスクリプション契約なども含まれます。

これらの商品バリエーションは、例えば、ファイルをダウンロードするURLを顧客にメール送信すれば済みます。

trackedフィールドとskuフィールド

このInventoryItemのtrackedフィールドをtrueにすると、在庫数の変動が追跡され、データとして保存されます。

在庫数が減るということは、商品バリエーションが顧客に発送されたことになるので、販売数も追跡できます。

在庫数の変動はskuの値を元に追跡されます。

Shopifyにおいて、SKUは、在庫を追跡して販売をレポートするために社内で使用できるコードです。

そのコードが、InventoryItemオブジェクトのskuフィールドで取得できます。

skuはString型なので、マーチャントが独自にフォーマットを定めることができます。

例えば「cookie_chocolate_kanagawa」のように複数の情報をアンダーライン区切りで埋め込むことで、どの味のどの商品がどれだけ売れて、どの倉庫から発送されたか、という情報を追えます。

trackedをtrueにして、マーチャントが定めたフォーマットに基づいてskuフィールドを設定しておくと、過去のデータを販売レポートとして出力できます。

Location

InventoryItemは商品バリエーションの在庫情報ですが、同一の商品バリエーションが複数の場所にバラバラにストックされていることがあります。

会社であれば、自社倉庫に100個、レンタル倉庫に100個、オフィスに10個のストックがあるかもしれません。

在庫が保管・管理される場所を表すのがLocationです。
倉庫と読み替えても問題ありません。

Locationの主要なフィールド

addressLocationAddress!住所や郵便番号、電話番号
nameString!場所の名称
isActiveBoolean!稼働しているかどうか
fulfillmentServiceFulfillmentService発送を行うサービス業者の情報
hasUnfulfilledOrdersBoolean!未発送の注文があるかどうか
inventoryLevel
(inventoryItemIdを引数に取る)
InventoryLevelこの場所にストックされている商品に関する情報

InventoryLevel

InventoryItemが商品バリエーションの在庫情報で、

Locationが倉庫でした。

この2つを結びつけるのが、InventoryLevelです。

図を再掲します。

inventory-object-relationship

InventoryLevelは、特定の商品バリエーションが、特定の倉庫にどれだけストックされているかを表現します。

InventoryItemは、InventoryLevelConnectionを持っており、複数のInventoryLevelオブジェクトと結ばれています。

InventoryLevelの主要なフィールド

locationLocation!場所。住所や電話番号といった情報が含まれる。
availableInt!この場所にストックされている商品バリエーションの個数
itemInventoryItem!このInventoryLevelと結びついたInventoryItem
incomingInt!この場所へ配送中の商品バリエーションの数

InventoryLevelの役割

InventoryItemは、商品バリエーションの在庫管理に関するメタ情報なので値の更新頻度は多くありません。

Locationは場所なので、さらに少ないでしょう。

一方のInventoryLevelは、在庫数をフィールドとしてもっているので、更新頻度は高いです。

InventoryLevelは、更新の可能性を吸収して、InventoryItemとLocationを扱いやすくしているとも考えられます。

在庫数を更新するときに、InventoryLevelが持つ少数のフィールドにのみ配慮すれば良いというのは、安心です。

最後に

今回は、在庫とストアをAPI連携するための3つのオブジェクトを紹介しました。

この3つのオブジェクトやWebhookなどを活用することで、在庫とストアを連携するアプリを開発できます。

是非、アプリ開発に役立ててください!

【Shopify GraphQL API徹底解説】シリーズでは、今回のように密接に関係するオブジェクトをまとめて紹介していきます。

シリーズを通して、主要なオブジェクトと、その関係性を理解すれば、Shopify GraphQL APIの強力さを体感できるはずです。

次回もお楽しみに!

  • このエントリーをはてなブックマークに追加
  • Pocket
  • LINEで送る

SNSでもご購読できます。