初心者向け

n8n IFノードの使い方:条件でワークフローを分岐させる

n8nのIFノードで処理を条件分岐させる方法を、実際に動かしながら解説します。使える演算子、複数条件の組み合わせ、型が合わないときの挙動まで。

動作確認: — n8n 2.36.8 / IF ノード v2.3

取ってきたデータによって処理を変えたいときに使うのが IFノードです。 「エラーだったら通知する」「金額が一定以上なら承認に回す」といった分岐を作れます。

この記事は前半がn8n を触ったことがない人向けで、実際に分岐を1つ作るところまでを通します。 後半は基本操作ができる人向けに、複数条件の組み合わせと、型が合わないときの挙動を扱います。

設定項目は IF ノード v2.3 の定義を直接確認し、動作は n8n 2.36.8 で実際に実行して確かめています。

IFノードは何をするものか

入ってきたデータを、条件に合うものと合わないものに振り分けるノードです。

出力が2つあるのが特徴で、条件に合った項目は true 側へ、合わなかった項目は false 側へ流れます。 それぞれの先に別のノードをつなげば、処理を分けられます。

前のノード3件のデータIF条件で振り分けtruefalse条件に合った 2件この先のノードが実行される合わなかった 1件この先のノードが実行されるどちらかが0件なら、その先のノードはまったく実行されない(0件で動くのではない)
IFノードは出力を2つ持つ。条件に合った項目と合わなかった項目が、別々の経路に流れる。

実際のワークフローではこう見えます。IFノードの右側に true と false の2つの出口があり、 それぞれ別のノードにつながっています。

n8nのキャンバス。Start、Get Tokyo Forecast、Is It Rainy?(IFノード)と並び、IFノードのtrue出力がTake Umbrella、false出力がNo Umbrellaにつながっている
IFノードだけ出口が2つある。true と false のどちらにつないだかで処理が分かれる

振り分けはアイテムごとに行われます。 3件のデータが入ってきたら、1件ずつ条件が評価され、 true側に2件・false側に1件、のように分かれます。

実際に分岐させてみる

前回の記事で作った、気象庁から天気予報を取ってくるワークフローに 分岐を足します。天気に「雨」が含まれていたら傘を持つ、という条件にします。

手順

  1. Get Tokyo Forecast(HTTP Request)の後ろに IF ノードを追加する
  2. Conditions の左辺に、比較したい値を式で指定する
{{ $json.timeSeries[0].areas[0].weathers[0] }}
  1. 真ん中のドロップダウンから contains(含む)を選ぶ
  2. 下の欄に 雨 と入力する
  3. Execute step を押す
IFノードのConditions設定。左辺の欄にfxアイコン付きで式が緑色で入り、右のドロップダウンにT contains、下の欄に雨が入力されている。その下にAdd conditionボタンとConvert types where requiredのトグルがある
左辺の欄・演算子のドロップダウン・右辺の欄が縦に並ぶ。演算子は型ごとにまとまっている

式になっているかどうかは、左辺の欄で見分けられます。 式として扱われていると、 欄の左に fx が表示され、文字が緑色になります。これが無いと {{ ... }} という文字列そのものと比較することになり、条件は必ず false になります。

演算子のドロップダウンに出ている T のようなアイコンは、型を表しています。 型と演算子を別々に選ぶのではなく、1つのドロップダウンの中で型ごとにまとまっているので、 そこから選びます。

結果の見方

実行すると、ノードの出力が true と false の2つのタブに分かれて表示されます。 条件に合った項目が true 側に、合わなかった項目が false 側に入ります。

実際に試したときは、東京の天気が 晴れ 夜 くもり 所により 雨 だったため、 「雨」を含むので true 側に振り分けられました。

出力が true / false のタブに分かれる。どちらに何件入ったかがここで分かる

条件の書き方

条件は4つの要素で構成されます。

要素 内容 例
左辺 比較したい値。式で前のノードのデータを参照する {{ $json.status }}
型 値をどう扱うか String
演算子 どう比較するか is equal to
右辺 比較する相手 error

型を先に決めてから演算子を選びます。 型によって選べる演算子が変わるためです。

使える型と演算子

型は6種類あります。

型 主な演算子
String is equal to / is not equal to / contains / does not contain / starts with / ends with / matches regex / is empty / exists
Number is equal to / is greater than / is less than / is greater than or equal to / is less than or equal to / is empty / exists
Date & Time is equal to / is after / is before / is after or equal to / is before or equal to / is empty / exists
Boolean is true / is false / is equal to / is not equal to / is empty / exists
Array contains / does not contain / length equal to / length greater than / length less than / is empty / exists
Object exists / does not exist / is empty / is not empty

どの型にも exists / does not exist(項目そのものがあるか)と is empty / is not empty(空かどうか)があります。この2つは紛らわしいので注意してください。 項目が無いのと、項目はあるが空なのは別の状態です。

複数の条件を組み合わせる

Add condition で条件を追加できます。追加すると AND / OR を選べるようになります。

  • AND — すべての条件を満たす項目だけが true 側へ
  • OR — どれか1つでも満たせば true 側へ

n8n の条件は combinator という1つの設定で AND か OR かを決めるため、 1つのIFノードの中で AND と OR を混在させることはできません。 「AかつB、またはC」のような条件が必要なときは、IFノードを2段に分けるか、 左辺の式の中でまとめて判定します。

型が合わないときの挙動

ここが実務で一番引っかかる部分です。

APIから返ってくる値は、見た目が数字でも文字列であることがよくあります。 "100" という文字列に対して Number 型で is greater than 50 を評価しようとすると、 型が一致しません。

これを扱うのが、条件の下にある Convert types where required(必要に応じて型を変換する) のトグルです。既定はオフで、型が違えばそのまま扱われます。

オンにすると、"100" を数値の 100 として比較します。Boolean の場合は "false" や 0 が false として扱われます。

どちらが正しいかは場合によります。 変換に頼ると、想定外の値が来たときに 気づかないまま通過してしまいます。逆に厳密にすると、APIの仕様変更で 型が変わったときにエラーで止まります。止まる方が安全なことが多いので、 まずは厳密なまま作り、必要になったときだけ緩めるのを勧めます。

大文字・小文字の扱い

IFノードには Ignore Case(大文字・小文字を無視する)という設定があり、 既定で有効です。

この項目は最初から見えているわけではありません。条件の下にある Options の + Add option から追加すると、はじめて画面に現れます。 見えていない=無効、ではないので注意してください。

つまり、何も設定しなければ Error と error は同じものとして扱われます。

これは多くの場合に便利ですが、大文字・小文字を区別したい場合は明示的にオフにする必要が あります。ステータスコードや識別子の比較で、意図せず一致してしまうことがあります。

条件に合わなかった側はどうなるか

その先のノードは、まったく実行されません。

「0件のデータで実行される」のではありません。実行記録そのものが残りません。

実際に確認したところ、すべての項目が true 側に振り分けられた実行では、 false 側につないだノードには実行記録が1件もありませんでした。

これは重要な性質です。false 側に「該当なしの通知」をつないでも、 該当が無いときは通知されません(該当が無い=false側に項目が流れない、ではなく、 そもそも項目がどちらにも無い場合)。

「0件だったことを検知したい」場合は、IFノードの分岐ではなく、 件数そのものを条件にする別の作りが必要になります。

IF と Switch の使い分け

分岐先が3つ以上になるなら、Switch ノードを使います。

IFノードを何段も重ねると、どの条件でどこへ行くのかが追えなくなります。 分岐が2つなら IF、3つ以上なら Switch、と決めておくと読みやすい構成を保てます。

うまくいかないときの切り分け

  1. 左辺に fx が付いて文字が緑色になっているか — 式になっていないと文字列同士の比較になる
  2. 式の評価結果を見る — 入力欄の下に評価結果が出る。期待した値が出ているか
  3. 型が合っているか — 文字列の "100" を Number で比較していないか。 必要なら Convert types where required をオンにする
  4. 大文字・小文字 — Ignore Case は既定で有効。Options に追加しないと画面に出ない
  5. 出力タブを両方見る — true 側が空でも false 側に入っていることがある

次に読む

次に読む