Power Automateでそれぞれに適用(Apply to each)が突然出てくる理由

それぞれに適用(Apply to each)が突然出てくる理由は配列にある

Power Automateを使っていると何もしていないのにそれぞれに適用(Apply to each)が自動で追加されたという経験をした人は多いはずです。これはバグではなく、データが配列(Array)形式だったことへの自動対応です。この仕組みを理解しておくと、余計なループが出てきても慌てずに対処できます。

オブジェクトと配列の違い

Power Automateが扱うデータには主に2種類の形式があります。

種類形式
Object(オブジェクト)キーと値のペア(1件のデータ){ "名前": "山田", "部署": "営業" }
Array(配列)オブジェクトが複数並んだリスト[ {"名前": "山田"}, {"名前": "田中"} ]

SharePointの「複数のアイテムの取得」アクションの結果は配列です。配列形式のデータから特定の値を取り出そうとすると、Power Automateは「これは複数件ある、1件ずつ処理が必要だ」と判断してそれぞれに適用(Apply to each)を自動挿入します。

オブジェクトのプロパティを参照するとき

1件だけのオブジェクトなら、それぞれに適用(Apply to each)なしでプロパティを直接参照できます。例えばSharePointの「アイテムの取得」(単数形)アクションの結果はオブジェクトなので、そのまま body/Title のように参照できます。

配列からそれぞれに適用(Apply to each)が生まれる理由

配列のデータに対してプロパティを参照しようとすると、Power Automateは「どの要素のプロパティを見ればいいかわからない」ので、1件ずつ処理するためにそれぞれに適用(Apply to each)を挿入します。これが「Apply to eachが突然出てくる」現象の正体です。

それぞれに適用(Apply to each)を避けたいとき

ループを使わずに配列から値を取り出したいケースもあります。配列の先頭1件だけが欲しいときなどがその例です。

first()で先頭の1件だけ取る

first()関数を使うと、配列の先頭要素だけをオブジェクトとして取り出せます。それぞれに適用(Apply to each)が不要になります。

first(outputs('アイテムの取得_複数')?['body/value'])

アレイのフィルター処理(Filter array)で先に絞り込む

配列から条件に合う1件だけを取り出したい場合は、アレイのフィルター処理(Filter array)アクションで絞り込んでからfirst()を使う方法が定番です。

  1. アレイのフィルター処理(Filter array)で条件に合うアイテムだけに絞り込む
  2. first()で先頭1件をオブジェクトとして取り出す
  3. 以降はオブジェクトのプロパティを直接参照できる

アレイのフィルター処理(Filter array)の使い方は別記事で詳しく説明しています。

Power Automateのアレイのフィルター処理(Filter array)——配列を条件で絞り込む方法と式の書き方

JSON の解析(Parse JSON)で配列の構造を明示する

HTTPアクションや外部APIの戻り値がJSONのとき、Power Automateはそれが配列なのかオブジェクトなのかわかりません。このままプロパティを参照しようとするとそれぞれに適用(Apply to each)が挿入されることがあります。

JSON の解析(Parse JSON)アクションを使ってスキーマを定義しておくと、Power Automateがデータの型を理解でき、不要なそれぞれに適用(Apply to each)の挿入を防げます。また、スキーマ定義後はプロパティが動的コンテンツとして補完されるようになり、式を手書きする必要がなくなります。

スキーマの自動生成

JSON の解析(Parse JSON)のスキーマは「サンプルのペイロードを使用してスキーマを生成する」ボタンを使うと自動生成できます。実際のAPIレスポンスや、フロー実行履歴からコピーしたJSONを貼り付けるだけでスキーマが作れます。手書きする必要はありません。

まとめ:Apply to eachが出たら「配列かどうか」を確認する

それぞれに適用(Apply to each)が自動挿入されたときのチェックポイントはシンプルです。

  • そのデータは配列か?(複数件の可能性があるか)
  • 1件だけ欲しいならfirst()で取り出せないか
  • 先に条件で絞り込めないか(Filter array)
  • JSONの型が不明ならJSON の解析(Parse JSON)でスキーマを定義する

このチェックリストを頭に入れておくだけで、それぞれに適用(Apply to each)に振り回されることが減ります。Power Automateのフローが複雑に見えてくるのは型の扱いが原因であることが多いので、オブジェクトと配列の違いを理解しておくことが全体の理解につながります。

Power AutomateのComposeアクション——デバッグと式の整理に使う実践ガイド

Xでフォローしよう