---
title: 並列
---

import { Callout } from 'fumadocs-ui/components/callout'
import { Tab, Tabs } from 'fumadocs-ui/components/tabs'
import { Image } from '@/components/ui/image'

並列ブロックは、より高速なワークフロー処理のために複数のインスタンスを同時に実行するコンテナです。順次ではなく同時にアイテムを処理します。

<Callout type="info">
  並列ブロックはコンテンツを同時に複数回実行するコンテナノードであり、順次実行するループとは異なります。
</Callout>

## 設定オプション

### 並列タイプ

並列実行の2つのタイプから選択できます：

<Tabs items={['Count-based', 'Collection-based']}>
  <Tab>
    **カウントベースの並列処理** - 固定数の並列インスタンスを実行します：
    
    <div className="flex justify-center">
      <Image
        src="/static/blocks/parallel-1.png"
        alt="カウントベースの並列実行"
        width={500}
        height={400}
        className="my-6"
      />
    </div>
    
    同じ操作を同時に複数回実行する必要がある場合に使用します。
    

    ```
    Example: Run 5 parallel instances
    - Instance 1 ┐
    - Instance 2 ├─ All execute simultaneously
    - Instance 3 │
    - Instance 4 │
    - Instance 5 ┘
    ```

  </Tab>
  <Tab>
    **コレクションベースの並列処理** - コレクションを並列インスタンス間で分散します：
    
    <div className="flex justify-center">
      <Image
        src="/static/blocks/parallel-2.png"
        alt="コレクションベースの並列実行"
        width={500}
        height={400}
        className="my-6"
      />
    </div>
    
    各インスタンスはコレクションから1つのアイテムを同時に処理します。
    

    ```
    Example: Process ["task1", "task2", "task3"] in parallel
    - Instance 1: Process "task1" ┐
    - Instance 2: Process "task2" ├─ All execute simultaneously
    - Instance 3: Process "task3" ┘
    ```

  </Tab>
</Tabs>

## 並列ブロックの使用方法

### 並列ブロックの作成

1. ツールバーから並列ブロックをキャンバスにドラッグします
2. 並列タイプとパラメータを設定します
3. 単一のブロックを並列コンテナ内にドラッグします
4. 必要に応じてブロックを接続します

### 結果へのアクセス

並列ブロックが完了すると、集約された結果にアクセスできます：

- **`<parallel.results>`**: すべての並列インスタンスからの結果の配列

## 使用例

**バッチAPI処理** - 複数のAPIコールを同時に処理する

```
Parallel (Collection) → API (Call Endpoint) → Function (Aggregate)
```

**マルチモデルAI処理** - 複数のAIモデルから同時にレスポンスを取得する

```
Parallel (["gpt-4o", "claude-3.7-sonnet", "gemini-2.5-pro"]) → Agent → Evaluator (Select Best)
```

## 高度な機能

### 結果の集約

すべての並列インスタンスからの結果は自動的に収集されます：

## 並列実行の仕組み

### インスタンス分離

各並列インスタンスは独立して実行されます：
- 個別の変数スコープ
- インスタンス間で状態を共有しない
- 一つのインスタンスの失敗が他に影響しない

### 制限事項

<Callout type="info">
  コンテナブロック（ループと並列）はネストをサポートしています。並列の中に並列を、並列の中にループを、そして任意のコンテナブロックの組み合わせで複雑な多次元ワークフローを構築できます。
</Callout>

<Callout type="info">
  並列実行は高速ですが、以下の点に注意してください：
  - 同時リクエスト時のAPIレート制限
  - 大規模データセット使用時のメモリ使用量
  - リソース枯渇を防ぐための最大20の同時インスタンス
</Callout>

## 並列処理とループ処理の比較

それぞれの使用タイミングを理解する：

| 機能 | 並列処理 | ループ処理 |
|---------|----------|------|
| 実行方法 | 同時実行 | 順次実行 |
| 速度 | 独立した操作では高速 | 遅いが順序を保持 |
| 順序 | 順序保証なし | 順序を維持 |
| ユースケース | 独立した操作 | 依存関係のある操作 |
| リソース使用量 | 高い | 低い |

## 入力と出力

<Tabs items={['設定', '変数', '結果']}>
  <Tab>
    <ul className="list-disc space-y-2 pl-6">
      <li>
        <strong>並列タイプ</strong>：「カウント」または「コレクション」から選択
      </li>
      <li>
        <strong>カウント</strong>：実行するインスタンス数（カウントベース）
      </li>
      <li>
        <strong>コレクション</strong>：分散する配列またはオブジェクト（コレクションベース）
      </li>
    </ul>
  </Tab>
  <Tab>
    <ul className="list-disc space-y-2 pl-6">
      <li>
        <strong>parallel.currentItem</strong>：このインスタンスのアイテム
      </li>
      <li>
        <strong>parallel.index</strong>：インスタンス番号（0から始まる）
      </li>
      <li>
        <strong>parallel.items</strong>：完全なコレクション（コレクションベース）
      </li>
    </ul>
  </Tab>
  <Tab>
    <ul className="list-disc space-y-2 pl-6">
      <li>
        <strong>parallel.results</strong>：すべてのインスタンス結果の配列
      </li>
      <li>
        <strong>アクセス</strong>：並列処理後のブロックで利用可能
      </li>
    </ul>
  </Tab>
</Tabs>

## ベストプラクティス

- **独立した操作のみ**：操作が互いに依存しないようにする
- **レート制限の処理**：API使用が多いワークフローには遅延やスロットリングを追加
- **エラー処理**：各インスタンスは自身のエラーを適切に処理すべき

## 入力と出力

<Tabs items={['設定', '変数', '結果']}>
  <Tab>
    <ul className="list-disc space-y-2 pl-6">
      <li>
        <strong>並列タイプ</strong>: 'count'または'collection'を選択
      </li>
      <li>
        <strong>カウント</strong>: 実行するインスタンスの数(カウントベース)
      </li>
      <li>
        <strong>コレクション</strong>: 分散する配列またはオブジェクト(コレクションベース)
      </li>
    </ul>
  </Tab>
  <Tab>
    並列処理の**内部**でのみ利用可能:
    <ul className="list-disc space-y-2 pl-6">
      <li>
        <strong>{"<parallel.index>"}</strong>: インスタンス番号(0始まり)
      </li>
      <li>
        <strong>{"<parallel.currentItem>"}</strong>: このインスタンスのアイテム(コレクションベースのみ)
      </li>
      <li>
        <strong>{"<parallel.items>"}</strong>: 完全なコレクション(コレクションベースのみ)
      </li>
    </ul>
  </Tab>
  <Tab>
    <ul className="list-disc space-y-2 pl-6">
      <li>
        <strong>{"<blockname.results>"}</strong>: すべてのインスタンス結果の配列(ブロック名経由でアクセス)
      </li>
      <li>
        <strong>アクセス</strong>: 並列処理完了後のブロックで利用可能
      </li>
    </ul>
  </Tab>
</Tabs>

## ベストプラクティス

- **独立した操作のみ**: 操作が相互に依存しないことを確認
- **レート制限への対処**: API負荷の高いワークフローには遅延やスロットリングを追加
- **エラーハンドリング**: 各インスタンスは独自のエラーを適切に処理する必要がある
