はじめに
n8nで複数のサービスを接続する際、あるAPIからの生データが次のAPIが期待する形式と一致することはほとんどありません。フィールドを再構築し、無関係なレコードを除外し、条件に基づいてデータを異なるブランチにルーティングする必要があります。n8nはこれのために3つのコアノードを提供しています:Set(単純なフィールドマッピング用)、Function(カスタムJavaScriptロジック用)、IF(条件付きルーティング用)。これらをマスターすることで、線形ワークフローをスマートなマルチパス自動化へと変貌させます。
Setノードによるデータ再構築
Setノードを使用すると、コードを書かずに新しいフィールドを作成したり、既存のフィールドの名前を変更したりできます。これは、ネストされたプロパティの抽出、フィールドの結合、静的値の追加などの単純な変換のための定番のツールです。
Webhookが以下のペイロードを配信するとします:
これを`full_name`と`amount`を期待するCRMに送信したいとします。Webhookの後にSetノードを追加し、2つのフィールドを設定します:式`{{json.user.firstName}} {{json.user.lastName}}`を持つ`full_name`と、`{{$json.orderTotal}}`を持つ`amount`。出力は次のようになります:
Setノードは二重波括弧を使用した式をサポートしています。現在のアイテムを参照するには`node['NodeName'].json`、組み込み関数(`today`など)を使用できます。算術演算や文字列操作の場合は、波括弧内にプレーンなJavaScriptを記述します:`{{$json.price * 1.1}}`で10%マークアップを追加できます。

Functionノードによるカスタムロジック
Setノードの式が扱いにくくなったら、Functionノードに切り替えます。これは任意のJavaScriptを実行し、入力配列を完全に制御できるようにします。このノードは`items`(それぞれが`json`プロパティを持つオブジェクトの配列)を受け取り、同じ構造で配列を返す必要があります。
例:$100未満の注文を除外し、割引ティアを追加します:
これはitems配列をその場で変更します。複雑な変換の場合、itemsをmap処理して新しい配列を返すことができます:
FunctionノードはNode.jsの標準ライブラリや、すべての受信アイテムを取得する`$input.all()`などのいくつかのヘルパーにアクセスできます。Promiseの処理を理解していない限り、非同期操作は避けてください。関数内でのAPI呼び出しは、代わりにHTTP Requestノードを使用してチェーンしてください。
IFノードによる条件付きルーティング
IFノードはワークフローをtrueとfalseの2つのブランチに分割します。アイテムごとに1つ以上の条件を評価し、一致するアイテムを対応するパスに送信します。
データソースの後にIFノードを追加します。金額を比較する場合は条件タイプを`Number`に、テキスト一致の場合は`String`に、フラグの場合は`Boolean`に設定します。複数の条件をAND/ORロジックで組み合わせることができます。
ワークフローの例:TypeformのWebhookがアンケート回答を送信します。条件`{{$json.score}} > 8`でIFノードを使用します。true出力を、ポジティブなフィードバックをチャンネルに投稿するSlackノードに接続します。false出力を、確認用に問題をログに記録するGoogle Sheetsノードに接続します。
IFノードはデータを変更せず、ルーティングのみを行います。ルーティング前に変換が必要な場合は、IFノードの前にSetまたはFunctionノードを配置してください。両方のブランチが同じフォローアップアクションを必要とする場合は、Mergeノードを使用してマージします(「Append」モードを選択して出力を結合します)。
複数サービスワークフローでのノードの組み合わせ
実際のワークフローではこれらのノードが連鎖します。パターン:Webhook → Function(データをクリーンアップ) → IF(タイプ別にルーティング) → Set(API A用にフォーマット) → HTTP Request(API Aに送信)、そしてfalseブランチはSet(API B用にフォーマット) → HTTP Request(API Bに送信)となります。
よくある間違い:各ノードがアイテムを独立して処理することを忘れること。Functionノードがアイテムを除外した場合、ダウンストリームノードには残りのアイテムのみが表示されます。後で元のデータが必要な場合は、Functionノード内の変数に保存するか、早い段階でSetノードを使用して必要になるフィールドをコピーしてください。
もう一つの落とし穴:Setノード内の複雑な式がサイレントに失敗することです。常にExecute Workflowでテストし、各ノードの出力を確認してください。式がundefinedを返した場合、そのフィールドは出力から除外されます。フォールバックを提供するには`{{$json.field || 'default'}}`を使用してください。
まとめ
Setノードは単純なフィールドマッピングと式を処理します。Functionノードはフィルタリング、集約、複雑な変換のための完全なJavaScript制御を提供します。IFノードは条件に基づいてデータを異なるパスにルーティングします。これらを組み合わせて、受信データにインテリジェントに適応するワークフローを構築してください。実際のサンプルデータでワークフローを実行し、中間出力をチェックしてからライブサービスに接続することで、常に変換を検証してください。
レッスンのチェックポイント
学んだ内容を復習し、回答へのフィードバックを受けましょう。