![Image result for bubble nocode](https://fiverr-res.cloudinary.com/images/q_auto,f_auto/gigs/172768821/original/ead49937ad7e812d9707f81b577a03d56f699bbd/do-bubble-plugin-development.png)
この記事ではノーコードツール・Bubbleでのスケジュール化されたワークフローと再帰的なワークフローについて説明します。
アプリを作っていく過程で非常に重要なパートですので、ぜひご一読ください。
スケジュール化されたワークフロー
API ワークフローは、アプリケーションのワークフローをスケジュールするために使用することができます。例えば、ユーザーがサインアップしてから1ヶ月後にトライアルを終了したり、イベントの1週間前にリマインダーを送信したり、毎週のニュースレターを送信するなどの定期的なイベントを設定する必要がある場合、スケジュールワークフローを使用することになります。
これ自体はAPIではありませんが、スケジュールワークフローはAPIワークフローと同じインターフェイスを使用して、アプリケーションのバックグラウンドで実行できるさまざまなワークフローを設定します(トップナビのページナビゲーターにある「バックエンドワークフロー」ページ)。
未来のワークフローをスケジュール
Schedule API Workflowアクションを使用して、将来のAPIワークフローをスケジューリングします。
はじめにスケジュールしたいAPIワークフローを選択し、スケジュールの時間を定義する必要があります。そこでAPIワークフローレベルで定義された様々なパラメータを入力するように促されます。
![](https://gblobscdn.gitbook.com/assets%2F-M5sbzwG7CljeZdkntrL%2F-M5smrJkMfjcu6xQRWw4%2F-M5smtQs9qUoVOXKgVHD%2FDesktop%202017-03-15%20at%207.16.42%20PM.png?alt=media)
このアクションはIDを返し、後述のアクションでスケジュールされたワークフローをキャンセルすることができます。
また、APIワークフローをモノのリスト上でスケジュールし、一度に複数のワークフローをスケジュールすることもできます。
パフォーマンス上の理由から、Bubble はワークフローの異なる実行を時間的にスペーシングすることがあります。
スケジュール化したワークフローをキャンセルする
今後のワークフロー実行をキャンセルするには、「スケジュールされた API ワークフローのキャンセル」または「スケジュールされた API ワークフローのリストのキャンセル」アクションを使用することができます。このアクションでは、スケジュールされた ID が使用されます。
![](https://gblobscdn.gitbook.com/assets%2F-M5sbzwG7CljeZdkntrL%2F-M5smrJkMfjcu6xQRWw4%2F-M5smtQukzYabMreQbgo%2FDesktop%202017-03-15%20at%207.22.35%20PM.png?alt=media)
定期的なイベントを設定する
定期的なイベントの設定は、アプリのAPIページで特定のタイプのエンドポイントを作成することから始まります。
タイプ「Recurring event」を選択する必要があります。このタイプのイベントは、通常のエンドポイントと似ていますが、1つの注目すべき違いがあります。パラメータのリストを定義する代わりに、ワークフローのモノとしてワークフローが取るモノのタイプを定義する必要があります。
![](https://gblobscdn.gitbook.com/assets%2F-M5sbzwG7CljeZdkntrL%2F-M5smrJkMfjcu6xQRWw4%2F-M5smtQw6hkjFOC8G6Du%2Frecurring%201.png?alt=media)
定期的なイベントを定義したら、「Set/cancel a recurring event」アクションを使用して定期的なイベントをスケジュールすることができます。このアクションには、イベント、モノ、頻度、開始日が設定されています。
同じアクションは、定期的なワークフローのキャンセルにも使用されますが、頻度は「none」を選択してください。
![](https://gblobscdn.gitbook.com/assets%2F-M5sbzwG7CljeZdkntrL%2F-M5smrJkMfjcu6xQRWw4%2F-M5smtQycHpCPhZS2ta7%2Frecurring%202.png?alt=media)
定期的に発生するイベントの頻度を更新したい場合は、あるモノに同じアクションを適用すると、次の発生のためにスケジューリングが更新されます。
未来のワークフローを閲覧する
ログタブにはスケジュールセクションがあり、日付後のスケジュールイベントを確認することができます。各行のキャンセルをクリックすると、予定していたイベントをキャンセルすることができます。これは、上記のキャンセルアクションを使用するのと同じです。
![](https://gblobscdn.gitbook.com/assets%2F-M5sbzwG7CljeZdkntrL%2F-M5smrJkMfjcu6xQRWw4%2F-M5smtR-BSVrqK7d-bRQ%2FDesktop%202017-03-15%20at%207.32.08%20PM.png?alt=media)
以上ここまでがワークフローのスケジュール化についての説明でした。ここから下では再帰的なワークフローのスケジュール化についてご説明します。
再帰的スケジュールワークフロー
ワークフローは、将来のある時点で実行するようにスケジュールすることができます。
知っておくと便利なコツは、スケジュールされたワークフローを再帰的に呼び出すことができる、つまり、スケジュールされたワークフローは、将来的に実行するように自分自身をスケジュールすることができるということです。
再帰に関する簡単な説明
再帰とは専門用語で、大まかにはコードの塊が自分自身を呼び出して再び実行することを意味します。現実世界での例としては、辞書で単語を調べるための反復的な方法があります。
そのような状況で最初に従う「ルール」は、「辞書を開いて適当なページを開き、自分の調べたい単語が開いてるページよりもアルファベット順で早い文字で始まっているときは、自分が開いてる辞書のページよりも前のページを開く」「目的の単語を探せるまで同じプロセスを繰り返す」という誰しもが一度はやったことのあるあの手順です。
このルールを厳密に適用し続ければ、最終的にはお目当ての単語が見つかるはずです。これは再帰の単純な例に過ぎませんが、Bubbleアプリで再帰を使用すると、いくつかの強力な動作のロックを解除することができます。
再帰的なスケジュール化されたワークフローを使用して大量のデータを処理する
通常のワークフローは、データの処理に使用することができ(例:”Make changes to a list of things”)、後でデータを処理したい場合は、”Schedule API Workflow on a list “というオプションもあります。
しかし、多くのデータを処理している場合、変更の適用に時間がかかりすぎると、これらのオプションのどちらかがタイムアウトしてしまうことがあります。
より良い方法は、データ処理を小さなチャンクに分割し、そのうちの1つの小さなチャンクに変更を適用する。そこから次の小さなチャンクに変更を適用した後、さらに次の小さなチャンクに変更を適用することです。
これは、Bubbleがあるチャンクに変更を適用した後、後の時点で次のデータのチャンクに同じ変更を適用するように自分自身に指示するため、再帰的です。
ワークフローはどのようにして次のデータの「塊」として定義されたものを知っているのでしょうか?それは、あなたが提供しなければならないロジックです。
例えば、データベース内の全車のデータフィールドを更新したいが、何十万台もの車がある場合、一度に更新するとタイムアウトしてしまいます。例えば、”data updated “のようなフィールドを作成し、”data updated “が “no “の車の検索に変更を適用するAPIワークフローを作成し、最初の500台のエントリーに対してのみそれを実行します。再度実行すると、”data updated “が既に “yes “に変更されているエントリはピックアップされないので、ワークフローが何度も実行されている間に、すべての車のリストを処理していきます。
リスト上でのスケジューリングと再帰的スケジューリングの比較
ここでは、「APIワークフローをリスト上でスケジュールする」と「同じAPIワークフローを再帰的にスケジュールする」というこの戦術を比較した簡単な表を示します。
再帰的にスケジュールされたワークフローを使用するためのその他のヒント
■スケジュールされたワークフローの繰り返しインスタンスの間に5秒程度のギャップを設けて、このギャップがアプリのキャパシティに与える影響をテストすることができます(問題がなさそうであれば、いつでももっと短いギャップを試すことができます)。
■ミスをして、無限ループにはまってしまっている時には解決する2つの方法があります。
- ログ > スケジューラで次のスケジューリングされた実行を手動で削除する。
- API ワークフロー自体を変更または削除し、次回実行時には、更新された(または存在しない)ワークフローを使用します。
■[ログ] > [スケジューラ] > [タスクの一時停止]で、アプリのすべてのスケジュールされたワークフローを一時停止することができます。
まとめ
いかがだったでしょうか。今回はノーコードツールBubbleでのスケジュール化されたワークフローおよびワークフローのスケジューリング全般についての説明でした。
未来に行う予定のスケジューリングなどはBubble以外のサービス上でも必ず通る部分かと思いますが、基本的な知識をベースにBubble上でも操作していただけたら幸いです。