ADVERTISEMENT

【Power Automate】Apply to eachが勝手に増える時の整理手順

【Power Automate】Apply to eachが勝手に増える時の整理手順
🛡️ 超解決

Power Automateでフローを作成していると、意図しない場所に「Apply to each」が自動的に追加されたり、ループが入れ子で増えてしまう現象に遭遇することがあります。この問題はフローの実行速度低下や予期しないループ処理の原因となり、特に複数の配列を扱う際に発生しやすくなります。ここではApply to eachが勝手に増える根本原因と、それを整理・防止するための具体的な手順を解説します。会社の業務でPower Automateを利用している方向けに、端末やアカウントの設定ではなく、フロー設計上の観点からアプローチします。

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

  • 最初に見る場所: フロー内でアラートアイコンが表示されているアクションと、Apply to eachの設定画面にある「入力」の型情報。
  • 切り分けの軸: アクションの出力が配列か単一値か、またはフロー内で参照している式が配列を返していないか。
  • 注意点: 会社の環境ではPower Automateの管理ポリシーやコネクタの制限が影響する場合があります。勝手にアクションを削除する前に、フローのバックアップを取るか、バージョン履歴を確認してください。

ADVERTISEMENT

Apply to eachが自動増殖する主な原因

Power Automateはフロー作成時にアクションの出力が配列(コレクション)であると判断すると、自動的にApply to eachで囲む動作をします。この仕組みが、ユーザーの意図しない場所でループを追加してしまう根本的な理由です。具体的には以下のようなケースで増殖が発生します。

配列を返すアクションを直後に配置した場合

例えば「ファイルのリスト」アクションの出力は常に配列です。その出力を直接、別のアクションの入力として使用すると、Power Automateが自動的にApply to eachを追加してループ処理を行います。このとき、元々ループの外で1回だけ処理したいと思っていても、配列出力が検出されるたびにApply to eachが挿入されるため、複数のループが連鎖することがあります。

手動でアクションをコピー&ペーストした場合

フローエディター上でアクションをコピーして別の場所に貼り付けると、貼り付け先のコンテキストに応じてApply to eachが自動で追加されることがあります。特に、配列を参照する式を含むアクションをループの外に貼り付けると、その参照がトリガーとなって新たなApply to eachが生成されるケースも確認されています。

ループ内でさらに配列を生成する処理を行った場合

Apply to eachの中で、さらに別の配列を返すアクション(例えば「フィルターアレイ」や「JSONの解析」など)を使用すると、そのアクションが新たなApply to eachのきっかけになります。結果として、ループの中にループが入れ子で増えることになります。これが「勝手に増える」という感覚に直結します。

原因を特定するための確認手順

Apply to eachが増えた原因を切り分けるには、以下の手順でフローを検証します。パソコンまたはブラウザからPower Automateポータルにサインインして作業を進めてください。

  1. フローを編集モードで開きます。該当するフローを選択し、「編集」をクリックします。
  2. 画面右上の「フローチェッカー」を確認します。黄色や赤の警告アイコンが表示されている場合、そこに問題が潜んでいる可能性が高いです。特に「Apply to each」に関する警告に注目します。
  3. 一つ一つのApply to eachのヘッダー部分をクリックして詳細を表示します。「入力」の項目に表示されている値が配列(例:@items('Apply_to_each')?['value']など)かどうか確認します。配列であれば、そのApply to eachは自動生成された可能性があります。
  4. Apply to eachの中で使用している式やアクションの出力を確認します。「動的なコンテンツ」から挿入された項目の横に、配列を示すアイコン(二重線のリスト)が表示されている場合、その値は配列です。
  5. 必要に応じて「式」タブを使用して、データの型を明示的に変換します。例えば、first(body('アクション名'))take(body('アクション名'),1)を使うことで、単一の値を取り出し、不要なApply to eachを抑制できます。

Apply to eachの増殖を防止する設計手法

根本的にApply to eachの自動追加を防ぐには、フロー設計時に以下の点を意識します。

アクションの出力を変数で受け取ってから利用する

配列を直接アクションの入力に使うのではなく、一度「変数の初期化」で配列変数や単一値の変数に格納してから利用します。これにより、Power Automateが自動的にApply to eachを追加するのを防げます。例えば、ファイルリストを取得したら、その出力を「Apply to each」でループする前に、コンポーズアクションで整形するのも有効です。

ループのネストを明示的に制御する

どうしてもループの中でさらにループが必要な場合は、意図的にApply to eachを手動で追加し、内側のループの設定で「同時実行」をオフにするなど、制御を明確にします。自動増殖を避けるには、まずは単一のループで済む設計を検討します。

関数「first」や「item」を適切に使用する

配列の最初の要素だけを取得したい場合や、単一の値を取り出したい場合には、式の中でfirst(outputs('アクション名'))items('Apply_to_each')?['プロパティ名']のように明示的に単一値を指定します。これにより、Power Automateが配列と誤認してApply to eachを自動生成することを防げます。

状況別:Apply to eachの増え方と対策の比較表

以下の表に、よくあるパターンとその対策をまとめました。自社のフローがどのケースに当てはまるか判断する際の参考にしてください。

状況 原因 対策
アクションを追加したら勝手にApply to eachが現れた 追加したアクションの入力が配列を参照している そのアクションの前にコンポーズを挿入し、配列を単一値に変換するか、変数で受ける
Apply to eachの中にさらにApply to eachが自動挿入された 内側のアクションが配列を返している 内側のアクションの出力を変数に格納し、ループの外で一度処理する設計に変更する
フロー保存後にApply to eachが複製された コピー&ペーストやドラッグ&ドロップによる意図しないネスト バージョン履歴から復元し、手動でアクションを正しい位置に配置し直す
他のユーザーが編集したフローでApply to eachが増えた 共同編集時のマージ競合や、自動補完機能の影響 フローのバージョン管理を徹底し、変更差分を確認しながら修正する

よくある失敗パターンとその回避方法

実際の業務で発生しやすい失敗例をいくつか挙げます。これらを事前に把握しておけば、同じミスを繰り返さずに済むでしょう。

配列なのに単一値と思い込んでアクションを配置する

例えば「承認」アクションの出力には複数のプロパティが含まれていますが、それが配列であることを意識せずに次のアクションで直接参照すると、意図しないApply to eachが生成されます。必ず「動的なコンテンツ」で表示される型アイコンを確認しましょう。

ループの中で変数に加算しようとして失敗する

Apply to eachの中で変数の値を更新しようとすると、変数アクションが自動的にループの外に引き出されることがあります。このとき、元のループとは別のApply to eachが新たに生成され、結果的にループが増えるケースがあります。変数の操作はループの外で行うか、並列処理をオフにすることで回避できます。

フローのコピーを作成した際にApply to eachが重複する

既存のフローを「名前を付けて保存」して複製した場合、コピー元のフローでApply to eachが正しく設定されていても、コピー先でアクションの位置がずれて新たなループが発生することがあります。複製後は必ずフローチェッカーで警告がないか確認してください。

管理者に確認すべき設定・制限事項

会社の環境でPower Automateを使用している場合、管理者ポリシーによってフローの動作が制限されている可能性があります。以下の項目について管理者に問い合わせると、Apply to eachの増殖問題の解決に役立つことがあります。

  • Data Loss Prevention(DLP)ポリシー: 特定のコネクタの使用が制限されていると、フローのアクションが自動的に変換され、Apply to eachが増える原因になることがあります。
  • フローの所有者と共有設定: 複数人で編集可能なフローでは、他のユーザーが意図せずApply to eachを追加してしまうリスクがあります。編集権限を制限することで予防できます。
  • Power Automateのライセンス: 一部のプレミアムコネクタやカスタムコネクタでは、自動ループの動作が異なる場合があります。ライセンスに応じた制限事項を確認してください。

よくある質問(FAQ)

勝手に増えたApply to eachを削除しても大丈夫ですか?

削除自体は可能ですが、その Apply to each が参照しているアクションや式が前提となっている場合、削除後にフローがエラーになることがあります。削除する前に、そのループの必要性と、ループ内で使用している値が他の場所で使われていないかを確認してください。安全のため、フローのバージョンを保存してから削除作業を行いましょう。

Apply to eachの中で「同時実行」をオフにすると増殖を防げますか?

「同時実行」の設定は、ループ内のアクションを逐次処理するか並列処理するかを制御するものであり、Apply to each自体の増殖には直接関係しません。ただし、ループのネストが発生した場合に、内側のループで同時実行をオフにしておくと、処理の予測がしやすくなる利点はあります。

自動でApply to eachが追加されないようにする設定はありますか?

残念ながら、ユーザー側でこの自動追加機能を完全にオフにすることはできません。しかし、上記で紹介したように、変数の活用や式での型変換によって、自動追加が発生しないようにフローを設計することは可能です。

まとめ

Power AutomateにおけるApply to eachの自動増殖は、配列データの取り扱いとフロー設計の癖が原因で発生します。現象が起きたら、まずはフローチェッカーと各Apply to eachの入力を確認し、不必要なループを特定してください。根本的な対策としては、配列を直接アクションに渡さず変数で仲介すること、式で単一値を明示すること、そしてループのネストを最小限にする設計を心がけましょう。管理者の設定に影響される場合もあるため、必要に応じて環境全体のポリシーも確認してみてください。適切な対処で、フローのパフォーマンスと保守性を向上させてください。


ADVERTISEMENT

この記事の監修者
✍️

超解決 第一編集部

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

ADVERTISEMENT