はじめに
実際のn8nワークフローでは、単一の直線的な実行になることはほとんどありません。多くの場合、フローを分岐させます。一方のブランチがCRMに問い合わせし、もう一方がアナリティクスを取得し、3番目は顧客からのWebhookを待ちます。ある時点でこれらの並列ブランチを再び合流させる必要があります。それがまさにMergeノードの目的です。ブランチを正しく結合する方法を理解することで、データの損失、重複処理、本番環境でのみ顕在化する静かなバグを防ぐことができます。
このレッスンでは、n8nの3つの主要なマージ戦略を扱います:すべての入力を待機する、共通のキーでマージする(SQLスタイルの結合)、すべてを受信したアイテムを連結する。各戦略は異なる目的を持ち、間違った選択は複雑な自動化を構築する際のもっとも一般的な間違いの一つです。
Mergeノードの仕組み
Mergeノードは複数の入力ストリーム(Input 1、Input 2、オプションでそれ以上)を受け取り、単一の出力ストリームを生成します。接続されたすべての入力が少なくとも1つのアイテムを提供するまでのみ実行されるため、暗黙的にブランチを同期します。これが「待機」動作です。あるブランチがどれだけ早く完了しても、Mergeノードは最も遅いブランチが到着するまで一時停止します。
ノード設定でタイムアウトを追加することもできます。あるブランチが完了しない場合、マージは最終的に待機を停止し、データを破棄するか、到着した分だけで処理を続行します。これは、ある外部APIがハングする可能性がある長時間実行ワークフローでは重要です。
キーによるマージ(結合動作)
これはSQL JOINに最も近いものです。両方の入力ストリームに存在するフィールド(例:`email`や`orderId`)を選択し、同じ値を持つアイテムをペアリングします。デフォルトでは一致しないアイテムは破棄されますが、モードを設定してLEFT JOIN(Input 1の一致しないアイテムを保持)や外部結合のように動作させることもできます。
結果は一致ごとに1つのアイテムとなり、両方の入力のフィールドが組み合わされます。ドロップダウンオプションは以下の通りです:
Append:両方の入力からのすべてのアイテムを、ペアリングせずに順番に連結してフラットなリストにします。ブランチが独立したレコードを生成し、後でまとめて処理する必要がある場合(例えば、Mailchimpからの全連絡先とHubSpotからの全連絡先を単一の重複排除ステップにキューする場合)に使用します。
Merge By Key:データベースの結合のように、共有フィールドでアイテムをペアリングします。片側の各アイテムがもう片側の1つのアイテムと論理的に関連する場合に使用します。例えば、注文レコードと対応する支払いレコードをマッチングする場合です。
Wait:もっともシンプルなモードで、変換を行わず単にタイミングを同期するだけです。出力アイテムはInput 1の順序に従い、Input 2のアイテムは単に位置によって1対1で対応付けられます。両方のブランチを制御しており、順序が一致することが分かっている場合にのみ使用してください。
Modeドロップダウンには4つのオプションがあります:Append、Merge By Key、Merge By Position、Wait。「Merge By Position」は単純な待機とペアリング動作の技術的名称であり、入力配列のインデックスによってアイテムをペアリングするため、両方のブランチが同じ順序で同じ数のアイテムを持つ場合にのみ正しく動作することに注意してください。
実践例:注文データと支払いデータの結合
Branch 1がデータベースから注文を取得し、Branch 2がStripeから支払いステータスを取得するとします。各ブランチは`orderId`フィールドを持つアイテムを生成します。注文ごとに1つの統合されたレコードが必要です。
`joinMode`を`inner`に設定すると、両方のブランチに存在する注文のみが出力されます。`left`に切り替えると、付款記録がまだない注文でも下流に流れ、一致しないものとしてマークされます。これは支払い漏れを発見するのに役立ちます。
よくある間違いと注意点
もっとも頻繁なエラーは、2つのブランチが異なる数のアイテムを生成するときに「Merge By Position」を使用することです。Branch 1が10件の注文を返し、Branch 2が7件の支払いレコードのみを返した場合、設定に応じて注文アイテムの3件が`null`の支払いデータとペアリングされるか、黙って破棄されます。数が異なる可能性がある場合は常に「Merge By Key」を使用してください。
もう一つの注意点:Mergeノードは重複排除を行いません。Branch 1に同じメールアドレスが2回あり、Branch 2に1回だけある場合、重複した結合行が生成される可能性があります。重複排除はマージの前に行うか、後に別のノードで行う必要があります。
最後に、Mergeは接続されたすべての入力を待機することを忘れないでください。1つの入力を接続するのを忘れた場合、ノードは無期限に(またはタイムアウトまで)待機します。未接続の入力は、本番環境でワークフローがハングする一般的な原因です。
まとめ
Mergeノードはマルチブランチワークフローの同期ポイントです。独立したリストを単純に積み上げたい場合はAppendを使用し、各側のアイテムが共有識別子で関連する場合はMerge By Keyを使用し、両方のブランチが同じ長さの一致する配列を生成する場合にのみWait/Merge By Positionを使用してください。すべての入力が接続されていることを常に確認し、データの整合性ニーズに合った結合モードを選択し、予期しない事態を避けるために重複排除をマージの外に配置してください。
レッスンのチェックポイント
学んだ内容を復習し、回答へのフィードバックを受けましょう。