Sync Master
ブログ

在庫APIの裏側——REST と GraphQL、ざっくり違い

Shopify在庫同期の基本

この記事の概要

Shopifyの在庫APIにはRESTとGraphQLの2系統があります。アプリ開発の話に聞こえますが、実は「ユーザーから見える挙動」にも違いが出ます。両者の違いを、コードを書かない人にも分かるように整理しました。

Shopify向けの在庫同期アプリを比較していると、紹介ページに「GraphQL対応」「最新のAPIを利用」といった言葉が出てくることがあります。エンジニアでなければ、こうした言葉は飛ばしてしまいがちですよね。けれど実は、アプリが裏側でRESTとGraphQLのどちらを使っているかは、ユーザーが画面の前で体感する挙動にも、地味に効いてきます。

この記事では、コードの話には一切踏み込まずに、「Shopifyの在庫APIにはREST系とGraphQL系があり、それぞれどんな性格を持っているか」を整理します。アプリを選ぶときの判断材料になれば嬉しいです。

Shopifyの在庫APIの全体像

まず大前提として、Shopifyは外部アプリが在庫を読み書きするための仕組みを公式に提供しています。これがいわゆる「Admin API」と呼ばれるものです。Sync MasterのようなサードパーティアプリがGoogleシートからShopifyの在庫数を書き換えられるのは、このAPIのおかげです。

Admin APIは、内部的に2つの系統に分かれています。一つは「REST」と呼ばれる、長く使われてきた方式。もう一つは「GraphQL」と呼ばれる、比較的新しい方式です。どちらでも基本的にはやれることは似ているのですが、データの取り出し方や効率の考え方が少し違います。Shopify自身も、新しい機能はGraphQLから先にリリースする方針に切り替えてきており、業界全体としてもGraphQLへの移行が進んでいます。

RESTとGraphQLの考え方

二つの違いを、なるべく日常的なたとえで説明してみます。

REST = リソース単位の問い合わせ

RESTは「商品はこちらの引き出し、注文はあちらの引き出し、在庫はその隣の引き出し」というふうに、データの種類ごとに窓口が分かれています。たとえば「商品IDが123の情報をください」と頼むと、その商品に関する情報がまとめて返ってきます。シンプルで分かりやすい一方、「商品の情報のうち、商品名と在庫数だけ欲しい」と思っても、関係ない情報まで一式返ってくる傾向があります。

GraphQL = 必要なフィールドだけまとめて取得

GraphQLは「ほしい情報を、リクエスト時に細かく指定できる」という発想です。「商品123の、商品名と在庫数とSKUだけを、各ロケーション別に」みたいに、欲しいものだけを名指しで取り出せます。さらに、複数の種類のデータを一回のリクエストでまとめて引っ張れるのも特徴です。データのやり取りが軽くなり、不要な情報を運ばずに済みます。

どんなアプリがどっちを選ぶか

実際のサードパーティアプリは、どちらを使っているのでしょうか。傾向としては、長く運用されてきたアプリほどRESTベースで作られていることが多く、近年リリースされた、あるいは大幅に書き直されたアプリはGraphQLを採用していることが多い、という状況です。Shopifyは新しい在庫関連の機能をGraphQL側から提供しているので、最新機能を素早く取り込みたい開発者ほどGraphQLを選ぶ傾向にあります。

ただし、これは「RESTを使っているアプリは古くてダメ」という話ではありません。すでに本番運用で安定しているRESTベースのアプリは、十分に頼れる選択肢です。一方で、これから新しいアプリを選ぶのであれば、GraphQL対応をうたっているアプリのほうが、今後の機能追加についてきてくれる可能性が高い、とは言えるでしょう。

ユーザーから見える違い

技術的な仕組みの違いが、ユーザー側にどう見えてくるのか。これが本題です。実は、いくつか体感できるポイントがあります。

  • 同期にかかる時間 : 効率良くデータをやり取りできる分、商品数が多いほどGraphQLベースのアプリのほうがスピードで優位になりやすい
  • 対応できる商品数の上限 : 大量データの読み書きでは、GraphQLのほうが一度のリクエストで多くを扱えるため、巨大カタログでの安定性が高くなりやすい
  • 新機能の対応スピード : ShopifyがGraphQL先行で新機能を出すため、新しい在庫管理機能(メタフィールド連携、ロケーションの細かい制御など)への対応が早いことが多い
  • エラー時の挙動 : GraphQLは部分的な成功・部分的な失敗を返せるので、何件中何件が成功したかの可視性が上がる場合がある

とはいえ、これらはあくまで「傾向」です。実際にはアプリの実装次第で、RESTでも十分高速なものもあれば、GraphQLを使っていても遅いものもあります。ですから、選定時のチェックポイントとしては、「GraphQL対応か」を一つの参考にしつつ、より大事なのは「自分のストアの規模で実際に試してみて、満足できる速度と精度か」を確認することです。

RESTとGraphQLの違いは、いわばエンジンの仕組みの違いです。車を選ぶときにエンジンの細部まで知らなくても困らないように、APIの違いもユーザーが日常的に意識する必要はありません。けれど、「なぜこのアプリは速いのか」「なぜ最新機能の対応が早いのか」という疑問の答えがここにある、と知っておくと、アプリ選びがより納得感のあるものになるはずです。

関連記事

あわせて読みたい記事

在庫数を手で打ち込むのは、もうやめましょう。

Sync MasterをShopifyにインストールして、5分以内に最初の同期を実行。