《Bubble》 Workflowの実行手順
概要
Workflowを構築していると、想定通りに動かない場面に遭遇するかもしれません。
これは私たちの実装方法の問題の可能性もありますが、Bubbleの仕様である可能性が考えられます。
今回は、Workflowの仕様について解説します。
Workflowの実行手順
1. 同期処理、非同期処理について
仕様の解説の前に、同期処理と非同期処理についての理解が必要です。これらは処理の実行順序の違いを表します。
同期処理
1つずつ順番に実行し、処理が完了したら次の処理に移ります。処理が完了する順番は、必ず1→2→3の順となります。
非同期処理
処理の完了を待たずに次の処理を実行します。図の例だと、処理の開始は1→2→3ですが、処理の完了は2→3→1となります。非同期処理は、処理の同時進行による効率化がメリットですが、処理順序の制御が難しくなることがデメリットです。
bubbleで開発をしていてWorkflowが想定通りに動かせない方は、同期処理の考えを想定しているかもしれません。
BubbleのWorkflowは基本的に、非同期処理に該当します。
2.workflowの実行順序について
1.通常のWorkflowは、順に実行されるが、前のStepの処理完了は待たない
Workflowタブから実装できる通常のWorkflowでは、Step1の処理の次にStep2が実行されますが、Step1の処理が終わっていなくてもStep2の処理を開始します。
Step1, Step2という名前はあくまで順番を表すものであり、前のステップの完了を待ってから次のステップを開始するわけではありません。
例えば以下のようなWorkflowがあります。(処理の内容は適当です)
実行の流れの例が以下のようになります。
例えばもしStep1でDo a Search forを実行した場合、データ取得に時間がかかり、処理時間が長くなります。その結果をStep2で使おうとした場合、正しい結果を得られない可能性があります。
2.Backend Workflowは、Stepを無視し、Workflowの開始と同時に実行する
BubbleのWorkflowは効率化のために、サーバーサイドとフロントエンドで並行に実行されます。
先ほどの通常のWorkflowは、フロントエンドでの処理です。
Backend Workflowはサーバーサイドでの処理なので、Workflowが開始するとすぐに実行されます。
たとえば「Schedule API Workflow」というBackend Workflowを呼び出すActionは、下図のようにStep4に配置していても、Workflowの開始と同時(Step1と同時)に実行されます。
グラフで表すと以下の通りです。
3.Custom Eventは、処理の完了を待ち、順に実行される
Workflow内では、Custom Eventを作成できます。
下図のように、あらかじめCustom EventとしてWorkflowを定義します。
それを「Trigger a custom event」で呼び出し、実行します。
このとき、Custom Eventは並列でなく順番に実行されます。
上記の例の場合、Step3でCustom Event Aを呼び出しました。この中の2つの処理(Create a new ItemとDelete Item)の完了を待ってから、Step4が実行されます。ただ、Step2やStep3の処理は待ちません。
⚠️ただし、Custom Event内の処理については通常と同様、前のStepの完了を待たずに実行されます。
グラフで表すと、以下通りです。
3.予想通りの実行順序を保つための方法
仕様を理解した上で、想定通りの実行順序を実現するための方法を紹介します。
1.Custom Eventを組み合わせることで実行順序を制御する
Custom Eventの前後では実行順序が保証されるという仕様を利用します。
例えばBackend Workflowを呼び出す「Schedule API Workflow」が最初に実行されないようにするには、Custom Event内へ入れることで制御できます。
2.Result of new thingを使うことで、順に実行される
前のStepの結果を使用する「Result of new thing」というActionがあります。
これを使用すると、前のStepの完了を待ってからデータを取得し、次の処理を実行できます。
3.Only whenによる条件分岐は、ActionでなくEventで分岐させる
Workflowを条件付きで実行するために、Only whenという項目があります。
これはActionでもEventでも設定できます。画像はEventで設定しています。
Event内のActionそれぞれに条件をつけられますが、前のActionの完了を待たないため、条件が想定通りに動作しない可能性があります。
その場合は、画像のようにEvent単位で条件を付けることで順序を制御しやすくなります。
4.Add a pause before next actionで、Workflowを一時停止させる
Navigation内の「Add a pause before next action」を使うと、Workflowを指定した秒数だけ一時停止させられます。
これを利用し、前Stepの処理時間を確保してから、次の処理へ移ります。
単位はミリ秒なので、画像の場合だと1秒間の一時停止です。
📌ただ、前のstepの処理に何秒必要かという正確な秒数は分かりません。
他に手段がないときや、設定した秒数で前のstepがの処理が必ず終わるという確認ができる場合以外、実行順序を保つためのやり方としてはあまりおすすめはできません。