目次

n8n Code ノード入門:JavaScript と Python でデータを処理する

式や既存のノードでは要件を満たせない場合、Code ノードを使って JavaScript(または Python)を直接記述できます。

2つの実行モード

モード実行回数データの読み取り用途
Run Once for All Itemsノード全体で1回だけ実行$input.all()集計、並べ替え、結合、新しい複数データの生成
Run Once for Each Itemitem ごとに1回実行$input.item / $jsonitem ごとのデータ変換

返却形式

Code ノードは items 配列を返す必要があります。各要素は { json: {...} } です。

return [
  { json: { name: "小明", score: 90 } },
  { json: { name: "小華", score: 85 } },
];

Run Once for Each Item モードでは、オブジェクトを1つ返せば十分です。

return { json: { ...$json, total: $json.price * $json.qty } };

(新しい n8n では通常のオブジェクトを直接返すこともでき、自動的に { json: ... } でラップされますが、明示しておくほうが間違いを防げます。)

例:計算してフィールドを追加する(item ごとに実行)

const price = Number($json.price);
const qty = Number($json.qty);

return {
  json: {
    ...$json,
    subtotal: price * qty,
    shipping: price * qty >= 1000 ? 0 : 60,
  },
};

例:集計(全 item に対して1回実行)

const items = $input.all();

const byRegion = {};
for (const item of items) {
  const { region, amount } = item.json;
  byRegion[region] = (byRegion[region] ?? 0) + Number(amount);
}

return Object.entries(byRegion)
  .sort((a, b) => b[1] - a[1])
  .map(([region, total]) => ({ json: { region, total } }));

100件の注文を入力すると、地域ごとの合計データが1件ずつ出力されます。

例:複数のデータを生成する

// Generate dates for the next 7 days
const days = [];
for (let i = 0; i < 7; i++) {
  days.push({ json: { date: $now.plus({ days: i }).toFormat("yyyy-MM-dd") } });
}
return days;

例:API から返された複雑なデータを整える

const data = $input.first().json;

return data.results
  .filter((r) => r.status === "active")
  .map((r) => ({
    json: {
      id: r.id,
      name: r.profile?.display_name ?? r.username,
      email: r.contact?.email ?? null,
      tags: (r.tags ?? []).map((t) => t.label).join(", "),
    },
  }));

他のノードのデータを読み取る

式と同じように読み取れます。

const settings = $("Get Settings").first().json;
const orders = $("Orders").all();

デバッグ

console.log($json);

出力はブラウザーの開発者ツールの Console に表示されます(手動テスト時)。

外部 npm パッケージを使う

セルフホスト版では、環境変数を使って Code ノードで組み込みモジュールや外部パッケージを使用できるようにします。

NODE_FUNCTION_ALLOW_BUILTIN=crypto
NODE_FUNCTION_ALLOW_EXTERNAL=lodash,dayjs

外部パッケージは Code ノードを実行する環境にインストールする必要があります(Docker を使う場合は通常、カスタムイメージが必要です)。n8n 2.x の Code ノードは**タスクランナー(task runner)**で実行されます。設定については、公式ドキュメントの task runners の説明を参照してください。

n8n 2.x の重要な変更点

  • Code ノードはデフォルトで環境変数($env)を読み取れません。機密情報の漏えいを防ぐためです。
  • Code ノードでは $evaluateExpression() がサポートされなくなりました。
  • Python:以前の Pyodide(ブラウザー側の Python)を使う実行方式は削除されました。n8n 2.x の Python Code ノードを使うには、「外部モード」で実行するタスクランナーが必要です(公式の n8nio/runners イメージが提供されています)。また、構文も以前とは異なります。

Python の例(Python タスクランナーの設定が必要)

# Run Once for All Items
results = []
for item in _items:
    data = item["json"]
    results.append({"json": {"name": data["name"].strip(), "length": len(data["name"])}})
return results

新しい Python の実行方式では、すべての項目に対しては _items、item ごとのモードでは _item を使います。フィールドの読み取りには辞書の角括弧構文を使い、_input とドット構文はサポートされません。環境に Python タスクランナーが設定されていない場合は、JavaScript の使用をおすすめします。

Code ノードを使わないほうがよい場合

  • 値の取得や書式設定だけなら、式を使います。
  • 分割、結合、フィルタリング、並べ替えには、Split Out、Aggregate、Filter、Sort を使います。
  • API の呼び出しには、HTTP Request を使います。

Code ノードが少ないほど、ワークフローを他の人が理解し、保守しやすくなります。

更新日 2026年10月12日