目次

n8n Expressions 入門:$json、$('ノード')、日付と便利な関数

Expressions を使うと、ノードのパラメーターをデータに応じて動的に変化させられます。どのパラメーターフィールドも Expression モードに切り替えられます(フィールド横の Fixed / Expression 切り替えを使うか、{{ を直接入力します)。

{{ }} の中には JavaScript を記述するため、JavaScript の構文やメソッドを利用できます。

現在のデータを参照する:$json

{{ $json.name }}
{{ $json.address.city }}
{{ $json.tags[0] }}
{{ $json["フィールド 名"] }}

フィールド名に空白や特殊文字が含まれる場合は、中括弧 [...] を使います。

最も簡単な方法は、左側の INPUT パネルからフィールドをドラッグしてパラメーターに入れることです。n8n が正しい Expression を自動で生成します。

Edit Fields ノードで Expression を使ってメッセージを作成
Edit Fields:左側で INPUT のフィールドを Expression にドラッグすると、右側の OUTPUT に組み立てたメッセージがすぐに表示されます

他のノードのデータを参照する:$('ノード名')

$json で参照できるのは直前のノードの出力だけです。それより前のノードを参照するには、次のようにします。

{{ $('Google Sheets').item.json.email }}
書き方意味
$('ノード').item現在のデータに対応するデータ(最もよく使います)
$('ノード').first()そのノードが出力した最初のデータ
$('ノード').last()最後のデータ
$('ノード').all()すべての items(配列)
{{ $('Webhook').item.json.body.customer_id }}
{{ $('設定を取得').first().json.api_url }}
{{ $('注文').all().length }} 件の注文

ノード名を変更すると、Expression 内の名前も n8n が自動で更新します。

文字列の処理

{{ $json.name.trim() }}
{{ $json.email.toLowerCase() }}
{{ $json.title.slice(0, 50) }}…
{{ $json.text.replaceAll('\n', ' ') }}
{{ `こんにちは ${$json.name}さん、ご注文 ${$json.order_id} を発送しました。` }}
{{ $json.tags.join('、') }}

n8n には、ほかにも便利なメソッドがあります。

{{ $json.email.isEmail() }}
{{ $json.content.extractUrl() }}
{{ $json.title.toTitleCase() }}

数値

{{ $json.price * 1.05 }}
{{ Math.round($json.score * 10) / 10 }}
{{ Number($json.amount).toLocaleString('zh-TW') }}
{{ ($json.done / $json.total * 100).toFixed(1) }}%

API が返す数値が文字列になっていることがあります。計算する前に Number() で変換してください。

条件分岐

{{ $json.amount > 1000 ? 'VIP' : '一般' }}
{{ $json.nickname || $json.name }}
{{ $json.phone ?? '未入力' }}

条件に応じて異なるフローを実行する場合は、Expression で処理せず、If または Switch ノードを使います。

配列

{{ $json.items.length }}
{{ $json.items.map(i => i.name).join(', ') }}
{{ $json.items.filter(i => i.stock === 0).length }}
{{ $json.scores.reduce((a, b) => a + b, 0) }}

日付と時刻

n8n には日付ライブラリの Luxon が組み込まれています。$now は現在時刻、$today は今日の午前0時です。

{{ $now.toFormat('yyyy-MM-dd HH:mm') }}
{{ $today.minus({ days: 1 }).toFormat('yyyy/MM/dd') }}
{{ $now.plus({ hours: 2 }).toISO() }}
{{ $now.setZone('Asia/Taipei').toFormat('MM月dd日 HH:mm') }}
{{ $now.weekday }}                      // 1 = 月曜日 … 7 = 日曜日

データ内の日付文字列を解析するには、次のようにします。

{{ DateTime.fromISO($json.created_at).toFormat('yyyy-MM-dd') }}
{{ DateTime.fromFormat($json.date, 'yyyy/MM/dd').plus({ days: 7 }).toISODate() }}
{{ $json.created_at.toDateTime().diffTo($now, 'days') }}

タイムゾーンは n8n またはワークフローのタイムゾーン設定に従います。Asia/Taipei に設定してください。

よく使う組み込み変数

変数内容
$json現在のデータ
$binary現在のデータのファイル
$input.all()このノードが受け取ったすべての items
$now、$today現在時刻、今日
$execution.id今回の実行の ID
$execution.modetest(手動テスト)または production
$workflow.nameワークフロー名
$vars.名前カスタム変数(一部のプランで利用可能)
$runIndex今回の実行でノードが何回目に実行されたか

複数行の処理と複雑なロジック

Expression では、即時実行関数を記述できます。

{{ (() => {
  const total = $json.items.reduce((s, i) => s + i.price * i.qty, 0);
  return total >= 1000 ? total : total + 60;
})() }}

ただし、ロジックが数行を超える場合は、Code ノードに移すと読みやすく、デバッグもしやすくなります。

デバッグのヒント

  • Expression フィールドの下にプレビュー結果がリアルタイムで表示されます。赤色はエラーを示します。
  • プレビューには前回の実行データが使われます。プレビューを表示するには、先に前のノードを実行してください。
  • Cannot read properties of undefined は、パスの途中に存在しない階層があることを示します。?. を使うとエラーを回避できます:{{ $json.address?.city }}。
  • データ全体を確認するには、{{ JSON.stringify($json) }} を使います。

更新日 2026年10月12日