このレッスンのロックを解除するには、まず「レッスン2:式とデータ変換の取り扱い」を完了してください。前のレッスンに戻る

はじめに

n8nワークフローがアイテムのリストを受け取ったとき — 例えばスプレッドシートから500行、APIから1,000件の連絡先など — すべてのアイテムを次のノードにそのまま送ると、レートリミット、タイムアウト、メモリスパイク、データベーステーブルのロックといった問題が発生する可能性があります。SplitInBatchesノードは、リストを小さなグループに分割し、一度に1バッチずつ解放することでこの問題を解決します。これにより下流のノードがグループ間で休憩できます。

これは制御されたコンベアベルトのようなものと考えてください:一度に1,000個の箱を作業者に投げる代わりに、50個ずつ供給するのです。

1つの入力配列が3つの連続バッチに分割され、単一の下流ノードに送られることを示すフローチャート

SplitInBatchesの仕組み

SplitInBatchesはデータソースと各アイテムを処理するノードの間に配置されます。最初の実行では最初のチャンク(設定可能なサイズ、デフォルトは1アイテム)を出力し、一時停止し、その後の実行で次のチャンクをリストが尽きるまで出力します。各バッチは同じ下流ブランチを通るため、通常はSet、HTTP Request、データベースノードと組み合わせます。

ノードには2つの重要な出力が存在します:「Done」は最後のバッチが解放された後に一度だけ発火します — 最終サマリーやクリーンアップステップに便利です — そして「Loop」は次のバッチを処理ブランチにフィードバックします。

基本設定

ノードを開き、Batch Sizeを下流サービスが処理できる数に設定します。1分あたり100リクエストに制限しているほとんどのHTTP APIでは、Batch Sizeを10、間に6秒のWaitノードを置く構成が効果的です。

json
{
"node": "SplitInBatches",
"parameters": {
"batchSize": 10,
"options": {}
},
"type": "n8n-nodes-base.splitInBatches"
}

「Loop」出力を作業用ノードに接続し、そのノードからSplitInBatchesへ戻りの配線をすることで次のバッチが解放されるようにします。「Done」出力は必要なサマリーステップに接続します。

実践例:連絡先を外部APIに送信する

CRMから200件の連絡先を取得し、それぞれをWebhookにPOSTする必要があるとします。バッチ処理を行わなければ、200リクエストを即座に発射し、おそらく429 Too Many Requestsエラーが発生するでしょう。

ワークフローは次のようになります:Cronトリガーが毎日起動し、HTTP Requestノードが連絡先を取得し、SplitInBatchesが10件ずつグループ化し、各バッチがループに入りWebhookをアイテムごとに呼び出し、Waitノードが6秒間一時停止し、制御がSplitInBatchesに戻って次のバッチを処理します。すべてのバッチが処理されると、「Done」ブランチが「Synced 200 contacts」をSlackにログとして記録します。

1回の完全なループ反復を示すライフサイクル図 — SplitInBatchesがバッチを解放 → 処理ノードがアイテムを処理 → Waitが一時停止 → SplitInBatchesに戻る → Doneブランチが発火するまで繰り返し

よくある間違い

ループ配線を戻し忘れることが最も多いエラーです — この接続がないと、ワークフローは最初のバッチの後に停止します。もう一つのよくあるミスとして、Waitノードをループブランチ内ではなくSplitInBatchesの後に配置してしまうことがあります。これではバッチ間でスロットリングが行われず、意味がありません。最後に、SplitInBatchesは実行ごとに状態を保持するため、新しいトリガー実行は毎回バッチ1から開始されます — 別々の実行にまたがって半分完了したバッチループを再開することはできません。

まとめ

SplitInBatchesは、下流サービスがリスト全体を一度に処理できない場合に使用する定番ノードです。対象APIのレートリミットに基づいて適切なBatch Sizeを設定し、必ずループ出力を戻りの配線し、ループ内のWaitノードと組み合わせてスロットリングに優しいペーシングを行い、「Done」ブランチを実行終了時の後処理に活用しましょう。

数百件を超えるリストや並列処理については、LoopノードやExecute Workflowトリガーを使ったサブワークフローを検討してください — これらはいずれも後ほどのレッスンで扱います。

レッスンの練習

レッスンのチェックポイント

学んだ内容を復習し、回答へのフィードバックを受けましょう。

0/1
回答済み · 0/1