1. 「ループ」ノートの概要
配列型エコー から順番に要素を取り出して、繰り返し処理を行うノートです。
「ループ」ノート内に配置された一連のノートを、配列型エコーの要素の数だけ、繰り返し処理をします。
例を交えて、本ノートについて説明します。
たとえば、ある条件を満たした購入者にメールを送りたい場合、「ループ」ノートを使って実現できます。
フレーズ例
- 受注伝票を特定の条件で検索し、検索結果を受注伝票リスト(配列型エコー)として出力
- 配列型エコーの要素の数だけ、処理を繰り返す
- 伝票内の購入者メールアドレスへメール送信
💡 上のフレーズで「ループ」ノートを使わない場合、メールの本文にエコーを使用できません。
2.「ループ」ノートの設定方法
「ループ」ノートには、以下を設定する必要があります。
- 繰り返し処理をする対象の、配列型エコーを選択
- 繰り返し処理中に予期せぬエラーが発生した場合の処理
- 続けて処理を行う
- 処理を中断する
これらを設定するのが「ループ」ノートの以下の項目になります。
- シーケンス
- ループ内でエラーが発生したときの制御
次に詳しく説明します。
2.1. シーケンス
この項目は、ループ処理の対象とする配列型のエコーを選択するものです。
先行するノートで取得したエコーのうち、配列型のものを選択することができます。
例えば、Google スプレッドシート「行を検索」ノートの結果を、ループで処理したい場合は検索結果のエコーを選択します。
「ループ」ノート|シーケンスのエコーを選択
2.2. エラーが発生したときの制御
この項目は、ループ内のノートでエラーが発生した場合、その後のループ処理をどのように進めていくかを設定するものです。
「ループ」ノート|ループ内でエラーが発生したときの制御
2.2.1 設定の必要性
TēPs のループ処理では、 ループ内でエラーが発生したときの制御を、設定することをおすすめしています。
例えば、次のようなケースがあったとします。
ループで繰り返し処理するフレーズの運用において、100 件のデータの処理中にエラーが発生した場合
- パターン A: 重要なデータなので、エラーが発生した時点で 残りのデータ は処理せずに中断してほしい。
- パターン B: 手間をかけずに自動で処理したい。処理できなったデータがあれば、個別に後で手動対応するので、 残りのデータは継続して処理してほしい。
このように、フレーズの利用目的や業務の重要度が異なるため、ループ内のエラーの制御を設定できるようにしています。
2.2.2 選択できる内容
ループ内でエラーが発生したときの制御には以下の選択肢を設定できます。
- ループを抜ける(BREAK)
- 次のループ処理へスキップ(CONTINUE)
- フレーズの実行を中止する(TERMINATE)
各設定の特徴や違いをみていきましょう。
(1)ループを抜ける(BREAK)
ループ内のノートでエラーが発生した時点で、繰り返す処理を中断し、ループの外の処理に移ります。
ループ内で処理する予定だった残りのデータは処理されませんが、ループの外の処理は実行されるため、フレーズの実行自体は中断されません。
ループを抜ける(BREAK)|2 件目の配列データのノート B でエラーが発生した場合
上のフレーズを例に説明します。
3 件の配列データをループで処理中に、2 件目の配列データのノート B でエラーが発生した場合、どうなるでしょうか。
1 件目: ノート A → ノート B → ノート C を実行する
2 件目:ノート A を実行→ノート B でエラーになる
エラーが発生したときの制御がループを抜ける(BREAK) の設定のため、ループ処理自体を中断する
3 件目: 処理しない
ループ処理を抜けて、ノート D を実行する
(2)次のループ処理へスキップ(CONTINUE)
ループ内のノートでエラーが発生した時点で、該当データの処理をスキップし、次の繰り返しデータの処理に移ります。
次のループ処理へスキップ(CONTINUE)|2 件目の配列データのノート B でエラーが発生した場合
上のフレーズを例に説明します。
3 件の配列データをループで処理中に、2 件目のデータのノート B でエラーが発生した場合、どうなるでしょうか。
1 件目:ノート A → ノート B → ノート C を実行する
2 件目:ノート A を実行 → ノート B でエラーになる
エラーが発生したときの制御が次のループ処理へスキップ(CONTINUE)の設定のため、ノート C を実行せず、3 件目のデータの処理に移る
3 件目:ノート A → ノート B → ノート C を実行する
ループ処理が終わった後にノート D を実行する
(3)フレーズの実行を中止する(TERMINATE)
ループ内のノートでエラーが発生した時点で、フレーズの実行自体を中断します。
ただし、二重ループの内側で TERMINATE を設定した場合、エラー発生時の動作は外側ループノートのループ内でエラーが発生したときの制御の設定に任せることになります。
単独ループと、二重ループの具体的な例をあげて説明していきます。
(3)- 1. 単独ループのケース
次のループ処理へスキップ(CONTINUE)|2 件目の配列データのノート B でエラーが発生した場合
上のフレーズを例に、単独ループのケースを説明します。
3 件の配列データをループで処理中に、2 件目のデータのノート B でエラーが発生した場合、どうなるでしょうか。
1 件目:ノート A → ノート B → ノート C を実行する
2 件目:ノート A を実行 → ノート B でエラーになる。
エラーが発生したときの制御がフレーズの実行を中止する(TERMINATE)の設定のため、ループ処理を中断する
3 件目: 処理しない
フレーズの実行を中断する
(3)- 2. 二重ループのケース
次のループ処理へスキップ(CONTINUE)|外側ループの 2 周目で、内側ループの子データの 2 件目 e でエラーが発生した場合
上のフレーズを例に、二重ループのケースを説明します。
この例では、配列型のデータ(便宜上、親データと呼びます)の内部にさらに配列データ(便宜上、子データと呼びます)を持つ構造になっています。
上の例は、外側のループで親データの 1 - 2 - 3 を順に処理し、内側のループで各データが持つ子データを順番に処理するフレーズになります。
外側ループの 2 周目で、内側ループの子データの 2 件目 e でエラーが発生した場合、どうなるでしょうか?
親データ 1 件目
- ノート A を実行
- 内側ループで子データの要素全 3 件分でノート B → ノート C を実行する
- ノート D を実行
親データ 2 件目
- ノート A を実行
- 内側ループで子データの要素を順に処理
子データ 1 件目 d:ノート B → ノート C を実行する
子データ 2 件目 e: ノート B でエラーとなる
エラーが発生したときの制御がフレーズの実行を中止する(TERMINATE)の設定のため、内側ループ自体を中断する
→ ノート C を実行しない
これ以降の動作が、外側ループの設定によって変わります。
外側のループのエラー制御が ループを抜ける(BREAK)の場合
→ ノート D を実行しない
→ 親データの 3 件目も処理せず、外側ループを中断する。
→ ノート E を実行する
外側のループのエラー制御が 次のループ処理へスキップ(CONTINUE) の場合
→ ノート D を実行しない
→ 親データの 3 件目の処理に移る (外側ループを継続する)
→ 親データ 3 件目:子データの要素全 3 件分でノート B → ノート C を実行した後、ノート D を実行する
→ ノート E を実行する
外側のループのエラー制御が フレーズの実行を中止する(TERMINATE)の場合
→ ノート D を実行しない
→ 親データの 3 件目も処理せず、外側ループを中断し、フレーズの実行を中断する
このように、フレーズの利用目的や業務の重要度に合わせて、ループ内のエラーの制御を設定しましょう。