Power Platformメモ
Power AutomateでApply to eachが自動で追加される理由
Power Automateで配列データを扱うとき、意図しないのにApply to eachが自動で追加される理由と対処の考え方を整理したメモです。
Power AutomateでApply to eachが自動で追加される理由
この記事の位置づけ
この記事は、Power Automateの初学者向け技術メモです。フローの動作は環境・コネクタ・バージョンによって変わることがあります。
実際のフローで動作を確認してください。
ざっくり言うと
Power Automateでアクションを追加すると、意図していないのに「Apply to each(それぞれに適用する)」の中に入ってしまうことがあります。
これは操作ミスではなく、自動で追加される仕様です。
前のアクションが「配列(複数件のデータ)」を返す可能性があると判断されたとき、Power Automateが自動でApply to eachを追加します。
なぜ自動で追加されるのか
Power Automateは、前のステップの出力データの型を見て、次のアクションに渡す形を自動で決めます。
たとえば「SharePointのアイテムを取得する」アクションの出力は「value」という配列形式になっています。この「value」を次のアクションで参照しようとすると、Power Automateが「複数件ある可能性があるから、1件ずつ処理するループが必要だ」と判断して、Apply to eachを自動挿入します。
Apply to eachが入ると困るケース
- 最初の1件だけを使いたいのに、全件ループが走ってしまう
- フローが複雑に見えて、意図が分かりにくくなる
- 処理が遅くなる(件数が多い場合)
対処の考え方
1件だけを取得・使いたい場合
SharePoint「アイテムの取得(Get item)」を使う
「アイテムの一覧表示(Get items)」は複数件取得するアクションのため、出力が配列形式です。
1件だけ取得することが確定している場合は、「アイテムの取得(Get item)」アクションを使い、IDを指定すると配列ではなくなります。
first() 関数で最初の1件だけ取り出す
配列から最初の1件を取り出したい場合は、式で first() を使う方法があります。
first(outputs('アイテムの一覧表示')?['body/value'])
これにより、配列の最初の要素だけを取り出せるため、Apply to eachなしで次のアクションに渡せる場合があります。
Apply to eachが必要な場合
複数件のデータを1件ずつ処理したい場合は、Apply to eachをそのまま使うのが自然です。
ただし、Apply to eachの中にApply to eachが入れ子になると複雑になるため、できるだけフィルタリングや事前の件数絞り込みをしておくと整理しやすくなります。
注意点
first() などの式で配列を処理する場合、データが0件だった場合のエラーハンドリングも考慮が必要です。「条件」アクションで件数を確認してから処理する方法が安全なケースもあります。