Shopify ブログ

GraphQL vs REST:Shopifyパートナーがパフォーマンスと安定性を向上させる方法

Fisher Technologyのビジネスプロセス上級コンサルタントであるRich Borekは、開発領域における自社のリードに誇りをもっています。トレンドを注視し、最先端を追求することで、会社のビジネスは競争性を高め、クライアントのビジネスをスムーズに回すことができます。

2006年に設立されたFisher Technologyは、ビジネスプロセスの自動化と統合のプラットフォームであるBPA Platformと、高速アプリ開発プラットフォームであるApplications Platformの北米ディストリビューターです。Shopify Plusの技術パートナーとして、マーチャントの会計、CRMERPシステムの統合と大規模な顧客・商品データベースの同期を支援しています。

こうした大規模なデータを処理するなかで、RichFisher Technologyのクライアントの成長がShopify REST Admin API(開発者がShopify Adminに統合できるアプリを構築するためのAPI)のコールに与える影響を現場で観察してきました。成長が加速すれば、APIの制限に達するだろうとRichは理解していました。

「そのときがやってくるとは思っていましたが、2018年になるとは思っていませんでした」とRichは笑って言います。

何かを変える必要があったのです。自分とクライアントのビジネスが最先端をキープできるように、情熱をもって手を尽くしていた彼は、GraphQL Adimin APIを使用するという機会を見出しました。この記事で、RichREST APIからGraphQL APIに移行した体験と、それが自分のビジネスとShopify Plusのクライアントのビジネスに与えた影響について、共有します。

REST APIの制約

RichFisher Technologyのチームにとって、REST Admin APIの制約は次第に苛立ちのタネになってきました。制限に達したときにコールすると、HTTP 429 Too Many Requestsのエラーが発生します。リクエストしたデータは何も得られず、アプリはコールをリトライする前に一時停止します。Richにとってこれは、ERPとクライアントストアの間で同期がおこなわれないことを意味します。

「制限に達すると、おしまいです。システムは機能しなくなり、警報が鳴り響き、メールが流れ込んできます。これはよくないですね」とRichは言います。

Fisher Technologyは毎日数万ドルを処理しています。統合機能に支障があると、在庫や顧客データの同期に遅れが生じます。その結果、会計記録は不正確になり、カスタマーサービスは購入についてのインサイトが得られません。これは悪いビジネスであり、RichとチームはAPIの制限に達することを何としてでも避けました。

最大のニアミスは2015年に発生しました。クライアントの1社が、数百の商品を扱っていて、それぞれに5点の画像とたくさんのメタフィールドがあり、1つの商品で1518APIコールを要求します。このとき初めて、チームはコールの制限に達する危険を認識し、大惨事を避けるためのワークアラウンドが必要になりました。

「わたしは顧客に、在庫のアップロードに数日かかると伝えました」とRichは言います。「意図的にコードを遅くして、APIコールが数分おきに発生するようにし、APIの容量が補充される時間を確保したのです。」

このような賢明な方法により、コールの制限を超えることはありませんでしたが、近いところまでいきました。彼らの成長は継続する一方だったので、いずれやってくる課題に向けて新しい戦略が必要になるとRichは認識しました。

限界点

ここまでのところ、Richのワークアラウンドは大きな問題の発生を抑えることに成功していましたが、即興的なソリューションが永遠に機能するわけではありません。7年の付き合いがあるクライアントが、2018年に大きなリクエストをもってきました。Liquidを使ってユーザーにメタフィールドを表示したいというのです。クライアントは、ユーザーがログインしたときのスクリーンに購買力や重要指標を表示することを望んでいました。これを実現するには、Customer Objectのメタフィールドを使用し、プレゼンテーションのためにLiquidタグをCustomer Themeに追加する必要があります。

このプロジェクトを成功させるにはイノベーティブになる必要があるとチームは考えました。Richはいつもならこの手の仕事でREST Admin APIに頼っていましたが、数年前の危機を経験してからは、うまくいくと思えませんでした。

「メタフィールドはつねに11の関係なので、これが最悪でした」とRichは言います。「顧客ごとに5つのメタフィールドがあって顧客が40,000だとしたら、APIコールは200,000に及びます。これでは2週間かかりますよ! さらに発生データをレポートしてほしいとなると、不可能ですよね?」

Richにとって幸運だったのは、Shopify Unite 2018が近づいていたことです。この年のShopify Uniteでわたしたちは、開発者がShopifyGraphQLを使用するための新しい方法をいくつか発表しました。このときのトークに触発され、RichGraphQLをもっと学ぶことにしたのです。

GraphQLは、リクエストしたデータ(クエリやミューテーションと呼ばれる)を単一のエンドポイントに返すクエリ言語でありランタイムシステムです。RESTのように各リソースオブジェクトごとに異なるエンドポイントを展開することはありません。データをオーバーフェッチする代わりに、必要なデータだけを要求して得ることが可能です。

Richにとってこれは、200,000APIコールを作成して統合機能を壊す代わりに、40,000APIコールと同じデータを取得できるクエリ作成のスキーマが利用できることを意味します。彼のチームはこのような方法で統合機能を構築したことはありませんでしたが、メリットはラーニングカーブを十分超えていました。

Richは計画を胸にShopify Uniteを後にします。

GraphQL Admin APIへのピボット

Richと彼のチームにとっての最初のステップは、GraphQL Admin APIBPA Platformのソリューションになるかどうか見極めることでした。つねに顧客情報と在庫情報を同期させているビジネスのため、RichはまずGraphQL Admin APIのパフォーマンスがREST Admin APIとどう異なるかを正確に把握する必要がありました。

「何を犠牲にすることになるか明確にしたいと思いました。注文やメタフィールドの取得と引き換えに何を失うのか、といったことです。」

新しい言語を学ぶほかの開発者同様、彼にもヘルプが必要でした。彼はShopify GraphQLラーニングキットで学習し、サードパーティのInsomniaPostmanを使用してBPA PlatformGraphQLをテストしています。

「最初のうちは、GraphQLは実際より複雑に見えました。しかしこれらのツールのおかげでShopify APIに対する取り組み方が変わりました。」

この学習プロセスにおいて、Richは重要な発見をしました。一度のリクエストで、関連性のない複数のオブジェクトタイプを取得できるようになります。そしてこの知識をもとに、Richは自分の統合機能に対するGraphQL Admin APIの影響力をまもなく目の当たりにするのです。

GraphQL Admin APIでうまくいくのか

GraphQLの仕組みを把握したので、Richと彼のチームは重要クライアントのための統合機能を簡単にBPA Platformに設定できました。GraphQLのポジティブなインパクトは最初から明らかでした。統合機能は魔法のように動き、何万というAPIコールを必要とせず、3つのフィールドからデータを取得しました。

Richは難なくクライアントのためにコール制限付きの統合機能を構築しました。40,000の顧客情報にまたがる200,000APIコールに対して、GraphQL Admin APIによる統合機能は顧客ごとに1つのAPIのコール(合計40,000)によって同等のリクエストが可能なので、5倍の改良といえます。これはGraphQLによる効率的なAPIコールによって実現しています。Richはもはやコールの間でストップさせられることがありません。なぜなら、GraphQL APIのスロットリングの変更が、完遂までの一貫したオペレーションを可能にしているからです。

「顧客全体の情報ではなく、必要な3つのフィールドだけをダウンロードできます。」

Shopify Adminにおける変更がクライアントのEPRにマッチしているか確かめる必要があるため、BPA Platformには10分おきにアップデートをプッシュするというルーティンがあります。1週間に一度、全データがバッチでダウンロードされ、Shopify AdminERPに同期して欠落がないか確認します。このような週ごとのバッチダウンロードとアップデートルーティンの両方がGraphQLで問題なく実行されます。このソリューションにより、40,000の顧客データの完全同期が23時間で完了します。以前は23日かかっていたのと対照的です。

GraphQLはビジネスを支援する

Fisher Technologyは、GraphQL Admin APIを使ったアプローチをさらに進め、彼らのビジネスとクライアントに提供するサービス・プロミスに大きな影響をもたらしています。以下は、GraphQLの影響が大きかった3つの主要領域です。

1. パフォーマンス

GraphQL Admin APIにスイッチしたことで、Fisher Technologyは迅速な統合をクライアントに提供できるようになりました。Fisher Technologyの統合機能は顧客データベースをShopifyストアとERPに素早く同期させることでより良いパフォーマンスを実現しています。

チームの自信にも影響が出ました。クライアントから統合機能を構築できるか聞かれると、Richはストアのデータベースを30日~90日さかのぼって確認し、そのデータの平均を出して作業に必要なボリュームを推測します。

「ボリュームを把握するのがわたしの仕事です」とRichは言います。「GraphQLのおかげで、大きい数字を目の当たりにしてもいくらかリラックスできるようになりました。」

パフォーマンスの向上により、統合機能によるクライアントストアとERPシステムのデータ同期は、ボリュームにかかわらず可能になっています。

2. 身軽さと少ない負荷

GraphQL Admin APIを使い始めたことで、Fisher Technologyはより大きなクライアントをサポートできるようになり、またREST Admin APIの制限を避ける戦術やハックを考える時間が減りました。

今までは、顧客の在庫を一度にワンアイテムずつアップデートしなければならず、2分間で制限に達するまでAPIコールを走らせていました。

現在は、一度に1件の顧客ではなく、数百件を処理できます。GraphQL Admin APIによって、Rich100500の顧客情報を一度にアップデートします。GraphQLのさらなる用途と特定のクライアントにとってのベネフィットを探り出すため、彼はGraphQLのコール制限にも取り組んでいます。

「毎回コールを実行しても、制限には達しません。これは取引先のクライアントにとって素晴らしいことですね。統合機能をGraphQLで実行すると、APIの負荷に振り回されることがありません。」 

3. 変更による環境への影響が小さい

Shopifyがここ数年で成長して進化したの同様にAPIも進化しています。APIのアップデートやプラットフォームの変更があると、開発者はアプリや統合機能への影響を心配しますが、GraphQLを使用することでRichは環境の変化が統合機能にもたらす影響をあまり懸念しなくなりました。

「ゼロから作られているアプリがどのように対応しているかはわかりません。何か導入されたり削除されたりしたら、コードの中を探し回って抜き出すことになるでしょう。でもGraphQLなら、顧客名・メール・電話番号だけあればよく、この3つのフィールドだけをクエリするので、コードが実行されるたびに返ってくるのはこの3つのフィールドのみです。」

チームが統合機能の再構築やエラーの発見に時間をかけずにすむだけでなく、彼らのソリューションには高い復元力があります。

「顧客オブジェクトへの追加、アップデート、またはフィールド数の増加がおこなわれても、コードは壊れません。なぜなら、わたしが要求するのは3つのフィールドだけだからです」と彼は言います。

こうした改善は納得感が高く、Richは機能の安定性に自信をもつことができ、それがクライアントの信頼獲得と顧客維持に役立っています。

Shopifyのアップデートが統合機能に与える影響を顧客が心配していたら、自信をもってイエスかノーかを答えられるのです。」

GraphQLFisher Technologyの未来

Fisher Technologyは、いまやGraphQLの推進者であり、GraphQLAPIを使った統合機能の促進を目指しています。理想とするシナリオについてクライアントとの対話をおこない、構築が可能ならリアルタイムのアップデートから始めます。

「ストアの在庫については、取引が発生したらすぐにアップデートされるようにしたいです。ERPとクライアントストアでのアップデートの遅れは、数分以内におさえます」とRichは言います。

スピードを競争のアドバンテージにするのとは別に、グローバルクライアントにとってストア間の在庫管理が楽になるような統合機能の構築にも力を入れています。

「米国とカナダで異なるストアをもっているクライアントもいます。その両者間の大規模な統合をGraphQLで実現しようと考えています。今後構築する統合機能は、不可能な場合をのぞいて、すべてGraphQLを使用するのが目標です。」 

GraphQLを始めよう

GraphQL Admin APIFisher Technology3つの成功をもたらしました。信頼性の高い統合機能を構築してクライアントのために迅速なパフォーマンスを実現し、顧客情報を短い時間で同期させ、プラットフォームやAPIのアップデートに少ない時間で対応できます。

ラーニングカーブはたしかに険しいかもしれませんが、Richはもっと早く始めるべきだったと考えています。

「これを使うようにみんなを説き伏せたいと思います」と彼は強調しています。「Just do it もしあなたがREST APIを今使っていて、20フィールドが必要なだけなのに1日に何百という注文を処理しているなら、罰を受けているようなものです。あるいは、何万というストアが利用しているアプリの開発者なら、どうしてわざわざそんな重荷を背負う必要があるのでしょうか? 必要なものだけを手にすればいいのですよ。」

Shopifyマーチャントのためにアプリを作成しましょう

Shopifyアプリストア向けのアプリ作成、プライベートアプリの開発サービス、またはユーザーベースの増加など、あなたの目的が何であれShopifyパートナープログラムがあなたの成功を支援します。無料で登録すると、教育リソースや開発プレビュー環境、収益シェアプログラムにアクセスできます。

原文:Adam Rogers 翻訳:深津望

 

Shopifyパートナープログラムでビジネスを成長させる
マーケティング、カスタマイズ、またはWebデザインや開発など提供するサービスに関係なく、Shopifyパートナープログラムはあなたを成功へと導きます。プログラムの参加は無料で、収益分配の機会が得られ、ビジネスを成長させる豊富なツールにアクセスできます。情熱的なコマースコミュニティに今すぐ参加しましょう!

今すぐ登録