無限ループとは
RKシリーズの繰り返し処理の一つである「繰り返し(無限ループ)」は、その名の通り、明示的に繰り返しを抜ける処理が実行されるまで、同じ処理ブロックを永遠に繰り返し続けるアクティビティです。
通常の繰り返し処理(回数指定や要素数に基づくもの)は、事前に決まった回数やデータ件数で自動的に終了しますが、無限ループは「いつ終わるかが事前にわからない」場面でその真価を発揮します。
しかし「無限」という言葉が示す通り、抜ける条件を設定しないまま実行すると、シナリオが永遠に終了しない重大な事態になります。そのため、無限ループを使用する際には、必ず「抜ける条件」を同時に設計することが鉄則です。
無限ループが向いている3つの使用シーン
無限ループは、以下のような場面で特に効果的です。
シーン1:特定の時間を待機するとき
指定した時刻になるまで、または特定の条件(「00分ちょうど」など)が満たされるまで、繰り返しで時刻を取得し続ける場面です。待機時間が事前に決まっていない場合や、システムの状態変化を監視する場合に有効です。
具体例:
- チケット発売開始時刻(10:00ちょうど)まで待機し、発売と同時に購入処理を実行
- バッチ処理の完了時刻が不定なため、完了ステータスが「終了」になるまで監視
- ファイルがフォルダに格納されるまで待機し、格納されたら次の処理へ進む
シーン2:回数不明の繰り返しのとき
繰り返しが必要な回数が事前に数値化できない、または実行中に動的に変化する場面です。外部システムの応答やデータ件数が都度異なる場合に適しています。
具体例:
- Webページの「次へ」ボタンが存在する限り、ページをめくってデータを収集
- ポップアップが表示される限り、それを閉じてメイン処理を続行
- エラーが解消されるまで、同じ処理をリトライ
シーン3:同じ処理を永遠と行いたいとき
常時監視や定期実行が必要な業務で、手動で停止するまで処理を続行したい場面です。サーバーや自動化マシン上で継続的に動作させるケースに該当します。
具体例:
- 受信フォルダを常時監視し、新規ファイルが到着したら自動処理を実行
- 在庫状況を定期的に監視し、閾値以下になったら発注処理を実行
- メール受信箱を監視し、特定条件のメールが届いたら自動対応
実践例:早い者勝ちのチケット購入
無限ループの典型的な使用例として、「発売開始時刻ピッタリにチケットを購入する」シナリオを挙げて説明します。
シナリオの状況
人気アーティストのコンサートチケットが、本日10:00に発売開始されます。1秒でも遅れると売り切れる可能性があり、人間の手作業では間に合わない状況です。そこで、RKシリーズの無限ループを使って、10:00ちょうどに自動で購入ボタンを押すシナリオを構築します。
シナリオの流れ
- 購入サイトを事前に開き、ログインまで完了しておく
- 「繰り返し(無限ループ)」アクティビティを配置する
- 繰り返し内部で「時刻を取得」アクティビティを実行し、現在時刻(分)を変数「現在の分」に格納する
- 「もし〜ならば(If)」で「現在の分 = 00」を判定する
- 条件が真(10:00ちょうど)なら、購入ボタンをクリックし、「繰り返しを抜ける」アクティビティを実行する
- 条件が偽なら、短時間(0.5秒など)待機してから再び時刻を取得する
なぜ無限ループが適しているか
このケースでは、10:00になるまでの待機時間が事前に何秒かわからないため、固定の「待機」アクティビティでは対応が困難です。9:59:30から実行開始した場合と9:58:00から開始した場合では、必要な待機時間が大きく異なります。
無限ループを使えば、時刻を繰り返し取得しながら、条件が満たされる瞬間に即座に購入処理に移行できます。00分になるまでの繰り返し回数は不明ですが、無限ループならその点を気にする必要がありません。
無限ループで必ずセットで使うアクティビティ
無限ループは「無限に繰り返す」ため、抜ける処理を必ず同時に実装する必要があります。RKシリーズでは、以下のどちらか(または両方)のアクティビティを組み合わせて使用します。
セットアクティビティ1:条件分岐(もし〜ならば)
「もし〜ならば(If)」アクティビティを無限ループの内部に配置し、特定の条件が満たされたときに「繰り返しを抜ける」アクティビティを実行する方法です。
動作の仕組み
- 無限ループ内部で、毎回条件を判定する
- 条件が偽の間は、繰り返し内部の残りの処理を実行し、次の周へ進む
- 条件が真になったら、「繰り返しを抜ける」を実行し、ループを終了する
典型的な使用パターン
| 目的 | 条件式の例 |
|---|---|
| 特定時刻まで待機 | 現在時刻 = 10:00 |
| 特定要素の出現を待つ | 要素が存在する = True |
| ファイルの到着を待つ | ファイル件数 > 0 |
| 回数制限付きリトライ | リトライ回数 > 最大回数 |
セットアクティビティ2:Try-Catch
「Try-Catch」アクティビティを無限ループの内部に配置し、エラーが発生したとき(またはエラーが発生しなかったとき)に繰り返しを抜ける方法です。
動作の仕組み
- 「Try」ブロック内で処理を実行する
- 処理が成功したら、Tryブロック末尾で「繰り返しを抜ける」を実行する
- 処理が失敗(エラー)したら、「Catch」ブロックに遷移し、エラーハンドリングを実行する。その後、次の周へ進むか、ループを抜けるかを設計する
典型的な使用パターン
| 目的 | Tryブロック | Catchブロック |
|---|---|---|
| 成功するまでリトライ | 処理を実行 → 成功したら抜ける | エラーログを記録 → 待機 → 次の周へ |
| エラー検出で監視終了 | 監視処理を実行 | エラー検出したら抜ける |
| タイムアウト制御 | 時刻チェック → タイムアウト超過なら抜ける | エラー種別を判定して対応 |
両方を組み合わせるケース
実際のシナリオでは、条件分岐とTry-Catchの両方を組み合わせるケースも多々あります。以下は、その典型的な構造です。
- 無限ループ内部にTry-Catchを配置
- Tryブロック内で、まず条件分岐で「終了条件」を判定
- 終了条件が満たされていれば「繰り返しを抜ける」を実行
- 終了条件が満たされていなければ、メイン処理を実行
- メイン処理でエラーが発生した場合、Catchブロックでエラーハンドリングし、一定回数以上のエラーならループを抜ける
「繰り返しを抜ける」アクティビティの活用法
無限ループを抜けるためには、RKシリーズの「繰り返しを抜ける」アクティビティを使用します。このアクティビティが実行されると、その時点で繰り返しブロックを即座に終了し、後続の処理へ移行します。
重要なポイント:「繰り返しを抜ける」の位置
「繰り返しを抜ける」は、無限ループの内部に配置する必要があります。ループの外側に配置しても機能しません。また、ネストした繰り返し(ループの中にループがある構造)の場合は、最も内側のループだけを抜ける動作になります。外側のループも同時に抜けたい場合は、別途「繰り返しを抜ける」を配置する必要があります。
複数条件で抜ける場合
「A条件が満たされたら抜ける、またはB条件が満たされたら抜ける」といった複数条件で抜けたい場合は、「もし〜ならば」アクティビティを複数配置するか、条件式を「A または B」のように組み合わせて一つの「もし〜ならば」で判定する方法があります。
よくある落とし穴と回避方法
無限ループは便利な反面、設計ミスによるトラブルが発生しやすい機能でもあります。事前に知っておくことで、重大な事故を防げます。
落とし穴1:抜ける条件を設定し忘れる
これが最も重大なミスです。無限ループの内部に「繰り返しを抜ける」を一切配置せずに実行すると、シナリオが永遠に終了しません。手動で強制停止するか、システムを再起動するまで停止しません。
回避方法:無限ループを配置したら、必ず同時に「繰り返しを抜ける」を配置する習慣をつけましょう。抜ける条件が確定するまでの間は、仮の条件(「リトライ回数 > 100」などの安全装置)を設定しておくことも有効です。
落とし穴2:抜ける条件が永遠に満たされない
「繰り返しを抜ける」は配置しているものの、条件式に誤りがあり、実際にはその条件が永遠に真にならないケースです。例えば、変数のスペルミスや比較対象の値の誤りなどが原因です。
回避方法:無限ループの条件式は、シナリオ実行前に必ず手動で検算しましょう。また、セーフティ機構として「最大繰り返し回数」を別途カウントし、一定回数を超えたら強制的に抜ける処理を追加すると安全です。
落とし穴3:繰り返し間隔が短すぎてシステム負荷が上がる
無限ループで短い間隔(0.1秒など)で繰り返すと、CPUやメモリの負荷が急上昇し、対象システムやRKシリーズ自体の動作が重くなる可能性があります。特にWebページの要素を高頻度で監視するケースでは、サーバー側からアクセス制限を受けるリスクもあります。
回避方法:ループ内部に適切な待機時間を設けましょう。時刻監視であれば1秒程度、ファイル監視であれば5〜10秒程度の間隔が現実的です。必要に応じて、監視対象の性質に合わせた間隔を設定してください。
落とし穴4:無限ループ内で変数が意図せず蓄積される
無限ループの内部でlist型変数や表型変数にデータを追加し続けると、メモリを圧迫し、最終的にシステムが不安定になる可能性があります。
回避方法:ループ内部で変数にデータを追加する場合は、不要になった古いデータを削除する処理を組み込むか、変数のサイズ上限を設けましょう。監視ログなどは、ファイル出力に切り替えるのが安全です。
他の繰り返し処理との使い分け
無限ループは強力な機能ですが、すべての場面で無限ループを使うべきというわけではありません。他の繰り返し処理と使い分けることで、より安全で効率的なシナリオが作成できます。
「繰り返し(回数)」との使い分け
「繰り返し(回数)」は、処理を事前に決めた回数だけ実行したい場面で使用します。例えば「次へボタンを最大10回だけクリックする」「最大3回までリトライする」などです。
回数が事前に決まっている、または上限回数を設けたい場合は「回数」を使いましょう。回数指定なら、万が一抜ける条件が満たされなくても、上限回数で自動的に終了するため安全性が高いです。
「繰り返し(条件)」との使い分け
「繰り返し(条件)」は、指定した条件が成り立っている間だけ繰り返す処理です。「次へボタンが存在する間」「エラーが発生していない間」など、ループの先頭で条件を判定し、条件が変化すると自動的に抜けます。
無限ループと異なり、条件の判定がループの構造自体に組み込まれているため、「繰り返しを抜ける」を明示的に書く必要がありません。条件ベースで自然に終了する場面では、こちらの方が記述がシンプルになります。
「繰り返し(すべての要素・表)」との使い分け
これらは、変数に格納されたデータ件数や表の行数に基づいて自動的に繰り返し・終了する処理です。データ駆動型の業務(顧客リストの一括処理、受注データの登録など)には向いていますが、データがない場合は処理がスキップされます。
データの件数に基づく処理はこれらを使い、条件やタイミングに基づく処理は無限ループや「条件」を使う—と使い分けるのが基本です。
まとめ
「繰り返し(無限ループ)」は、RKシリーズの繰り返し処理の中で最も自由度が高く、同時に最も注意が必要なアクティビティです。今回解説したポイントを整理すると、以下の通りです。
- 基本特性:明示的に抜けるまで同じ処理を繰り返し続ける。事前の回数指定が不要
- 向いている場面:特定時刻までの待機、回数不明の処理、常時監視・定期実行
- 必須セット:「もし〜ならば(条件分岐)」または「Try-Catch」と必ず組み合わせる
- 抜ける方法:「繰り返しを抜ける」アクティビティを条件付きで実行する
- 注意点:抜け忘れ防止、条件の検算、繰り返し間隔の最適化、メモリ管理
無限ループを正しく理解し、他の繰り返し処理と組み合わせることで、タイミングに敏感な業務や不定形の監視業務も自動化できます。ただし、「無限」という特性を常に意識し、必ず安全装置を同時に設計することが、安定したシナリオ作成の鍵となります。
無限ループの設計でお悩みの場合や、複雑な条件分岐・Try-Catchとの組み合わせで悩んでいる場合は、ぜひRKパートナーズまでご相談ください。貴社の業務特性に最適な繰り返し設計を支援させていただきます。
