
Power AutomateのDo Untilループは、条件が満たされるまで処理を繰り返すアクションです。Apply to eachとは違い、件数ではなく状態を基準にループします。使いどころを押さえておくと、待機処理や再試行ロジックをシンプルに書けます。

Do UntilとApply to eachの違い
Power Automateのループ処理には主に2種類あります。
| アクション | 繰り返しの基準 | 主な用途 |
|---|---|---|
| Apply to each | 配列の件数分だけ繰り返す | リストの全件処理 |
| Do Until | 条件が true になるまで繰り返す | 承認待ち、状態チェック、再試行 |
Do Untilは「あるフラグがオンになるまで待つ」「HTTPリクエストが成功するまで最大3回試す」といった処理に向いています。件数が決まっていない、状態が変わるまで待ちたい——というときはDo Untilの出番です。
設定方法
Do Untilアクションを追加すると、次の3つを設定します。
- 終了条件:この条件が true になったらループを抜ける
- カウント上限:最大何回繰り返すか(デフォルト60回)
- タイムアウト:最大でどのくらい実行するか(ISO 8601形式。例:PT1H = 1時間)
カウントとタイムアウトのどちらかに達した時点でも、条件に関わらずループが終了します。無限ループを防ぐために必ず設定しておきましょう。

よく使うパターン
パターン① 承認結果が出るまで待機する
承認アクションの結果をSharePointリストに書き込んでおき、ステータスが「承認済み」または「却下」になるまでDo Untilで待機するという構成です。承認フローを別フローで管理していて、結果の反映タイミングを制御したいときに使います。
ループの中に「アイテムの取得」を置いてステータスを確認し、承認済みか却下になっていればループを抜けるように終了条件を設定します。
パターン② HTTPリクエストの再試行
外部APIを呼び出すとき、ネットワーク状況によって一時的に失敗することがあります。Do Untilで最大3回まで再試行し、成功したらループを抜けるという構成が取れます。
変数(カウンター)をループ内でインクリメントし、成功フラグが立つかカウントが3になったらループ終了という書き方が定番です。
(終了条件)
@or(equals(variables('successFlag'), true), greaterOrEquals(variables('retryCount'), 3))
パターン③ ファイルが存在するまで待つ
別のシステムが特定のSharePointフォルダにファイルを置くまで待機し、ファイルが確認できたら後続処理を進めるというケースでも使えます。ループ内でファイルの存在確認を行い、見つかったらフラグを立てて終了します。
無限ループを防ぐ
Do Untilで最も注意すべきは無限ループです。終了条件の式が間違っていると、カウント上限やタイムアウトに達するまで延々とループし続けます。結果として実行回数を無駄に消費し、フローの課金にも影響します。
対策として必ずやっておきたいのは次の2点です。
- カウント上限を適切な値に設定する(再試行なら3〜5回、待機なら処理時間に見合った回数)
- タイムアウトを設定して、時間が来たら強制終了させる
ループが意図せず長く続いている場合は、実行履歴でループの繰り返し回数を確認できます。デバッグの方法については実行履歴の見方を参考にしてください。

ループ内のアクションに遅延を入れる
Do Untilで状態チェックを繰り返すとき、処理間隔を空けずにループさせると短時間に大量のAPI呼び出しが発生します。ループ内に「遅延」アクション(Delay)を入れて、1〜5分間隔で確認するようにするのが一般的です。
たとえば承認待ちのフローなら、5分ごとにSharePointのステータスを確認すれば十分です。インターバルなしで回すと、60回の上限にすぐ達してしまいます。
まとめ
Do Untilは「条件が変わるまで待つ」処理を書くための専用ループです。使いどころはApply to eachより少ないですが、承認待ちや再試行ロジックなど、特定の場面では他のアクションでは代替しにくい役割を担います。無限ループへの備えさえ怠らなければ、使い勝手のいいアクションです。
