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