ADVERTISEMENT

【Power Automate】再試行ポリシーが想定どおり進まない時の入力値と条件分岐の直し方

【Power Automate】再試行ポリシーが想定どおり進まない時の入力値と条件分岐の直し方
🛡️ 超解決

Power Automateの再試行ポリシーは、アクションが失敗した際に自動的に再実行する便利な機能です。しかし、「設定した回数だけ再試行しない」「再試行の間隔が想定と異なる」「条件分岐が原因で再試行されない」といったトラブルに悩む方は少なくありません。この記事では、再試行ポリシーが想定どおり進まない原因のうち、特に「入力値」と「条件分岐」に着目して具体的な直し方をお伝えします。

【要点】この記事で確認すること

  • 最初に見る場所: フローの該当アクションの「設定」タブで、再試行ポリシーのプロパティ(カウント、間隔、タイムアウト)が正しく構成されているか。
  • 切り分けの軸: 問題がアクションの入力値にあるのか、再試行後の条件分岐(例:Configure Run After)にあるのか、それともランタイムの変数値によるものかを分けて調査する。
  • 注意点: 会社PCの運用ポリシーによっては、再試行ポリシーで大量の実行が発生し課金やリソース消費につながる可能性があるため、事前に管理者へ確認が必要な場合があります。

ADVERTISEMENT

再試行ポリシーの基本設定とよくある誤解

Power Automateでアクションに再試行ポリシーを設定するには、アクションの右上にある「…」メニューから「設定」を開き、再試行ポリシーの項目を編集します。ここで指定できるのは「再試行回数(カウント)」「再試行の間隔(秒)」「タイムアウト(秒)」の3つです。よくある誤解として、「再試行回数は失敗した回数ではなく、最大試行回数(最初の実行を含む)」という点が挙げられます。例えばカウントを3に設定すると、最初の実行と2回の再試行で合計3回実行されます。

また、再試行ポリシーは「アクションがタイムアウトした場合」や「HTTP要求で一時的なエラーが返った場合」など、特定のエラーに対してのみ作動します。アクションが成功した場合や、設定したエラー以外の例外が発生した場合は再試行されません。この動作を理解しておかないと、「なぜか再試行が実行されない」という事態に陥ります。

再試行カウントの指定方法と注意点

再試行回数のカウントは1~100の範囲で指定可能です。ただし、各アクションのタイムアウト設定によっては、再試行の間隔がタイムアウトを超えてしまうと正常に動作しません。例えばタイムアウトを30秒に設定し、再試行の間隔を60秒に設定すると、再試行が開始される前にタイムアウトエラーが発生してしまいます。このような矛盾した設定は避けなければなりません。

間隔とタイムアウトのバランス

再試行の間隔は初回の再試行までの待機時間です。例えば間隔を10秒に設定すると、最初の失敗から10秒後に最初の再試行が行われます。2回目以降は指数バックオフなどは標準では適用されず、一定間隔で繰り返されます(注意:プレミアムコネクタによっては異なる場合があります)。タイムアウトはアクション全体の許容時間であり、再試行を含めた合計時間がこれを超えるとアクションは失敗します。したがって、タイムアウト ≧ 再試行カウント × 再試行間隔の関係を満たす必要があります。

設定項目 正常な設定例 問題のある設定例
再試行回数 (カウント) 3 (合計3回実行) 1 (合計1回実行=再試行なし)
再試行間隔 (秒) 10 0 またはタイムアウトより大きい値
タイムアウト (秒) 60 (3×10=30より十分大きい) 20 (再試行の合計30秒を超えられない)

入力値が原因で再試行が失敗するパターン

再試行ポリシーが想定どおり進まない原因の一つに、アクションに渡す入力値の問題があります。特に、動的な値や変数を利用している場合、再試行時に値が変化したり、初期値に戻ったりすることがあります。

動的コンテンツの評価タイミング

Power Automateはアクションの入力値を、アクションが開始されるたびに評価します。そのため、再試行時にはその時点の変数値やトリガー出力が使われます。例えば、以前のアクションで変数を更新していた場合、再試行時には更新後の値が使用されることがあります。意図しない値で再試行が行われ、結果として同じエラーが繰り返されるケースがあります。

具体的な直し方:変数の固定化とスコープ

この問題を回避するには、再試行中に変わってほしくない値を事前に変数に保存し、スコープを使って値を固定します。次の手順を参考にしてください。

  1. 再試行を設定したいアクションの直前に「変数を初期化する」アクションを追加し、固定したい値を保持する変数を作成します。
  2. 変数の種類を「文字列」や「整数」など適切に設定し、値としてトリガー出力や前のアクションの結果を代入します。
  3. 問題のアクションの入力値に、直接動的コンテンツを指定する代わりに、先ほど作成した変数を使用します。
  4. 必要に応じて、変数を更新するアクションを再試行対象のアクションの後に配置し、再試行が発生した場合のみ更新したい値を変更します。
  5. 最後に、テストを実行し、再試行時に変数値が意図したとおりに保持されているか確認します。

条件分岐の設計ミスと修正方法

再試行ポリシーが動作した後、その結果に応じて分岐する「Configure Run After」設定を誤ると、期待するフローにならないことがあります。また、アクションの後続で条件分岐(条件アクション)を使う場合、再試行後にどの分岐に入るかを正しく設計する必要があります。

Configure Run After の落とし穴

各アクションの「設定」には「実行後の構成(Configure Run After)」があり、前のアクションが成功したか、失敗したか、タイムアウトしたか、スキップされたかなどに応じて後続アクションの実行を制御できます。再試行ポリシーが設定されているアクションの場合、再試行がすべて失敗した場合の状態は「失敗」となります。もし後続のアクションが「成功の場合のみ実行」に設定されていると、再試行が失敗した後に何も実行されません。

修正するには、再試行ポリシー付きアクションの後続アクションの「実行後の構成」を開き、「失敗」「タイムアウト」「スキップ済み」も含めて実行するように変更します。また、「条件付き実行」を利用している場合は、その条件式に再試行結果を反映するようなロジック(例:アクションの出力のエラーメッセージをチェック)を追加します。

条件アクション内での変数比較の注意

条件アクションで「変数Aが等しいか」のような比較を行う際、再試行によって変数が更新されていると条件の成否が変わります。例えば、再試行カウントを記録する変数を使って、一定回数再試行したら別の処理を行うといった場合、変数の増加タイミングを誤ると無限ループになる恐れがあります。

対策として、再試行内で変数を更新するアクションは、アクションの成功時または失敗時にのみ実行されるように「実行後の構成」で制御します。また、ループを防ぐために上限値を設定し、条件アクションで上限に達したら強制的に終了させるロジックを組み込みます。

アクションスコープを活用した再試行管理

複雑なフローでは、再試行ポリシーを個々のアクションに設定するよりも、スコープ(Scope)を利用して複数のアクションをグループ化し、スコープ自体に再試行ポリシーを設定する方法が有効です。スコープ内のすべてのアクションが失敗した場合にのみ再試行が行われ、入力値や条件分岐の管理がシンプルになります。

スコープの設定手順

  1. フローに「スコープ」アクションを追加します。
  2. スコープ内に再試行させたいアクションを配置します。
  3. スコープの「設定」を開き、再試行ポリシーを構成します。
  4. スコープの出力には、スコープ内の最後のアクションの結果が含まれます。これを利用して後続の条件分岐を設定します。
  5. テスト実行し、スコープ全体の再試行が期待どおり動作するか確認します。

テストとトラブルシューティングの実践

問題を切り分けるには、実際に再試行が発生する状況を作り出して動作を確認することが重要です。テストでは一時的なエラーを模擬するために、アクション内で意図的にエラーを発生させるか、外部システムの応答を遅延させる方法があります。

失敗パターンの例

  • カウントが1のまま変わらない: 再試行回数の設定で「1」と入力していた。正しくは「3」などに修正する。
  • 再試行間隔が0秒: 間隔を0に設定すると事実上再試行なしになる。最小1秒以上を推奨。
  • タイムアウトが短すぎて再試行できない: 再試行の合計時間がタイムアウトを超えている。タイムアウト値を十分に大きくする。
  • 条件分岐が「成功時のみ」で失敗すると後続なし: 再試行後も処理を続けたい場合は、失敗時も実行するようConfigure Run Afterを修正する。
  • 動的変数が再試行でリセット: 変数の初期化位置が悪い。再試行前に固定値として保存する。

管理者へ確認する情報

組織のPower Automate環境によっては、再試行ポリシーの最大値制限や、プレミアムライセンスが必要な機能(スコープの再試行など)が存在します。管理者に以下の点を確認してください。

  • 環境のPower Automateライセンスの種類(Office 365付属のものか、プレミアムか)。
  • 再試行ポリシーに関するテナントレベルの制限(例:最大再試行数、実行時間制限)。
  • 再試行による実行API呼び出し増加が課金に影響するかどうか。
  • ログ(Azure Log Analyticsなど)を有効にして、詳細なエラー情報を取得できるか。

よくある質問(FAQ)

Q: 再試行ポリシーが全く動作しません。何を確認すればよいですか?

まず、アクションの「設定」で再試行ポリシーが有効になっているか確認してください。次に、タイムアウト値が再試行間隔×カウントよりも大きいことを確認します。また、アクションが「成功」した場合は再試行されないため、テストでは必ずエラーが発生する状況を作る必要があります。例えば、HTTP要求アクションで存在しないURLを指定するとエラーになります。

Q: 再試行のたびに変数がリセットされてしまうのはなぜですか?

変数がアクションのスコープ内で定義されている場合、再試行時にそのアクションが再度実行されると、変数も初期化からやり直されることがあります。対策として、変数をフロー全体で有効な「グローバル変数」として初期化するか、スコープ外で変数を定義してからアクション内で参照するようにしてください。

Q: 条件分岐で再試行後の状態を正しく判定するには?

アクションの出力として「statusCode」や「error」などの情報が含まれている場合、条件アクションでそれらをチェックします。例えば、「アクションの出力のstatusCodeが500以上」という条件を追加することで、特定のエラー時だけ後続処理を変更できます。

まとめ

Power Automateの再試行ポリシーが想定どおり進まない原因は、入力値の固定化の不足や条件分岐の設定ミスにあることが大半です。本記事で紹介した「変数の事前固定」「Configure Run Afterの見直し」「スコープの活用」といった対策を実践することで、再試行の挙動を正確に制御できるようになります。また、再試行ポリシーの設定値(カウント、間隔、タイムアウト)の整合性を常に確認する習慣をつけてください。トラブルが発生した際は、テスト実行で再試行が発生する状況を再現し、アクションの実行履歴から各ステップの結果を確認することが問題解決の近道です。

ADVERTISEMENT

この記事の監修者
✍️

超解決 第一編集部

疑問解決ポータル「超解決」の編集チーム。正確な検証と、現場視点での伝わりやすい解説を心がけています。

ADVERTISEMENT