Shopify Flowワークフローの最適化
ワークフローを作成する際は、できるだけ効率的に実行されるようにすることが重要です。このドキュメントでは、ワークフローがスロットリングされたり、API 制限に達したりする原因となり得るシナリオと、それらの問題を解決または回避するためのヒントを概説します。
一般的なパフォーマンスの問題
このセクションでは、ワークフローでパフォーマンスの問題を引き起こす可能性のある一般的なシナリオについて説明します。複数のシナリオが同時に発生することもあり、その場合はパフォーマンスの問題が生じる可能性が高くなります。エディタの設定またはレート制限に関連するエラーについては、troubleshooting guide を参照してください。
高頻度のトリガー
高頻度のトリガーとは、基礎となるイベントが頻繁に発生するトリガーのことです。たとえば、商品バリエーションの在庫数量が変更されたときというトリガーは、ストアの在庫が変更されるたびに実行されます。トリガーの実行回数は、ワークフロー内の問題に乗数効果をもたらします。たとえば、ワークフローが 100 点の商品を取得し、1 分間に 1000 回実行される場合、1 分間に 100,000 点の商品を取得することになります。これにより、パフォーマンスの問題が発生する可能性があります。
解決策:使用するデータ量を減らしてワークフローを最適化するか、待機ステップを使用してワークフローを分割します。
同じトリガーを使用する多数のワークフロー
Flow では、同じトリガーを使用して複数のワークフローを構築できます。イベントが発生すると、これらのワークフローは互いに並行して実行されます。同じトリガーを使用するワークフローを多数実行すると、以下の理由で問題が発生する可能性があります。
- ワークフローが互いに競合する可能性があります。
- ワークフローが同時にデータを取得して API を呼び出そうとしますが、Shopify API の制限により、ストアが一度に処理できるリクエスト数には限りがあります。
解決策:同じトリガーを使用するワークフローを 1 つのワークフローにまとめます。これにより、各ワークフローがいつ実行されるかを管理できるため、互いに競合することがなくなります。ワークフローをまとめることは、ワークフローが取得するデータが少ない場合や、取得するデータが同じ場合に特に有効です。ワークフローが異なるデータを大量に取得する場合は、ワークフローを分けたままにしておく方がパフォーマンスが向上することがあります。
リストまたは不適切なデータの使用
ワークフローを構築する際、商品や注文などのオブジェクトのリストを使用することがあります。オブジェクトのリストを使用すると、Flow はリスト内のすべてのオブジェクトを取得します。リストに大量のデータが含まれている場合、これが問題になる可能性があります。
もう 1 つの一般的な問題は、誤って不適切なデータを選択してしまうことです。たとえば、注文の商品データを確認するために、order / line items / product / tags の代わりに order / publication / products / tags を選択してしまうことがあります。最初の結果は通常、不適切です。注文の商品を確認するつもりでも、公開されているすべての商品を取得してしまうためです。このような大きなリストを選択すると、パフォーマンスの問題が発生する可能性があり、不適切なリストを選択すると、オートメーションが誤った処理を実行する原因になります。
解決策:必要なデータを慎重に選択し、必要のないリストの使用は避けてください。ワークフローをテストして、意図したとおりに動作することを確認してください。
メタフィールド
個々のメタフィールドまたはメタオブジェクトのデータを取得しても、パフォーマンスの問題は発生しないはずです。しかし、metafields のリストを選択し、リソース上のすべてのメタフィールドをループ処理することは、一般的な問題です。value フィールドに大量のデータ (たとえば、HTML オブジェクトが使用されている場合など) が含まれていると、大量のデータが処理されることになり、パフォーマンスの問題が発生する可能性があります。
解決策:metafields の代わりに metafield オブジェクトを使用してください。
「データを取得する」アクションの過度な使用
注文データを取得するなどの「データを取得する」アクションを使用するワークフローは、ワークフローごとに最大 100 件のオブジェクトを返すように設計されています。100 件を超えると、パフォーマンスの問題が発生する可能性があります。
解決策:クエリが 100 件を超える結果を返す必要がないように、ワークフローをより頻繁に実行してください。クエリを繰り返すのではなく、同じ「データを取得する」アクションを再利用してください。
「データを取得する」アクションにクエリフィルターがない
「データを取得する」アクションは Shopify API を呼び出します。クエリが存在しない場合、API はすべてのリソースを返すか、何も返しません。これにより、パフォーマンスの問題が発生する可能性があります。また、後でワークフローで返されたデータを使用する際に、ストアで誤ったアクションが実行される原因にもなります。
解決策:「データを取得する」アクションには、常にクエリフィルターを含めてください。
「データを取得する」アクションの不適切なクエリフィルター
「データを取得する」クエリは、限られたクエリフィルター、特定の構文、およびフィルターで使用できる特定の値のセットをサポートしています。不適切なフィルター、フィルター値、または構文を入力すると、クエリ全体が無視される可能性があり、クエリフィルターが存在しない場合と同様の問題を引き起こす可能性があります。
解決策:Flow のアクションで提供されるドキュメントを使用して、利用可能なクエリフィルターのリストを確認してください。クエリフィルターを常にテストして、期待どおりのデータが返されることを確認してください。Flow の[出力ログ] アクションを使用して返されたデータを確認するか、Postman などの API クライアントや GraphiQL アプリを介して Shopify Admin API を直接呼び出すことができます。
一般的なパフォーマンスの問題に対するその他の解決策
待機ステップを使用してデータ取得を遅延させる
待機ステップを使用すると、指定した時間ワークフローを一時停止できますが、待機ステップはワークフローの最適化にも使用できます。各待機ステップは、ワークフローの実行を個別のフェーズに効果的に分割します。ワークフローが実行されると、最初の待機ステップまでに必要なデータが自動的に取得されます (そして、待機ステップの後、ワークフローの残りの部分のためにデータが再度取得されます)。
ワークフローが高頻度のトリガーを使用して大量のデータを取得するものの、アクションを実行するのは時々である場合は、条件と待機ステップのペアの後に複雑なデータやロジックを配置することができます。例:
- トリガー:商品バリエーションの在庫数量が変更されたとき。
- 条件:商品がコレクションに含まれているかを確認する。
- true の場合、アクション:2 秒間待機する。
- アクション:お客様にメールを送信する (大量のデータを含む)。
この例では、ステップ 4 に必要なデータは、待機ステップが完了した後にのみクエリされます。通常、条件が false の場合、これはワークフローがより速く、より効率的に実行されることを意味します。
最適化すべきでないこと
複数のアクションで同じデータを使用する
複数のステップで同じフィールドを使用すると、Flow がそれらのフィールドの使用状況を分析し、そのデータを 1 回だけ取得します。これは、パフォーマンスを気にすることなく、データを何度でも使用できることを意味します。