---
schema_version: "1"
id: 757c27d2b028dea48c9c002cb53ef824bb0388600ed82508e999dcf21b14939d
title: Parallel For Each (<parallel-foreach/>)
collection: mulesoft
version: current
locale: ja-jp
portal_url: https://docs.salesforce.com/mulesoft/current/ja-jp/anypoint-code-builder/acb-component-parallel-for-each.md
canonical_url: https://docs.mulesoft.com/jp/anypoint-code-builder/acb-component-parallel-for-each
source_site: docs.mulesoft.com
content_type: documentation
content_hash: 125ebd5e9609a5fe4de2e376f2c598382de3f9b18fb34709e67e411f15c9dc3c
description: MuleSoft Documentation Site
latest: true
---
# Parallel For Each (<parallel-foreach/>)

![logo cloud IDE](/mulesoft/current/ja-jp/_/img/logos/deployment-cloud-ide.png "Cloud IDE") Cloud IDE

![logo desktop IDE](/mulesoft/current/ja-jp/_/img/logos/deployment-desktop-ide.png "Desktop IDE") Desktop IDE

コレクションを同時に処理される部分に分割して、メッセージのコレクションを処理します。

すべてのメッセージを処理した後で、このコンポーネントは分割前と同じ順序で結果を集約し、フローを続行します。

Parallel For Each では、すべての処理ルートの結果がリストにバッファされ、スコープの処理が終了した後にそのリストが返されます。これにより、大量のエントリを処理するときにメモリ不足エラーが発生する可能性があります。大きなペイロードを処理するには、代わりにバッチ処理を使用します。

## [](#component-xml)コンポーネント XML

このコンポーネントは、次の XML 構造をサポートします。

```xml
<parallel-foreach
  doc:name="Parallel foreach"
  doc:id="tbfiiz"
  collection="#[payload]"
  timeout=30000
  maxConcurrency=15 />
```

Parallel For Each (​`<parallel-foreach/>`​) 属性は UI および XML で設定できます。

<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 20%;">
<col style="width: 20%;">
<col style="width: 60%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">属性名</th>
<th class="tableblock halign-left valign-top">属性 XML</th>
<th class="tableblock halign-left valign-top">説明</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>Parallel foreach (並列 foreach )</strong>​ (デフォルト)</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>doc:name</code></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>キャンバスに表示されるコンポーネントの編集可能な名前。</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">なし</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>doc:id</code></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>コンポーネントの自動生成された識別子。</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>Collection (コレクション)</strong></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>collection</code></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>コレクションを返す式。デフォルトは ​<code>#[payload]</code>​ です。</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>Timeout (タイムアウト)</strong></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>timeout</code></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>各並列ルートのタイムアウトをミリ秒単位で指定します。</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>Max concurrency (最大同時実行)</strong></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>maxConcurrency</code></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>ルーターが使用する並列性の最大レベルを指定します。</p>
</div>
<div class="paragraph">
<p>+
デフォルトでは、すべてのルートが並列実行されます。</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>Target Variable (対象変数)</strong></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>target</code></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>メッセージデータを格納する変数の名前。数字、文字、アンダースコアのみを使用できます。たとえば、名前にハイフンは使用できません。
Mule ドキュメントの <a href="https://docs.mulesoft.com/mule-runtime/latest/target-variables" class="xref page">Enrich Data with Target Variables</a>を参照してください。</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>Target Value (対象値)</strong></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>targetValue</code></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>対象変数に格納するデータの値。このデフォルト値はメッセージペイロード (payload) です。この項目は、変数が受け入れるすべての値を受け入れます。サポートされているデータ型、DataWeave の式、​<code>payload</code>​、​<code>attributes</code>​、​<code>message</code>​ キーワードが該当しますが、​<code>vars</code>​ キーワードは対象外です。
Mule ドキュメントの <a href="https://docs.mulesoft.com/mule-runtime/latest/target-variables" class="xref page">Enrich Data with Target Variables</a>を参照してください。</p>
</div></div></td>
</tr>
</tbody>
</table>

## [](#例)例

### [](#example1)例: 値の追加

次の例では、コレクション内のすべての要素に文字列​`「-result」`​を追加します。

```xml
<flow name="myFlow">

  <parallel-foreach collection="#[['apple', 'banana', 'orange']]">
      <set-payload value="#[payload ++ '-result']"/>
  </parallel-foreach>

</flow>
```

### [](#example2)例: 変数の変更

次の例は、Parallel For Each スコープ内の既存の変数への変更は一時的なものであり、実行終了後には保持されないことを示しています。

```xml
<flow name="myFlow">

  <set-variable variableName="var1" value="var1"/>
  <set-variable variableName="var2" value="var2"/>
  <parallel-foreach collection="#[['apple', 'banana', 'orange']]">
      <choice>
          <when expression="#[payload == 'apple']">
              <set-variable variableName="var2" value="newValue"/>
              <set-variable variableName="var3" value="appleVal"/>
          </when>
          <when expression="#[payload == 'banana']">
              <set-variable variableName="var3" value="bananaVal"/>
          </when>
          <otherwise>
              <set-variable variableName="var3" value="otherVal"/>
              <set-variable variableName="var4" value="val4"/>
          </otherwise>
      </choice>
  </parallel-foreach>

</flow>
```

この例の出力は次のようになります。

```json
{
      var1: "var1",
      var2: "var2"
}
```

Parallel For Each スコープのすべての実行は、ブロックの実行前と同じ変数および値で開始されます。

1 つの要素の処理中に新しい変数を追加したり既存の変数を修正したりしても、別の要素の処理中は表示されません。これらのすべての変数の変更は、Parallel For Each スコープの外部では使用できません。Parallel For Each スコープの実行後、一連の変数 (およびその値) は実行前と同じままになります。

## [](#error-handling)エラー処理

このスコープはすべてのルートを並列処理するため、1 つのルートでエラーが発生した場合、すべての処理が完了するまで、他のすべてのルートでは処理が続行されます。その後、次の例に示すように、Parallel For Each はすべての結果 (およびエラー) を集約し、エラーハンドラーによって処理します。

```xml
<flow name="myFlow">

  <parallel-foreach collection="#[['banana', 'apple']]">
      <choice>
          <when expression="#[payload == 'banana']">
              <!-- Processor that throws error -->
          </when>
          <otherwise>
              <set-payload value="#[payload ++ '-result']"/>
          </otherwise>
      </choice>
  </parallel-foreach>
  <error-handler>
      <on-error-continue type="COMPOSITE_ROUTING">
          <!-- This will have the error thrown by the previous processor -->
          <logger message="#[error.errorMessage.payload.failures['0']]"/>
          <!-- This will be a null value -->
          <logger message="#[error.errorMessage.payload.failures['1']]"/>
          <!-- This will be a null value -->
          <logger message="#[error.errorMessage.payload.results['0']]"/>
          <!-- This will have the result of this (correctly executed) route -->
          <logger message="#[error.errorMessage.payload.results['1']]"/>
      </on-error-continue>
  </error-handler>

</flow>
```

### [](#スロー)スロー

- `MULE:COMPOSITE_ROUTING`

## [](#for-each-スコープと-parallel-for-each-スコープの違い)For Each スコープと Parallel For Each スコープの違い

For Each と Parallel For Each のどちらも定義済みコレクションを分割し、スコープ内のコンポーネントがコレクションの各要素を処理します。どちらの場合も、同じ初期コンテキストで各ルートが実行されます。これらの 2 つのスコープの違いは、次のとおりです。

- For Each は順次処理で、Parallel For Each は並列処理です。 この違いは​_エラー処理_​に影響します。
    
    処理の違いのため、For Each の実行はエラーの発生時に中断されてエラーハンドラーが呼び出されますが、Parallel For Each は ​`MULE:COMPOSITE_ROUTE`​ エラー種別でエラーハンドラーを呼び出す前にすべてのルートを処理します。
- For Each はペイロードを変更しませんが、Parallel For Each は各反復の出力メッセージのコレクションを出力します。

## [](#see-also)関連情報

- [For Each スコープ](https://docs.mulesoft.com/jp/anypoint-code-builder/acb-component-for-each)​。
- [トランザクションによるスコープとルーターへの影響](https://docs.mulesoft.com/mule-runtime/latest/transaction-management#tx_scopes_routers)