```mdx
---
title: "反復"
description: "各要素にワークフローを適用して配列を処理する"
icon: "arrows-rotate"
---

反復ノードは、各要素に対して同じワークフローステップを順次または並行して実行することで配列を処理します。単一の操作としては制限に達したり非効率的であるバッチ処理タスクに使用します。

<Frame caption="反復ノードの処理ワークフロー">
  <img src="https://assets-docs.dify.ai/2025/04/5f3f124c16b9e3565853f125f7db0e32.png" alt="反復ノードの概要" />
</Frame>

## 反復の動作

ノードは配列入力を受け取り、各配列要素に対して一度実行されるサブワークフローを作成します。各反復の間、現在の項目とそのインデックスが内部ノードで参照可能な変数として利用できます。

**コアコンポーネント:**
- **入力変数** - 上流ノードからの配列データ
- **内部ワークフロー** - 各要素に対して実行する処理ステップ
- **出力変数** - すべての反復から収集された結果（配列でもあります）

## 設定

### 配列入力

パラメータ抽出、コードノード、知識検索、またはHTTPリクエストの応答などの上流ノードから配列変数を接続します。

### 組み込み変数

各反復は以下にアクセスを提供します:
- `items[object]` - 現在処理中の配列要素
- `index[number]` - 現在の反復インデックス（0から開始）

### 処理モード

<Tabs>
  <Tab title="順次モード">
    **順次処理** - 項目が順番に処理される
    
    **ストリーミングサポート** - Answerノードを使用して結果を段階的に出力可能
    
    **リソース管理** - 低メモリ使用、予測可能な実行順序
    
    **最適用途** - 順序が重要な場合やストリーミング出力を使用する場合
  </Tab>
  
  <Tab title="並行モード">
    **同時処理** - 最大10項目が同時に処理される
    
    **性能向上** - 独立した操作のための高速実行
    
    **バッチ処理** - 大きな配列を効率的に処理
    
    **最適用途** - 順序が重要でない独立した操作
  </Tab>
</Tabs>

<Frame caption="順次処理と並行処理の比較">
  <img src="https://assets-docs.dify.ai/2024/12/2656dec26d6357556a280fcd69ccd9a7.png" alt="処理モードの比較" />
</Frame>

<Frame caption="反復設定で並行モードを有効にする">
  <img src="https://assets-docs.dify.ai/2024/12/516af5e7427fce9a58fa9d9b583230d4.png" alt="並行モードの設定" />
</Frame>

## エラーハンドリング

個々の配列要素の処理失敗をどのように扱うかを設定します:

**停止** - エラーが発生したら処理を停止し、エラーメッセージを返す

**エラー時継続** - 失敗した項目をスキップし、処理を続行し、失敗した要素にはnullを出力

**失敗した結果を削除** - 失敗した項目をスキップし、成功した結果のみを返す

入力出力対応の例:
- 入力: `[1, 2, 3]` 
- エラー時継続の出力: `[result-1, null, result-3]`
- 失敗した結果を削除の出力: `[result-1, result-3]`

## 長文記事生成の例

章のアウトラインを個別に処理して長文コンテンツを生成する:

<Frame caption="長文記事生成ワークフロー">
  <img src="https://assets-docs.dify.ai/dify-enterprise-mintlify/en/guides/workflow/node/3a403551d48b178d0a41ce2a5748dd2d.png" alt="長文ストーリー生成器" />
</Frame>

**ワークフローステップ:**

1. **開始ノード** - ユーザーがストーリーのタイトルとアウトラインを提供
2. **LLMノード** - 詳細な章のブレイクダウンを生成  
3. **パラメータ抽出器** - 章リストを構造化配列に変換
4. **反復ノード** - 各章を内部LLMで処理
5. **Answerノード** - 生成された章コンテンツをストリーミング

<Frame caption="ストーリー入力用開始ノードの設定">
  <img src="https://assets-docs.dify.ai/dify-enterprise-mintlify/en/guides/workflow/node/3af1c2ed0df00f19e584bcf511302f55.png" alt="開始ノードの設定" />
</Frame>

<Frame caption="章構造のパラメータ抽出">
  <img src="https://assets-docs.dify.ai/dify-enterprise-mintlify/en/guides/workflow/node/d3beee536ff3c35f4e1eb1ab610f35d7.png" alt="パラメータ抽出の設定" />
</Frame>

<Frame caption="LLM処理を伴う反復設定">
  <img src="https://assets-docs.dify.ai/dify-enterprise-mintlify/en/guides/workflow/node/ac91582998868004b298afe2f04e5589.png" alt="反復ノードの設定" />
</Frame>

<Info>
  パラメータ抽出の効果はモデルの能力と指示の質に依存します。強力なモデルを使用し、指示に例を提供して結果を改善します。
</Info>

## 出力処理

反復ノードは、最終的な使用のために変換が必要な配列を出力します:

### 配列をテキストに変換

<Tabs>
  <Tab title="コードノードを使用">
    ```python
    def main(articleSections: list):
        return {
            "result": "\n".join(articleSections)
        }
    ```
    
    <Frame caption="コードノードの配列変換">
      <img src="https://assets-docs.dify.ai/dify-enterprise-mintlify/en/guides/workflow/node/8be2372b00a802e981efe6f0ceff815b.png" alt="コードノードの変換" />
    </Frame>
  </Tab>
  
  <Tab title="テンプレートノードを使用">
    ```jinja2
    {{ articleSections | join("\n") }}
    ```
    
    <Frame caption="テンプレートノードの配列変換">
      <img src="https://assets-docs.dify.ai/dify-enterprise-mintlify/en/guides/workflow/node/8c0bcc5de453dea2776d2755449bd971.png" alt="テンプレートノードの変換" />
    </Frame>
  </Tab>
</Tabs>

## 一般的な使用例

**トークン制限管理** - 大きなテキストを翻訳、要約、または分析のために分割し、LLMコンテキストウィンドウを超えたコンテンツを処理します。

**バッチ処理** - 複数の項目に効率的に同じ操作を適用し、複数のドキュメントやAPIコールの処理などを行います。

**品質管理** - 項目を個別に処理して品質を維持し、エラーを優雅に処理し、バッチ全体の失敗を避けます。

**進行中の出力** - すべての処理が完了するのを待つのではなく、完了次第結果をストリームします。

## ベストプラクティス

**適切なモードを選択** - 順序処理やストリーミングには順次、速度を要する独立した操作には並行を使用します。

**エラーを優雅に処理** - 部分的な失敗が処理を停止するべきか、スキップするべきかに基づいてエラーハンドリングを設定します。

**内部ワークフローを最適化** - 反復サブワークフローは複数回実行されるため効率的に保ちます。

**リソース使用を監視** - 大きな配列に複雑な処理を行うと、特に並行モードでは多大なリソースを消費する可能性があります。
```