ループ

1. 「ループ」ノートの概要

配列型エコー から順番に要素を取り出して、繰り返し処理を行うノートです。

「ループ」ノート内に配置された一連のノートを、配列型エコーの要素の数だけ、繰り返し処理をします。

例を交えて、本ノートについて説明します。

たとえば、ある条件を満たした購入者にメールを送りたい場合、「ループ」ノートを使って実現できます。

ループフレーズ例

  1. 受注伝票を特定の条件で検索し、検索結果を受注伝票リスト(配列型エコー)として出力
  2. 配列型エコーの要素の数だけ、処理を繰り返す
  3. 伝票内の購入者メールアドレスへメール送信

 💡 上のフレーズで「ループ」ノートを使わない場合、メールの本文にエコーを使用できません。

 

2.「ループ」ノートの設定方法

「ループ」ノートには、以下を設定する必要があります。

  1. 繰り返し処理をする対象の、配列型エコーを選択
  2. 繰り返し処理中に予期せぬエラーが発生した場合の処理
    1. 続けて処理を行う
    2. 処理を中断する

これらを設定するのが「ループ」ノートの以下の項目になります。

  • シーケンス
  • ループ内でエラーが発生したときの制御

次に詳しく説明します。

2.1. シーケンス

この項目は、ループ処理の対象とする配列型のエコーを選択するものです。

先行するノートで取得したエコーのうち、配列型のものを選択することができます。

例えば、Google スプレッドシート「行を検索」ノートの結果を、ループで処理したい場合は検索結果のエコーを選択します。

シーケンス「ループ」ノート|シーケンスのエコーを選択

2.2. エラーが発生したときの制御

この項目は、ループ内のノートでエラーが発生した場合、その後のループ処理をどのように進めていくかを設定するものです。

ループの制御 (2)「ループ」ノート|ループ内でエラーが発生したときの制御


2.2.1 設定の必要性

TēPs のループ処理では、 ループ内でエラーが発生したときの制御を、設定することをおすすめしています。

例えば、次のようなケースがあったとします。

ループで繰り返し処理するフレーズの運用において、100 件のデータの処理中にエラーが発生した場合

  • パターン A: 重要なデータなので、エラーが発生した時点で 残りのデータ は処理せずに中断してほしい。
  • パターン B: 手間をかけずに自動で処理したい。処理できなったデータがあれば、個別に後で手動対応するので、 残りのデータは継続して処理してほしい。

このように、フレーズの利用目的や業務の重要度が異なるため、ループ内のエラーの制御を設定できるようにしています。


2.2.2 選択できる内容

ループ内でエラーが発生したときの制御には以下の選択肢を設定できます。

  • ループを抜ける(BREAK)
  • 次のループ処理へスキップ(CONTINUE)
  • フレーズの実行を中止する(TERMINATE)

各設定の特徴や違いをみていきましょう。

(1)ループを抜ける(BREAK)

ループ内のノートでエラーが発生した時点で、繰り返す処理を中断し、ループの外の処理に移ります。

ループ内で処理する予定だった残りのデータは処理されませんが、ループの外の処理は実行されるため、フレーズの実行自体は中断されません。

ループの制御1ループを抜ける(BREAK)|2 件目の配列データのノート B でエラーが発生した場合

上のフレーズを例に説明します。

3 件の配列データをループで処理中に、2 件目の配列データのノート B でエラーが発生した場合、どうなるでしょうか。

1 件目: ノート A → ノート B → ノート C を実行する

2 件目:ノート A を実行→ノート B でエラーになる

エラーが発生したときの制御がループを抜ける(BREAK) の設定のため、ループ処理自体を中断する

3 件目: 処理しない

ループ処理を抜けて、ノート D を実行する

 

(2)次のループ処理へスキップ(CONTINUE)

ループ内のノートでエラーが発生した時点で、該当データの処理をスキップし、次の繰り返しデータの処理に移ります。

ループの制御1 (1)次のループ処理へスキップ(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. 単独ループのケース

ループの制御1 (2)次のループ処理へスキップ(CONTINUE)|2 件目の配列データのノート B でエラーが発生した場合


上のフレーズを例に、単独ループのケースを説明します。

3 件の配列データをループで処理中に、2 件目のデータのノート B でエラーが発生した場合、どうなるでしょうか。

1 件目:ノート A → ノート B → ノート C を実行する

2 件目:ノート A を実行 → ノート B でエラーになる。

エラーが発生したときの制御がフレーズの実行を中止する(TERMINATE)の設定のため、ループ処理を中断する

3 件目: 処理しない

フレーズの実行を中断する

 

(3)- 2. 二重ループのケース

ループの制御2次のループ処理へスキップ(CONTINUE)|外側ループの 2 周目で、内側ループの子データの 2 件目 e でエラーが発生した場合

上のフレーズを例に、二重ループのケースを説明します。

この例では、配列型のデータ(便宜上、親データと呼びます)の内部にさらに配列データ(便宜上、子データと呼びます)を持つ構造になっています。

上の例は、外側のループで親データの 1 - 2 - 3 を順に処理し、内側のループで各データが持つ子データを順番に処理するフレーズになります。


外側ループの 2 周目で、内側ループの子データの 2 件目 e でエラーが発生した場合、どうなるでしょうか?

親データ 1 件目

  1. ノート A を実行
  2. 内側ループで子データの要素全 3 件分でノート B → ノート C を実行する
  3. ノート D を実行

親データ 2 件目

  • ノート A を実行
  • 内側ループで子データの要素を順に処理
    • 子データ 1 件目 d:ノート B → ノート C を実行する

    • 子データ 2 件目 e: ノート B でエラーとなる

      エラーが発生したときの制御がフレーズの実行を中止する(TERMINATE)の設定のため、内側ループ自体を中断する

      → ノート C を実行しない


これ以降の動作が、外側ループの設定によって変わります。

  1. 外側のループのエラー制御が ループを抜ける(BREAK)の場合

    → ノート D を実行しない

    → 親データの 3 件目も処理せず、外側ループを中断する。

    → ノート E を実行する

  2. 外側のループのエラー制御が 次のループ処理へスキップ(CONTINUE) の場合

    → ノート D を実行しない

    → 親データの 3 件目の処理に移る (外側ループを継続する)

    → 親データ 3 件目:子データの要素全 3 件分でノート B → ノート C を実行した後、ノート D を実行する

    → ノート E を実行する

  3. 外側のループのエラー制御が フレーズの実行を中止する(TERMINATE)の場合

    → ノート D を実行しない

    → 親データの 3 件目も処理せず、外側ループを中断し、フレーズの実行を中断する

このように、フレーズの利用目的や業務の重要度に合わせて、ループ内のエラーの制御を設定しましょう。