このレッスンのロックを解除するには、まず「レッスン3:認証方式 — APIキー、OAuth2、ヘッダー」を完了してください。前のレッスンに戻る

はじめに

n8nで複数のサービスを接続する際、あるAPIからの生データが次のAPIが期待する形式と一致することはほとんどありません。フィールドを再構築し、無関係なレコードを除外し、条件に基づいてデータを異なるブランチにルーティングする必要があります。n8nはこれのために3つのコアノードを提供しています:Set(単純なフィールドマッピング用)、Function(カスタムJavaScriptロジック用)、IF(条件付きルーティング用)。これらをマスターすることで、線形ワークフローをスマートなマルチパス自動化へと変貌させます。

Setノードによるデータ再構築

Setノードを使用すると、コードを書かずに新しいフィールドを作成したり、既存のフィールドの名前を変更したりできます。これは、ネストされたプロパティの抽出、フィールドの結合、静的値の追加などの単純な変換のための定番のツールです。

Webhookが以下のペイロードを配信するとします:

json
{
"user": {
"firstName": "Alice",
"lastName": "Johnson"
},
"orderTotal": 149.99
}

これを`full_name`と`amount`を期待するCRMに送信したいとします。Webhookの後にSetノードを追加し、2つのフィールドを設定します:式`{{json.user.firstName}} {{json.user.lastName}}`を持つ`full_name`と、`{{$json.orderTotal}}`を持つ`amount`。出力は次のようになります:

json
{
"full_name": "Alice Johnson",
"amount": 149.99
}

Setノードは二重波括弧を使用した式をサポートしています。現在のアイテムを参照するには`json‘、別のノードからの出力を参照するには‘json`、別のノードからの出力を参照するには`node['NodeName'].json`、組み込み関数(`now‘や‘now`や`today`など)を使用できます。算術演算や文字列操作の場合は、波括弧内にプレーンなJavaScriptを記述します:`{{$json.price * 1.1}}`で10%マークアップを追加できます。

WebhookデータがSetノードに流入し、フィールドが再マッピングされてCRMノードに出力されるフローチャート

Functionノードによるカスタムロジック

Setノードの式が扱いにくくなったら、Functionノードに切り替えます。これは任意のJavaScriptを実行し、入力配列を完全に制御できるようにします。このノードは`items`(それぞれが`json`プロパティを持つオブジェクトの配列)を受け取り、同じ構造で配列を返す必要があります。

例:$100未満の注文を除外し、割引ティアを追加します:

javascript
for (let i = 0; i < items.length; i++) {
const order = items[i].json;
if (order.amount < 100) {
items.splice(i, 1);
i--;
continue;
}
order.discount_tier = order.amount >= 500 ? 'gold' : 'silver';
}
return items;

これはitems配列をその場で変更します。複雑な変換の場合、itemsをmap処理して新しい配列を返すことができます:

javascript
return items.map(item => ({
json: {
customer_id: item.json.user.id,
total: Math.round(item.json.amount),
tags: item.json.categories.join(', ')
}
}));

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ノードに接続します。

javascript
// Condition in IF node:
// Value 1: {{$json.score}}
// Operation: Larger
// Value 2: 8

IFノードはデータを変更せず、ルーティングのみを行います。ルーティング前に変換が必要な場合は、IFノードの前にSetまたはFunctionノードを配置してください。両方のブランチが同じフォローアップアクションを必要とする場合は、Mergeノードを使用してマージします(「Append」モードを選択して出力を結合します)。

データが入IFノードに流入し、trueブランチがSlackに、falseブランチがGoogle Sheetsに向かうフローチャート

複数サービスワークフローでのノードの組み合わせ

実際のワークフローではこれらのノードが連鎖します。パターン: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ノードは条件に基づいてデータを異なるパスにルーティングします。これらを組み合わせて、受信データにインテリジェントに適応するワークフローを構築してください。実際のサンプルデータでワークフローを実行し、中間出力をチェックしてからライブサービスに接続することで、常に変換を検証してください。

レッスンの練習

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

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

0/1
回答済み · 0/1