ADVERTISEMENT

【Power Automate】手動実行ボタンが想定外に繰り返される時の入力値と条件分岐の直し方

【Power Automate】手動実行ボタンが想定外に繰り返される時の入力値と条件分岐の直し方
🛡️ 超解決

Power Automateの手動実行ボタン(マニュアルトリガー)を使ってフローを起動した際、1回しかクリックしていないのに処理が繰り返し実行されてしまうトラブルはよく発生します。この現象は多くの場合、入力値のデータ構造や条件分岐の設計に原因があります。本記事では、想定外の繰り返しが起きる代表的なパターンと、その修正方法を具体的に解説します。原因を切り分け、確実に直せるようになることを目指します。

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

  • 最初に見る場所: フローの実行履歴で、何回のトリガーが記録されているか、また各実行の入力値を確認します。
  • 切り分けの軸: トリガー自体の問題(複数トリガーや重複登録)なのか、フロー内のApply to eachや条件分岐による繰り返しなのかを分けて考えます。
  • 注意点: 会社のPCで共有フローを編集する場合は、他のメンバーに影響を与えないよう事前にコピーを作成してから修正してください。

ADVERTISEMENT

手動実行ボタンが繰り返される主な原因

想定外の繰り返しが発生する原因は、大別して3つあります。まず、トリガーそのものが複数登録されているケース。次に、入力値が配列であり、その配列の各要素に対してフロー内でApply to eachが使用されているケース。最後に、条件分岐の設定ミスで、同じ処理が複数の分岐で実行されるケースです。それぞれの原因を詳しく見ていきましょう。

原因1: トリガーの重複や誤った設定

Power Automateでは、1つのフローに複数の手動トリガーを追加することができます。うっかり同じ種類のトリガーを2つ追加してしまうと、ボタンを1回押すだけで2つのトリガーが同時に起動し、フローが2回実行されます。また、トリガーの設定で「複数の入力を許可」などのオプションが有効になっていると、1回のクリックで複数の入力セットが生成される場合があります。

原因2: 入力値が配列でApply to eachが使われている

手動トリガーで受け取る入力値が配列(例: JSON配列)の場合、その後のアクションでApply to eachを使用すると、配列の要素数だけ処理が繰り返されます。ユーザーは1回の実行を意図していても、配列に複数の要素が含まれていれば、その数だけループが回ります。特に、入力値が自動的に配列に変換されるケース(例えば、Power Appsからの呼び出し)では注意が必要です。

原因3: 条件分岐の設計ミス

条件分岐(Condition)の設定で、複数の条件が同時に成立する場合、意図せず複数の分岐が実行されることがあります。また、Switchケースや並列分岐(並列分岐)で、同じ処理が複数のブランチに配置されていると、トリガー1回に対して複数回のアクションが実行されます。

繰り返しを見分けるための確認手順

原因を特定するには、まずフローの実行履歴を確認します。Power Automateポータルで該当のフローを開き、「実行履歴」をクリックしてください。1回の手動実行に対して複数の実行が記録されている場合、トリガーが重複している可能性があります。各実行の詳細を開き、「入力」タブでトリガーに入力された値を確認します。すべての実行で同じ入力値であればトリガー重複、異なる値や配列が含まれていれば入力値の構造が原因の可能性が高いです。

実行履歴から読み取るポイント

実行履歴の「状態」が「成功」や「失敗」の横に、実行のインデックス番号が表示されます。例えば、2回の実行が記録されていた場合、1回目の実行と2回目の実行の開始時刻がほぼ同じ(数秒以内)であればトリガー重複が疑われます。一方、実行間隔にラグがある場合は、フロー内部のループや分岐による連鎖的な実行が考えられます。

入力値の扱いによる繰り返しの修正方法

入力値が配列であることが原因で繰り返しが発生している場合、以下の修正を検討します。

ケース1: 入力値が単一の値であるべきなのに配列になっている

手動トリガーの入力スキーマで、型を「配列」ではなく「文字列」や「整数」などに変更します。スキーマエディタで、該当プロパティの「type」を確認し、arrayになっていれば単一の型に修正してください。既にフローが配列を前提に組まれている場合は、配列の最初の要素だけを取り出すアクション(例: first関数)を追加します。

ケース2: 複数の入力を意図しているが、Apply to eachの制御が不足

Apply to eachアクションの設定で、「同時実行の制限」をオンにし、最大並列数を1に設定します。これにより、配列の要素が逐次的に処理され、重複感は減りますが、根本的に繰り返し回数を減らしたい場合は、Apply to eachをやめて最初の要素だけ処理するように変更します。

条件分岐の誤りによる繰り返しと修正例

条件分岐のミスで繰り返しが起きる典型的なパターンとして、以下のようなケースがあります。

パターン: 複数の条件が同時にTrueになる

Conditionアクションでは、複数の条件をANDやORで結合できます。しかし、ORを使用した場合、いずれかの条件がTrueになればその分岐に入ります。もしORで結合された複数の条件がすべてTrueになる状況では、本来1回だけ実行されるべき処理が、複数のブランチで実行されることはありません(Conditionはどちらか一方の分岐のみ実行)。ただし、Switchアクションでは複数のケースがマッチする可能性があり、その場合には「Default」ケース以外のすべてのマッチしたケースが実行されます。Switchを使用している場合は、各ケースの条件が排他的になるように設定します。

パターン: 条件分岐内でフローを起動するアクションが含まれている

条件分岐の中に「フローの実行」アクションなど、自分自身のフローを再度呼び出すような処理があると、無限ループが発生します。手動トリガーのフローでは、自分自身を呼び出さないように注意してください。もし他のフローを呼び出す必要がある場合は、呼び出し先のフローがもう一度このフローを呼び出さないように設計します。

トラブルシューティングの手順

実際の修正手順を、以下のステップで行います。

  1. フローのコピーを作成します。元のフローを右クリックして「保存してコピーを作成」を選択します。
  2. コピーしたフローを開き、手動トリガーの「入力の追加」を確認します。不要な入力項目がないか、型が正しいかをチェックします。
  3. トリガー直後に「Table」アクションなどを置き、入力値を出力して実行を確認します。これにより、実際に渡されたデータ構造を把握できます。
  4. フロー内のApply to eachアクションを特定し、そのアクションの設定で「同時実行の制限」を有効にし、値を1に設定します。さらに、Apply to eachの出力がどの程度のループ回数になるか、配列の長さを確認します。
  5. 条件分岐がある場合は、一時的にすべての条件を削除し、単純なシーケンスにして実行してみます。繰り返しが解消されれば、条件分岐に問題があることが確定します。
  6. 問題の原因が特定できたら、修正を加えて再度テスト実行します。問題が解決したら、元のフローにも同様の修正を適用します。

比較表: 正常動作と繰り返し動作の違い

項目 正常な動作 繰り返し動作
トリガー数 1つの手動トリガーのみ 複数のトリガーが存在(同一種類でも可)
入力値の型 単一値(文字列、数値など) 配列または複数値
Apply to eachの設定 使用しないか、並列数を制御 並列数無制限、かつ配列サイズが大きい
条件分岐 排他的な条件(どれか1つのみ実行) 複数の条件が同時にTrue、または非排他的なSwitch
実行履歴 1回の操作に対して1つの実行レコード 同じ開始時間で複数の実行レコードが生成される

よくある質問(FAQ)

Q: 手動実行ボタンを押したのに、フローが2回起動しました。トリガーは1つだけです。

A: 入力値が配列になっている可能性が高いです。トリガーの入力スキーマで型が配列になっていないか確認してください。また、フロー内でApply to eachを使用している場合は、その配列の要素数が2以上になると、2回のループが発生します。

Q: 複数の条件分岐がありますが、すべての分岐が実行されているようです。

A: Conditionアクションでは「Trueの場合」と「Falseの場合」の2択しかありませんが、並列分岐(ブランチ)を使用している場合は、複数のブランチが同時に実行されることがあります。並列分岐はすべての分岐が実行される仕組みなので、意図した動作かどうか確認してください。

Q: 管理者に伝えるべき設定はありますか?

A: フローが共有環境で使用されている場合、トリガーの重複防止や入力スキーマの変更は管理者権限が必要な場合があります。また、DLP(データ損失防止)ポリシーによって、Apply to eachの並列実行制限が適用されていることもあるので、管理者に相談してください。

まとめ

手動実行ボタンが想定外に繰り返される問題は、トリガー設定、入力値のデータ構造、Apply to eachの扱い、条件分岐の設計のいずれかに原因があります。最初に実行履歴で複数回の実行が記録されていることを確認し、トリガーが重複していないか、入力値が配列になっていないかをチェックしましょう。修正はコピーフローで実施し、安全を確認してから本番フローに反映してください。これらの手順で、繰り返し問題のほとんどを解決できます。


ADVERTISEMENT

この記事の監修者
✍️

超解決 第一編集部

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

ADVERTISEMENT