すべてのプロダクト
Search
ドキュメントセンター

CloudFlow:foreach ステップ

最終更新日:Aug 25, 2026

foreach ステップは、入力内の配列をイテレーションし、配列内の各要素に対して同一のステップシーケンスを並列実行します。各イテレーションは独自のローカル変数を保持し、出力マッピングがすべてのイテレーションの結果を foreach ステップの出力に結合します。

foreach ステップの仕組み

foreach ステップは、入力配列パラメーターをイテレーションし、配列内の各要素に対して steps フィールドで定義されたステップを実行します。foreach ステップはプログラミング言語の foreach と同様に動作しますが、イテレーションが順番に実行されるのではなく、並列で実行される点が異なります。

foreach ステップが実行されると、次のシーケンスで実行されます:

  1. foreach ステップは配列内の各要素に対して 1 つのイテレーションを開始し、イテレーションを並行して実行します。

  2. 各イテレーションは独自のローカル変数を持ちます。イテレーション内のステップは、そのイテレーションのローカル変数のみを変更します。

  3. すべてのブランチが完了すると、すべてのイテレーションのローカル変数が foreach ステップの $local 変数となります。この変数は配列であり、各要素は 1 回のイテレーションの結果を記録する JSON オブジェクトです。

  4. foreach ステップの出力マッピングが、イテレーションのローカル変数の配列を foreach ステップの出力に変換します。

制限

foreach ステップは、最大 100 個のイテレーションを並行して実行します。

プロパティ

foreach ステップは、次のプロパティをサポートします。

プロパティ必須説明
typeはいステップのタイプです。値を foreach に設定します。
nameはいステップの名前です。
iterationMappingはいforeach ステップのイテレーションマッピングです。 iterationMapping のフィールドについては、次の表で説明します。
stepsはい各イテレーションで実行されるステップです。
endいいえforeach ステップの終了時に、foreach ステップの後に定義されたステップの実行を継続するかどうかを指定します。
inputMappingsいいえforeach ステップの入力マッピングです。ステップで入力マッピングを定義しない場合、ステップは親ステップまたはフローの入力を継承します。
outputMappingsいいえforeach ステップの出力マッピングです。出力マッピングを指定しない場合、foreach ステップの出力はデフォルトで空になります。

foreach ステップの iterationMapping プロパティには、次のフィールドが含まれます。

フィールド必須説明
collectionはいループのコレクションとして使用する入力パラメーターを指定します。
itemはい現在の要素をイテレーション入力にマージする際のキー名を指定します。
indexいいえ現在のインデックスをイテレーション入力にマージする際のキー名を指定します。

次のフロー定義には、myforeach という名前の foreach ステップが含まれています。 names 配列内の各要素に対して、foreach ステップは toUpperCase という名前のタスクステップを 1 つ実行します。

version: v1
type: flow
steps:
  - type: foreach
    name: myforeach
    iterationMapping:
      collection: $.names
      item: name
    steps:
      - type: task
        name: toUpperCase
        resourceArn: acs:fc:{region}:{account}:services/fnf_test/functions/toUpperCase
    outputMappings:
      - target: names
        source: $local[*].name

resourceArn 内の {region}{account} を、ご自身の値に置き換えてください。

例におけるデータフロー

以下の各段階では、データが myforeach ステップ内でどのように渡され、どのフィールドによって各変換が実行されるかを示します。

1. フローの入力。 myforeach ステップでは入力マッピングを定義していないため、 myforeach の入力はフローの入力と同じです:

{
  "names": ["a", "b", "c"]
}

2. イテレーションの入力。 toUpperCase ステップでも入力マッピングを定義していないため、親ステップの入力を継承します。イテレーションが実行されるたびに、 iterationMappingname をキーとして現在の要素を入力にマージします。そのため、3 つのイテレーションは次の入力を受け取ります。

a のイテレーションの入力:

{
  "name": "a",
  "names":["a","b","c"]
}

b のイテレーションの入力:

{
  "name": "b",
  "names":["a","b","c"]
}

c のイテレーションの入力:

{
  "name": "c",
  "names":["a","b","c"]
}

3. イテレーションの出力。 toUpperCase は要素ごとに 1 回、合計 3 回実行され、次の出力を返します。

a のイテレーションの出力:

{
  "name": "A"
}

b のイテレーションの出力:

{
  "name": "B"
}

c のイテレーションの出力:

{
  "name": "C"
}

4. foreach ステップのローカル変数。 myforeach のローカル変数は、各イテレーションの結果を保持する配列です:

[
  {
    "name": "A"
  },
  {
    "name": "B"
  },
  {
    "name": "C"
  }
]

5. ステップの出力とフローの出力。 myforeachoutputMappings プロパティは、 $local[*].namenames にマッピングします。これにより、ステップの出力は次のようになります。フローでは出力マッピングまたは結果マッピングを定義していないため、この出力が最終的なフロー実行の出力にもなります。

{
  "names": ["A", "B", "C"]
}