はじめに
あらゆる実際のワークフローは、最終的に岐路に直面します。取引額が$10,000を超える場合のみ通知を送信する、注文ステータスに応じて処理を分ける、フィールドが空の場合はステップをスキップする。n8nはこれらすべてを条件分岐によって処理します。ワークフローを流れる実際のデータに基づいて、実行経路をルーティングするのです。
n8nにはこのための2つのノードがあります。二択のYES/NOの判断にはIF、3つ以上の結果が必要な場合はSwitchです。どちらを選ぶべきか、そして条件を正確に設定する方法を知っているかどうかが、もろいワークフローと本番環境で安定するワークフローを分けます。
IFノード: 二分岐
IFノードは、入力データに対して1つ以上の条件を評価し、各アイテムをTRUE出力またはFALSE出力のいずれかにルーティングします。両方に流れることはありません — 各アイテムは正確にどちらか一方のパスを選びます。
設定するには、入力データから値(通常は式シンタックスのようなフィールド参照)を 선택し、演算子を選び、比較値を設定します。n8nはデータ型ごとにさまざまな演算子をサポートしています。
文字列の場合: 等しい、等しくない、含む、先頭が一致する、末尾が一致する、正規表現一致。数値の場合: 等しい、等しくない、より大きい、より小さい、以上、以下。真偽値の場合: 真、偽。配列とオブジェクトの場合: 空である、空でない。
簡単な例をご紹介します。Webhookが注文データを受信し、高額な注文を特別なSlackチャンネルにルーティングしたいとします。
IFノードでは以下のように設定します: 値1 — 注文金額フィールドを参照する式 演算 — Greater Than 値2 — 10000
金額が10,000を超えるアイテムはTRUE出力から退出します。それ以外はすべてFALSEから退出します。その後、各出力をそれぞれの下流ノードに接続します。
1つのIFノード内にAND(すべてが一致する必要あり)またはOR(いずれかが一致すれば十分)を使って複数の条件を積み重ねることができます。ANDチェーンは3つ以上の条件を超えると読みにくくなることに注意してください — その場合、複数のIFノードに分割するか、Switchに切り替えるほうが通常はクリーンです。
Switchノード: 複数の結果
2つ以上のルートがある場合、IFノードを積み重ねるとすぐに煩雑になります。Switchでは複数のルールを定義でき、それぞれが独自の出力を持ち、上から順に評価されます。最初に一致したルールが勝ち、アイテムはその出力から退出します。
Switchにはフォールバック出力もあります — どのルールにも一致しなかったアイテムはここに到達します。たとえNo Operationノードだけであっても、必ずフォールバックに何かを接続してください。これにより、一致しなかったアイテムに何が起きたかを確認できます。
実際の例として、サポートチケットを受信し、優先度ごとにルーティングしたい場合を考えてみます。
n8nでは、IF条件を設定するのと同じ方法で各ルールを設定します — フィールドを選び、演算子を選び、比較値を設定します。違いは、各ルールがノード上に独自の番号付き出力コネクタを持つことです。
知っておくべき1つの注意点: デフォルトでは、Switchは各アイテムを最初に一致したルールにのみルーティングします。「Send data to all matching outputs(すべての一致する出力にデータを送信)」トグルを有効にすると、アイテムは複数の出力から同時に退出できます。これは便利ですが、予期しない場合に下流で重複したアクションが発生する可能性があります — ファンアウト動作を明示的に必要としない限り、オフのままにしておいてください。
よくある間違い
型の不一致は、他の何よりもサイレント失敗を引き起こします。受信フィールドに文字列「1500」が含まれていて、Number演算子を使ってGreater Than 1000と比較した場合、データの出所によってはn8nが自動的に文字列を数値に変換しないことがあります。分岐する前に、SetノードやparseInt()のような式を使って型を正規化してください。
もう1つのよくある間違いは、IFノードのFALSE出力やSwitchノードのフォールバック出力を未接続のままにすることです。n8nはエラーをスローしません — これらのアイテムは実行から消えるだけです。顧客レコードを処理するワークフローでは、このようなサイレントなドロップは後でデバッグが困難になる可能性があります。最小限のロギングステップであっても、すべての出力を何かに接続してください。
空のフィールドやnullフィールドにも注意してください。null値を「ある文字列と等しい」と比較するとfalseと評価されますが、これは通常望ましい結果です — ただし、「is empty」と「is not empty」は「equals empty string」とは動作が異なります。空文字列だけでなく、実際のnullペイロードでテストしてください。
まとめ
判断が二択の場合はIFノードを使用してください — TRUEかFALSE、YESかNO、一致するかしないか。3つ以上の異なる結果があり、複数のIFノードを連鎖させずにクリーンで独立した出力パスを望む場合はSwitchを使用します。どちらの場合も、一致しないパスを明示的に処理し、比較前にデータ型を正規化し、本番環境にデプロイする前にエッジケースの入力(null、空文字列、予期しない型)でテストしてください。これらの2つのノードは、実際の条件ロジックを実行するあらゆるワークフローの基礎です。
レッスンのチェックポイント