n8nの式とは
n8nの式を使うと、値をハードコーディングする代わりにデータを動的に参照できます。ノード同士を接続すると、データはJSONオブジェクトとしてあるノードから次のノードへ流れます。式を使うことで、そのJSONにアクセスしてまさに必要な値を取り出したり、次のノードに渡す前に変換したりすることができます。
n8nのすべての式は二重波括弧で囲まれます。その波括弧の中にJavaScript互換のコードを記述し、ワークフロー実行時にn8nが実行時に評価します。
この式は、現在のノードの入力データから email フィールドを読み取ります。シンプルですが、このパターンがデータマッピングのすべての基礎となります。
日常的に使う主要変数
n8nは式内でいくつかの組み込み変数を公開しています。この3つを知っておけば、実際のワークフローの大半をカバーできます。
最初は `json.name` でユーザーの name フィールドを取得できます。
2つ目は `$node` で、ワークフロー内の任意のノード(名前指定)にさかのぼってアクセスできます。直前のノードではないノードのデータが必要な場合に便利です。
3つ目は `$now` で、現在の日時を Luxon の DateTime オブジェクトとして返します。Luxon のメソッドを直接呼び出すことができます。
n8n には日付操作のために Luxon がバンドルされており、JavaScript の標準ライブラリ全体も公開されているため、文字列メソッド、Math、JSON ユーティリティはすべて式内で動作します。
式を使ったデータ変換
式は単に値を読み取るだけではなく、インラインで変換することもできます。一般的なパターンには、文字列連結、数値フォーマット、条件分岐、配列操作などがあります。
2つのフィールドからフルネームを構築する:
フィールドが欠落している可能性がある場合にフォールバック値を設定するシンプルな条件分岐:
Unixタイムスタンプで渡される日付をフォーマットする:
Setノードはこれらの式を使うのに最も自然な場所です。フィールドのリネーム、値の結合、下流で不要なフィールドの削除が必要なときはいつでも、2つのノードの間に追加してください。
ノード間のデータマッピング
データマッピングとは、あるノードの出力を別のノードの入力に配線することを意味します。n8n の UI では、フィールドをターゲットのパラメータに直接ドラッグすることができ、n8n が式を自動で記述してくれます。しかし、何が生成されているかを理解することで、問題が発生したときに修正できます。
ノードが複数のアイテムを返す場合、n8n が繰り返し処理を行うため、`$json` は各アイテムを個別に参照します。つまり、前のノードが50行を返したなら、すべての式はアイテムごとに1回、合計50回評価されます。これがデフォルトの動作であり、追加の設定は不要です。
すべてのアイテムを1つの構造に集約する必要がある場合(たとえば、すべての行からメールアドレスの配列を構築する場合など)は、Code ノードで `$input.all()` を使用します。
Code ノードは完全な JavaScript を実行でき、フィールドパラメータ内の式が読みにくくなるほど複雑になったときに最適なツールです。
よくある間違いとその回避方法
最も頻繁に発生するエラーは、存在しないフィールドを参照することで、undefined が返され、下流のノードが黙って壊れる可能性があります。常に式エディタ のプレビューパネルを使用してください。保存前に解決済みの値が表示されます。
2つ目のよくある問題は、`node["NodeName"].json` を使用してください。
3つ目の間違いは、`$now` を単なる文字列として扱うことです。これは Luxon オブジェクトなので、日付文字列と直接比較しても機能しません。まず両側を同じ型に変換してください。
まとめ
式こそが n8n ワークフローを動的にするものです。コアパターン、つまり JavaScript の式を二重波括弧で囲み `node`、`$now` から読み取るパターンは、ほとんどのシナリオを処理します。 straightforwardなフィールドマッピングとリネームには Set ノードを使用し、ロジックが複雑になってきたら Code ノードにエスカレートしてください。ライブワークフローを実行する前に、必ずプレビューパネルで式を確認してください。
レッスンのチェックポイント
学んだ内容を復習し、回答へのフィードバックを受けましょう。