目次
n8n Code ノード入門:JavaScript と Python でデータを処理する
式や既存のノードでは要件を満たせない場合、Code ノードを使って JavaScript(または Python)を直接記述できます。
2つの実行モード
| モード | 実行回数 | データの読み取り | 用途 |
|---|---|---|---|
| Run Once for All Items | ノード全体で1回だけ実行 | $input.all() | 集計、並べ替え、結合、新しい複数データの生成 |
| Run Once for Each Item | item ごとに1回実行 | $input.item / $json | item ごとのデータ変換 |
返却形式
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日