このレッスンのロックを解除するには、まず「レッスン4:ノードの操作と外部サービスの連携」を完了してください。前のレッスンに戻る

n8nの式とは

n8nの式を使うと、値をハードコーディングする代わりにデータを動的に参照できます。ノード同士を接続すると、データはJSONオブジェクトとしてあるノードから次のノードへ流れます。式を使うことで、そのJSONにアクセスしてまさに必要な値を取り出したり、次のノードに渡す前に変換したりすることができます。

n8nのすべての式は二重波括弧で囲まれます。その波括弧の中にJavaScript互換のコードを記述し、ワークフロー実行時にn8nが実行時に評価します。

javascript
{{ $json.email }}

この式は、現在のノードの入力データから email フィールドを読み取ります。シンプルですが、このパターンがデータマッピングのすべての基礎となります。

Node A(JSON出力)からのデータが式評価器へ流れ、Node Bに解決済みの値として渡されることを示すフローチャート

日常的に使う主要変数

n8nは式内でいくつかの組み込み変数を公開しています。この3つを知っておけば、実際のワークフローの大半をカバーできます。

最初は `json‘で、現在のアイテムのデータのオブジェクトを参照します。前のノードがユーザーレコードを返した場合、‘json` で、現在のアイテムのデータのオブジェクトを参照します。前のノードがユーザーレコードを返した場合、`json.name` でユーザーの name フィールドを取得できます。

2つ目は `$node` で、ワークフロー内の任意のノード(名前指定)にさかのぼってアクセスできます。直前のノードではないノードのデータが必要な場合に便利です。

javascript
{{ $node["HTTP Request"].json.body.id }}

3つ目は `$now` で、現在の日時を Luxon の DateTime オブジェクトとして返します。Luxon のメソッドを直接呼び出すことができます。

javascript
{{ $now.toISO() }}

n8n には日付操作のために Luxon がバンドルされており、JavaScript の標準ライブラリ全体も公開されているため、文字列メソッド、Math、JSON ユーティリティはすべて式内で動作します。

式を使ったデータ変換

式は単に値を読み取るだけではなく、インラインで変換することもできます。一般的なパターンには、文字列連結、数値フォーマット、条件分岐、配列操作などがあります。

2つのフィールドからフルネームを構築する:

javascript
{{ $json.firstName + " " + $json.lastName }}

フィールドが欠落している可能性がある場合にフォールバック値を設定するシンプルな条件分岐:

javascript
{{ $json.phone ? $json.phone : "N/A" }}

Unixタイムスタンプで渡される日付をフォーマットする:

javascript
{{ DateTime.fromSeconds($json.createdAt).toFormat("yyyy-MM-dd") }}

Setノードはこれらの式を使うのに最も自然な場所です。フィールドのリネーム、値の結合、下流で不要なフィールドの削除が必要なときはいつでも、2つのノードの間に追加してください。

フローチャート:Webhookノードが生の JSON を出力 → Set ノードが式を適用してフィールドを再構築 → HTTP Request ノードがクリーンなペイロードを送信

ノード間のデータマッピング

データマッピングとは、あるノードの出力を別のノードの入力に配線することを意味します。n8n の UI では、フィールドをターゲットのパラメータに直接ドラッグすることができ、n8n が式を自動で記述してくれます。しかし、何が生成されているかを理解することで、問題が発生したときに修正できます。

ノードが複数のアイテムを返す場合、n8n が繰り返し処理を行うため、`$json` は各アイテムを個別に参照します。つまり、前のノードが50行を返したなら、すべての式はアイテムごとに1回、合計50回評価されます。これがデフォルトの動作であり、追加の設定は不要です。

すべてのアイテムを1つの構造に集約する必要がある場合(たとえば、すべての行からメールアドレスの配列を構築する場合など)は、Code ノードで `$input.all()` を使用します。

javascript
const emails = $input.all().map(item => item.json.email);
return [{ json: { emailList: emails } }];

Code ノードは完全な JavaScript を実行でき、フィールドパラメータ内の式が読みにくくなるほど複雑になったときに最適なツールです。

よくある間違いとその回避方法

最も頻繁に発生するエラーは、存在しないフィールドを参照することで、undefined が返され、下流のノードが黙って壊れる可能性があります。常に式エディタ のプレビューパネルを使用してください。保存前に解決済みの値が表示されます。

2つ目のよくある問題は、`json‘が現在のノードの入力(outputではなくinput)を参照していることを忘れることです。Setノード内にいて、2つ前のステップのデータが欲しい場合は、代わりに‘json` が現在のノードの入力(outputではなく input)を参照していることを忘れることです。Set ノード内にいて、2つ前のステップのデータが欲しい場合は、代わりに `node["NodeName"].json` を使用してください。

3つ目の間違いは、`$now` を単なる文字列として扱うことです。これは Luxon オブジェクトなので、日付文字列と直接比較しても機能しません。まず両側を同じ型に変換してください。

javascript
{{ $now.toISODate() === "2025-01-15" }}

まとめ

式こそが n8n ワークフローを動的にするものです。コアパターン、つまり JavaScript の式を二重波括弧で囲み `json‘、‘json`、`node`、`$now` から読み取るパターンは、ほとんどのシナリオを処理します。 straightforwardなフィールドマッピングとリネームには Set ノードを使用し、ロジックが複雑になってきたら Code ノードにエスカレートしてください。ライブワークフローを実行する前に、必ずプレビューパネルで式を確認してください。

レッスンの練習

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

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

0/1
回答済み · 0/1
レッスン5:式、データマッピング、変換