《Bubble》ワークフローにおける繰り返し処理とは
概要
繰り返し処理とは、特定の条件が満たされるまで、または指定された回数だけ、同じワークフローを繰り返し実行する処理です。
同じ操作を複数回、効率的に実行したい時に有効です。
今回は繰り返し処理について解説して行きます。
ワークフローにおける繰り返し処理とは
具体的なユースケース
1. 複数のメールアドレス宛に同じメールを送信:
- メーリングリストに登録された全ユーザーにニュースレターや通知を送る。各メールアドレスに対して、同じ内容のメールを個別に送信する。
2. データベースからのデータの一括処理:
- ユーザーデータベースから全てのユーザーを取得し、それぞれのユーザーに対して特定の条件に基づいた更新やチェックを行う。
3. ファイルの一括処理:
- 指定されたフォルダ内の全画像ファイルに対して、サイズ変更、圧縮、形式変換などの処理を行う。
バッチ処理との違い
バッチ処理とループ処理はどちらも複数の対象に対して同じ処理を実施するという点で似ていますが、実際にはそれぞれ異なるアプローチと目的を持っています。
それぞれを簡単に説明するとバッチ処理は、一連のタスクやデータ処理をまとめて一括で行う、という処理なのに対してループ処理は処理を一括ではなく個別に行なっていきます。つまり1から10の数字に対してそれぞれが持つフラグAをBに、という処理を行いたい場合バッチ処理なら1回の処理でそれらをまとめて行うのに対し、繰り返し処理では1のフラグAをBに、それが終わると2のフラグAをBに、という風に個別で処理を行なっていくので処理の回数は10回になります。
選択の基準
・ 処理の即時性:リアルタイムの応答が必要な場合は繰り返し処理が適しています。
・データ量:大量のデータを扱う場合、特に定期的に同じタスクを実行する必要がある場合はバッチ処理が適しています。
・ユーザーのアクションをトリガーとするかどうか:処理を実施するためにユーザーのアクションが必要な場合は繰り返し処理、不要な場合はバッチ処理が向いています。
・複雑性:繰り返し処理の中で更に繰り返し処理を行うことができるのでより複雑な処理には繰り返し処理が適している場合があります。バッチ処理でも理論上は同じ処理を行うことはできますが、その方法はより複雑になりがちでバッチ処理は比較的単純な処理を一斉に適用するのに向いています。
したがって、これらのシナリオにおいては、タスクの性質、データ量、処理の緊急性、ユーザー介入の有無などを考慮して、バッチ処理と繰り返し処理のどちらを選択するかを決定します。場合によっては、両方の手法を組み合わせて使用することもあります。
繰り返し処理の実装方法
今回はバッチ処理との比較がしやすくなるようにバッチ処理に関する記事で行った複数宛先へ同じメールを送信する、と言う処理を実装していきます。
具体的にはメールリストがあり、チェックを入れて選択したメールアドレスにだけメールを送信する、というアクションができるようにしていきます。
まずSettingsタブのAPIへ移動し「Enable Workflow API and backend workflows」にチェックが入っていることを確認してください。
1. エレメントを配置
チェックボックスのチェックをいれたユーザーにメールを送る処理を行いたいので以下のようにRepeating Groupにユーザー一覧とチェックボックス、その下にメールで送信したい内容を入れるMultiline Input、一番下に送信ボタンを配置しました。今回はユーザー情報を取得したいのでType of contentはUserになります。
2. チェックしたユーザーをリストにまとめるCustom Stateを設定
次にチェックを入れたユーザーをCustom Stateにリストとして保存する実装を行います。
まずはRepeating GroupにCustom stateを設定します。
次にチェックを入れたらリストに追加し、チェクを外したらリストから削除の設定をWorkflowで設定していきます。
3. 繰り返し処理の設定
次に送信を押した際に肝心の繰り返し処理が行われるようにしたいのでその処理をBackend workflowで行っていきます。
Backend workflowsの画面に移動したら、
Click here to add a backend workflowをクリックし、New API workflowを選択します。
そしてAPI workflowの設定を行なっていきます。
名前は分かりやすくsend-maillistにしています。
またフロント側からチェックしたユーザーリストをバックエンド側に受け渡したいのでKeyをuserlists、TypeはUserにしました。同じくMultiline Inputに入力するテキスト内容を受け渡したいので
Keyをcontents Typeをtextにしました。
ここはリストではないので is alist/arrayにチェックは不要です。
ここまできたらworkflowからアクションを設定していきます。
今回はメールを送りたいのでSend emailを選択します。
メールを送る際のいつもの画面が出てきました!
注目すべきは、先ほど設定した「Key」が選択項目に追加されていることです!
このKeyを使い「フロント側から受け渡したデータ」を指定します。
いつもなら、Multiline Inputに入力した値は「Multiline Input A’s value」とかで指定しますが、Backendなのでフロントから直の指定ができません。
Keyを介して項目の指定を行います。
指定後はこのようになります↓
フロント側から渡す
・ユーザーリスト
・送信テキスト内容
2つをしっかりパラメータ(さきほどのKey)で指定しています。
To:の中身は :first item にするのをお忘れなく!
この後の設定で理解できると思いますが、actionのStep1ではリストで渡されたユーザー(メールアドレス)の一つ目を指定します。
次にactionのStep2で、この処理自体を繰り返します。
Schedule API Workflowの設定は以下のように行います
それぞれ何を意味するかを解説すると↓
API Workflow : send-maillist(loop)を繰り返します
Scheduled date : いつ行うの項目、すぐ行なって欲しいのでcurrent date/time
Userlists : step1で送った人分は差し引く
Contents : 送る文章に変更はないのでcontentsのままで
Only when : リストが最後の人になるまで(送る人がいなくなるまで)この処理を続ける
重要な点としては送るメールアドレスはどれか、といつまでこの繰り返し処理を行うのか、を指定することが重要になりそれらはそれぞれuserlistsとonly whenに入ってきます。
4. フロントの設定
Backend workflow側での設定が完了しました。
最後にフロントでこのAPI workflowを発動させるトリガーを設定します。
送信ボタンをクリックしてworkflowを設定していきます。
そして以下のようにworkflowを設定します。