【Shopify GraphQL API徹底解説】商品の配送に関わる4つのオブジェクト

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

本記事の所要時間: 8分

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

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

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

今回解説するのは以下の4つのオブジェクトです。

  • Fulfillment
  • LineItem
  • FulfillmentLineItem
  • FulfillmentOrder

Fulfillment関連オブジェクトの関係性

注文(Order)が作成されると、それに対応する複数の配送(Fulfillment)が作成されます。

注文(Order)には複数の商品バリエーションが含まれることがあり、それぞれはLineItemで表現されます。

LineItemに、その配送に関する情報を提供するのがFulfillmentItemです。

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

一方、FulfillmentOrderは、同じ場所から同じタイミングで発送される商品のまとまりです。

FulfillmentOrderは、複数のFulfillmentItemとむすび付いています。

配送に関するオブジェクトは複雑に絡み合っているので、一度に理解するのは難しいかもしれません。

それぞれのオブジェクトの詳細を見ていくことで、全体的なイメージを作っていきましょう。

Fulfillment

Fulfillmentは、顧客からの注文に含まれる商品の配送を表現します。

1つの注文に複数のFulfillmentが含まれることがあります。

Fulfillmentの主要なフィールド

nameString!fulfillmentの名称
orderOrder!fulfillmentが属する注文(Order)
totalQuantityInt!fulfillmentに含まれるLineItemの合計
statusFulfillmentStatus!fulfillmentの状態
displayStatusFulfillmentDisplayStatus表示されるfulfillmentの状態
locationLocation配送元の場所。倉庫の場所など。
serviceFulfillmentServiceストアオーナーからfulfillmentを請け負う配送業者
trackingInfo
(引数としてfirstを受け取り、指定された長さで配列を切り捨てる。)
[FulfillmentTrackingInfo! ] !fulfillmentの追跡情報のリスト
isTransitAtDateTimefulfillmentが実際に配送された日時
estimateDeliveryAtDateTime商品が顧客に届く日時

totalQuantityフィールド

totalQuantityフィールドにはLineItemの合計が入ります。

LineItemは注文(Order)を構成するオブジェクトです。

注文に含まれる商品バリエーションごとにカート内にLineItemが作られます。

LineItemのフィールドには、商品バリエーションはもちろん、その商品バリエーションの注文数やディスカウント情報が含まれます。

まとめると、totalQuantityは商品バリエーションごとの注文数を足した数ということです。

statusフィールドとdisplayStatusフィールド

statusフィールドは、fulfillmentの状態を表すFulfillmentStatus型の値が入ります。

FulfillmentStatusは列挙型で、以下のいずれかの値を取ります。

  • PENDING・・・配送業者が配送リクエストを受理するのを待っている
  • OPEN・・・配送業者が配送リクエストを受理した
  • SUCCESS・・・配送が完了した
  • ERROR・・・配送リクエストでエラーが起きた
  • FAILURE・・・配送リクエストが失敗した
  • CANCELLED・・・配送がキャンセルされた

displayStatusフィールドは更に細かい状態をマーチャントに表示するために使われます。

主に配送業者によって更新されます。

trackingInfoフィールド

trackingInfoには、配送の追跡情報(FulfillmentTrackingInfo)がリストとして含まれます。

そして、FulfillmentTrackingInfoには以下のフィールドが含まれます。

companyString配送業者の会社名
numberString追跡コード
urlURL追跡情報が見れるページのURL

LineItem

顧客(Customer)は商品を購入するときに、注文(Order)を作成します。

注文(Order)には、当然、複数の商品バリエーション(ProductVariant)が含まれることがあります。

注文(Order)と商品バリエーション(ProductVariant)をつなぐのが、LineItemです。

注文(Order)は、Connectionで、複数のLineItemとひも付いています。

LineItemは商品バリエーション(ProductVariant)と1対1でむすび付いていて、注文数やディスカウント情報も含んでいます。

LineItemの主要なフィールド

variantProductVariantこのLineItemとひも付いた商品バリエーション
quantityInt!商品バリエーションの注文数
originalUnitPriceSetMoneyBag!ディスカウントされる前の商品バリエーションの単価
discountAllocations[DiscountAllocation! ] !このLineItemに適用されるディスカウントのリスト
discountedTotalSetMoneyBag!ディスカウント後の合計価格
skuString商品バリエーションのSKUコード

FulfillmentOrder

FulfillmentOrderは、注文(Order)に含まれるLineItemのうち、同じ場所から配送されるLineItemをまとめたものです。

同じ場所から配送されるLineItemのリストがあっても、配送されるタイミングが違えば、複数のFulfillmentOrderに分割されます。

簡単に言うと、まとめて配送されるLineItemをグループ化して、配送に関する情報を付け足したオブジェクトです。

FulfillmentOrderの主なフィールド

orderOrder!fulfillmentOrderにひも付いた注文(Order)
assignedLocationFulfillmentOrderAssignedLocation!fulfillmentOrderを配送する場所。住所や郵便番号、電話番号が含まれる。
deliveryMethodDeliveryMethodfulfillmentOrderの配送手段
destinationFulfillmentOrderDestination配送先。住所や郵便番号、電話番号が含まれる。
fulfilledAtDateTime配送される日時
statusFulfillmentOrderStatus!fulfillmentOrderの状態
requestStatusFulfillmentOrderRequestStatus!fulfillmentOrderへの要求に関する状態
supportedActions[FulfillmentOrderSupportedAction! ] !fulfillmentOrderに対して実行できる操作

deliveryMethodフィールド

deliveryMethodには、配送手段を表現するDeliveryMethodオブジェクトが入ります。

DeliveryMethodはDeliveryMethodTypeという列挙型のフィールドを持っていて、配送手段を指定します。

DeliveryMethodTypeが取りうる値は以下の5つです。

  • LOCAL・・・マーチャントが雇っている配送ドライバーや、マーチャントの従業員が顧客の玄関先まで届ける。
  • NONE・・・配送手段なし。手渡しなど。
  • PICK_UP・・・顧客が特定の場所に取りに行く。
  • RETAIL・・・販売店で購入され、そのまま手渡しされる。Shopify POSを使っている場合が多い。
  • SHIPPING・・・配送業者などが配送する。

statusフィールド

statusフィールドが取りうる値は以下の6つです。

  • OPEN・・・配送が作成された
  • SCHEDULED・・・配送日時が設定され、配送が手配された
  • INCOMPLETE・・・配送が要求通りに完了していない
  • IN_PROGRESS・・・配送中
  • CLOSED・・・配送が完了した
  • CANCELLED・・・マーチャントによって配送がキャンセルされた

supportedActionsフィールド

supportedActionsフィールドにはfulfillmentOrderに対して実行できる操作をリストとして設定できます。

操作はFulfillmentOrderActionという列挙型で定義されていて、配送のキャンセルや、FulfillmentOrderを別の場所に移動させる、といった操作があります。 

FulfillmentLineItem

FulfillmentLineItemは、特定のLineItemに配送に関する情報を付け加えるためのオブジェクトです。

1つのLineItemオブジェクトとむすび付いていて、配送する商品バリエーションの数や、ディスカウント情報を含みます。

FulfillmentLineItemの主要なフィールド

lineItemLineItem!ひも付けられたLineItem。商品バリエーションと、注文数の情報。
quantityInt注文数
originalTotalSetMoneyBag!ディスカウントが適用される前の合計価格
discountedTotalSetMoneyBag!ディスカウント適用後の合計価格

最後に

今回は、配送に関わる4つのオブジェクトを解説しました。

配送方法にはいくつかのオプションがありました。

RETAILを設定すれば、販売店のPOSから作成された注文を管理することができます。

LOCALを設定すれば、マーチャントが配達ドライバーを抱えるケースにうまく対応することができます。

顧客が特定の場所に商品を取りに行く、PICK_UPというオプションもあります。

オンラインショップに求められる配送方法や、カスタマイズは多岐に渡ります。

Shopifyの配送に関わるAPIは、それらに対応するべく、柔軟性が高く設計されています。

その反面、オブジェクト同士が複雑に絡み合っており、理解を難しくしています。

今回の内容に対する理解を深めるために、配送業務について学習することをおすすめします。

  • 顧客はどのような配送オプションを求めているのか?
  • 商品を受け取る場所や時間をどのようにコントロールするべきなのか?
  • 注文された商品を、どの倉庫から配送すべきなのか?
  • 配送状況をどのように把握して、顧客やマーチャントに伝えるべきなのか?

このような問いに対して、各種配送サービスが出している答えがあります。

それを調べると、Shopfiy APIの設計が納得できるかもしれません。

是非、粘り強い学習の果てに、すばらしいアプリを開発してください!

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

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

次回もお楽しみに!

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

SNSでもご購読できます。