n8nを使って業務自動化を進めていると、標準ノードだけでは実現できない、少し複雑な処理が必要になる場面がありますよね。
そんなときに絶大なパワーを発揮するのが「Codeノード」です。
Codeノードを使えば、JavaScriptで自由自在にデータを加工したり、独自のロジックを組み込んだりできます。
しかし、「JavaScriptは少し苦手…」「毎回コードを書くのが面倒…」と感じる方も少なくないでしょう。
この記事では、そんなあなたのために、コピペしてすぐに使える実践的なJavaScriptスニペットを10個厳選してご紹介します。
データ操作の基本から、業務で役立つデータ整形、API連携の強化まで、幅広くカバーしました。
この記事を参考にすれば、あなたのn8nワークフローはさらに柔軟でパワフルなものになるはずです。
n8nの基本的な概念や全体像について先に理解を深めたい方は、ぜひ「n8n完全ガイド記事」も併せてご覧ください。
n8nのCodeノードにおけるデータ構造の基礎
スニペットを見ていく前に、Codeノードで最も重要なデータ構造の基本を理解しておきましょう。n8nでは、ノード間のデータは「アイテム(items)」という配列で受け渡しされます。
Codeノード内では、itemsという変数で前のノードから渡されたデータにアクセスできます。例えば、前のノードから1つのアイテムが渡された場合、そのデータはitems[0].jsonの中に格納されています。
この構造を理解することが、Codeノードを使いこなすための第一歩です。多くのスニペットがこのitemsオブジェクトを操作することを前提としているので、常に意識しておきましょう。
1. 複数の入力アイテムを1つのデータセットに結合する
異なるノードから来た複数の入力(items)を、後続の処理のために1つのオブジェクトにまとめたいケースは頻繁にあります。例えば、顧客情報と注文情報を別々に取得し、それを統合して次のアクションに移すような場面です。
ユースケース:
- 複数の情報源からのデータをマージして、1つのAPIリクエストで送信したい時。
- Google Sheetsの異なる行から読み取ったデータを1つにまとめたい時。
スニペット:
const combinedData = {};
// 1番目の入力(例:顧客情報)
if (items[0]) {
Object.assign(combinedData, items[0].json);
}
// 2番目の入力(例:注文情報)
if (items[1]) {
Object.assign(combinedData, { orderInfo: items[1].json });
}
return [{
json: combinedData
}];
解説:
このコードは、2つの異なる入力(items[0]とitems[1])を受け取り、それらをcombinedDataという1つのオブジェクトに結合します。Object.assignを使うことで、キーが重複しないようにオブジェクトをマージできます。2番目の入力は、キーが重複する可能性を考慮してorderInfoという新しいキーの下に格納しています。これにより、データの出自が明確になり、後続の処理がしやすくなります。
2. 特定のキーの値だけを抽出・加工して返す
APIのレスポンスやデータベースからの取得結果には、不要な情報が多く含まれていることがよくあります。後続の処理で必要なデータだけをシンプルに抽出することで、ワークフロー全体の可読性とパフォーマンスが向上します。
ユースケース:
- 天気APIから取得した情報のうち、「天気」と「気温」だけを使いたい時。
- ユーザーリストから「メールアドレス」だけを抽出したい時。
スニペット:
const newItems = items.map(item => {
const user = item.json;
return {
json: {
name: user.name,
email: user.email,
// ステータスが大文字で返ってくる場合、小文字に変換
status: user.status ? user.status.toLowerCase() : 'inactive'
}
};
});
return newItems;
解説:
map関数を使って、各アイテムから必要なキー(name, email, status)だけを抽出した新しいアイテムの配列を生成します。この例では、statusキーが存在すればその値を小文字に変換し、存在しない場合はデフォルト値として'inactive'を設定するという簡単なデータ加工も加えています。これにより、データの正規化を同時に行うことができます。
業務効率を上げる!実践的なデータ整形スニペット
生のデータは、そのままでは使いにくいことがほとんどです。日付のフォーマットが違ったり、数値にカンマがなかったり、不要な文字列が含まれていたり。Codeノードを使えば、これらのデータを簡単に見やすく、使いやすい形に整形できます。
3. 日付フォーマットを変換する(例: YYYY-MM-DD)
システムによって日付のフォーマットは様々です。ISO形式(2026-01-15T12:30:00.000Z)で取得した日付を、日本のユーザー向けに「2026年01月15日」や、データベース登録用に「2026-01-15」といった形式に変換したい場面で役立ちます。
ユースケース:
- 取得した日時を、レポートや通知文に適した形式にしたい時。
- MySQLなどのデータベースにDATE型で保存したい時。
スニペット:
const date = new Date(items[0].json.createdAt);
// YYYY-MM-DD形式に変換
const year = date.getFullYear();
const month = ('0' + (date.getMonth() + 1)).slice(-2);
const day = ('0' + date.getDate()).slice(-2);
const formattedDate = `${year}-${month}-${day}`;
// 元のデータに新しいキーとして追加
items[0].json.formattedCreatedAt = formattedDate;
return items;
解説:
new Date()で日付オブジェクトを生成し、getFullYear(), getMonth(), getDate()メソッドを使って年・月・日を取得します。月は0から始まるため+1すること、また月と日を2桁に揃えるためにslice(-2)を使っているのがポイントです。元のデータを壊さずに、新しいキー(formattedCreatedAt)として追加することで、データのトレーサビリティを保てます。
4. 数値に3桁区切りのカンマを追加する
見積書や請求レポートなどで金額を扱う際、数値がそのまま「1000000」のように表示されると非常に読みにくいです。これを「1,000,000」のようにフォーマットすることで、視認性が格段に向上します。
ユースケース:
- レポート作成時に、金額や数量を読みやすくフォーマットしたい時。
- チャットツールへの通知メッセージ内で、売上数値を分かりやすく表示したい時。
スニペット:
const price = items[0].json.price;
if (typeof price === 'number') {
// toLocaleString()メソッドで簡単にカンマ区切りに変換
items[0].json.formattedPrice = price.toLocaleString('ja-JP');
}
return items;
解説:
JavaScriptの組み込みメソッドであるtoLocaleString()を使うのが最も簡単で確実です。引数に'ja-JP'を指定すれば、日本のロケールに基づいた形式になります。事前にtypeofで数値型かどうかをチェックすることで、予期せぬエラーを防ぐことができます。
5. 文字列から不要な文字を削除・置換する
Webスクレイピングで取得したデータや、ユーザー入力のデータには、不要な空白、改行、特殊文字が含まれていることがよくあります。これらを正規表現を使って一括でクリーンアップします。
ユースケース:
- 取得したテキストからHTMLタグを除去したい時。
- 電話番号のハイフン「-」を削除して統一したい時。
スニペット:
let text = items[0].json.rawText;
// 前後の空白を削除
text = text.trim();
// 全ての改行コードを半角スペースに置換
text = text.replace(/(\\r\\n|\\n|\\r)/gm, ' ');
// 連続する半角スペースを1つにまとめる
text = text.replace(/\\s+/g, ' ');
items[0].json.cleanedText = text;
return items;
解説:
正規表現とreplace()メソッドの組み合わせは非常に強力です。trim()で前後の空白を削除した後、正規表現を使って改行コード(\\r\\n, \\n, \\r)をスペースに置換しています。/gフラグは「一致するすべての部分」、/mフラグは「複数行」を対象にすることを意味します。最後に連続するスペースを1つにまとめることで、非常にきれいな文字列データが完成します。
外部連携を強化するAPI・データ構造関連スニペット
n8nの真価は、様々なサービスとAPI連携できる点にあります。Codeノードを使えば、HTTP Requestノードだけでは難しい、動的なリクエスト作成や複雑なレスポンスの解析が可能になります。
6. 条件に応じて動的にAPIリクエストボディを生成する
前のノードの結果に応じて、APIに送信するデータ(リクエストボディ)の内容を変更したい場合があります。例えば、特定の条件を満たす時だけ、追加のパラメータを付与するようなケースです。
ユースケース:
- 顧客のプランに応じて、APIで有効にする機能を変更したい時。
- テスト環境と本番環境で、送信するパラメータを切り替えたい時。
スニペット:
const user = items[0].json;
const requestBody = {
userId: user.id,
message: 'Your order has been shipped.'
};
// ユーザーがプレミアム会員の場合、特典情報を追加
if (user.plan === 'premium') {
requestBody.specialOffer = 'Special coupon for next purchase!';
}
return [{
json: requestBody
}];
解説:
基本的なリクエストボディを定義した後、if文を使って条件分岐を行います。条件(この場合はuser.plan === 'premium')が真の場合のみ、requestBodyオブジェクトに新しいプロパティ(specialOffer)を追加しています。これにより、1つのCodeノードで柔軟にリクエスト内容を組み立てることができ、ワークフローの分岐を減らせます。
7. 複雑なJSONレスポンスから特定のデータを深く掘って抽出する
APIのレスポンスは、しばしば深くネストした(階層が深い)JSON構造になっています。目的のデータにたどり着くために、response.data.users[0].profile.email のように長いパスを記述する必要があり、途中のキーが存在しないとエラーで止まってしまいます。
ユースケース:
- ネストしたAPIレスポンスから、安全にデータを取り出したい時。
- 存在するか不確かなキーの値を、エラーなく取得したい時。
スニペット:
const response = items[0].json;
// オプショナルチェイニング (?.) を使って安全にアクセス
const email = response.data?.users?.[0]?.profile?.email;
const address = response.data?.users?.[0]?.profile?.address ?? 'Address not found';
return [{
json: {
email: email,
address: address
}
}];
解説:
このコードの 핵심はオプショナルチェイニング演算子(?.)です。これにより、長いパスの途中のキーが存在しなくてもエラーが発生せず、結果としてundefinedが返されます。さらに、Null合体演算子(??)を組み合わせることで、結果がnullまたはundefinedの場合のデフォルト値を簡単に設定できます(この例では'Address not found')。これにより、非常に堅牢でエラーに強いデータ抽出ロジックを記述できます。
8. 配列データをループ処理して個別のアイテムに分割する
1つのアイテム内に、処理したいデータの配列(例えば、注文リストや添付ファイルリスト)が含まれていることがあります。後続のSplit In Batchesノードでも分割できますが、Codeノード内で前処理を加えてから分割したい場合にこのスニペットが役立ちます。
ユースケース:
- 1つの注文に含まれる複数の商品情報を、1つずつ処理したい時。
- メールに添付された複数のファイルを、個別にGoogle Driveにアップロードしたい時。
スニペット:
const order = items[0].json;
const products = order.products; // 商品リストの配列
const newItems = [];
for (const product of products) {
newItems.push({
json: {
orderId: order.id,
productName: product.name,
productPrice: product.price
}
});
}
return newItems;
解説:
for...ofループを使って、products配列の各要素を順番に処理します。ループの中で、元の注文ID(order.id)と各商品の情報を組み合わせた新しいアイテムを生成し、newItems配列に追加していきます。最終的にこのnewItems配列を返すことで、n8nはこれを個別のアイテムとして認識し、後続のノードで1つずつ処理できるようになります。
ワークフローを制御する高度なテクニック
最後に、ワークフロー全体の流れをコントロールするための、少し高度なスニペットを紹介します。
9. 実行環境変数(Environment Variables)を安全に利用する
APIキーやデータベースの認証情報など、機密情報はワークフローに直接書き込むべきではありません。n8nのCredentialsや、実行環境の環境変数として設定し、Codeノードから安全に呼び出すのがベストプラクティスです。(2026年1月時点の情報)
ユースケース:
- APIキーをコード内にハードコーディングしたくない時。
- 開発環境と本番環境で利用するAPIキーを切り替えたい時。
スニペット:
// n8nの環境変数を取得
const apiKey = process.env.MY_CUSTOM_API_KEY;
if (!apiKey) {
throw new Error('Environment variable "MY_CUSTOM_API_KEY" is not set.');
}
// 取得したAPIキーをHTTPヘッダーに設定して返す
return [{
json: {
headers: {
'X-API-KEY': apiKey
}
}
}];
解説:
process.env.変数名という形式で、n8nが動作している環境の変数にアクセスできます。このコードでは、MY_CUSTOM_API_KEYという環境変数を取得しています。重要なのは、取得できなかった場合にthrow new Error()で意図的にワークフローを停止させる処理を入れている点です。これにより、機密情報がないまま処理が進んでしまうという最悪の事態を防げます。
10. 複数の出力先に異なるデータを渡す
Codeノードは、実は複数の出力(Output)を持つことができます。ノードの設定でOutputの数を増やし、コード内でどの出力にどのデータを渡すかを指定することで、複雑な条件分岐を1つのノードで実現できます。
ユースケース:
- 処理結果が成功か失敗かで、後続の処理(通知、リトライなど)を分けたい時。
- ユーザーの属性によって、異なるキャンペーン情報を送信したい時。
スニペット:
// このスニペットは、CodeノードのOutputs設定を2にしている前提です
const user = items[0].json;
const output1_data = []; // 1番目の出力用
const output2_data = []; // 2番目の出力用
if (user.isActive && user.lastLoginDays <= 30) {
// アクティブユーザーは出力1へ
output1_data.push({ json: { message: 'Thanks for being an active user!' } });
} else {
// 非アクティブユーザーは出力2へ
output2_data.push({ json: { message: 'We miss you! Here is a coupon.' } });
}
// 配列の配列として返す
return [output1_data, output2_data];
解説:
返すデータの形式がポイントです。複数の出力にデータを渡すには、配列の配列、つまり[ [出力1のアイテム配列], [出力2のアイテム配列], ... ]という形でデータを返します。この例では、条件に応じてどちらかの配列にデータを追加し、最後に2つの配列を格納した親配列を返しています。これにより、1番目の出力(成功ルート)と2番目の出力(失敗・別ルート)に、それぞれ異なるデータを渡すことができます。
まとめ:Codeノードでn8nの可能性を最大限に引き出そう
今回は、n8nのCodeノードで役立つJavaScriptスニペットを10個、厳選してご紹介しました。基本的なデータ操作から、実用的なデータ整形、API連携、ワークフロー制御まで、これらのスニペットはあなたの自動化の幅を大きく広げてくれるはずです。
最初はコピペからで構いません。少しずつコードを改変して、自分のやりたい処理に合わせてカスタマイズしていくうちに、自然とJavaScriptとCodeノードの扱いに慣れていくでしょう。
Codeノードを使いこなすことは、n8nを「ただのツール」から「最強の自動化プラットフォーム」へと昇華させる鍵となります。
この記事で紹介したスニペットが、あなたの業務自動化の一助となれば幸いです。まだn8nを本格的に利用していない方は、無料プランからでも多くの機能が試せるこの機会に、ぜひそのパワフルな世界を体験してみてください。あなたのビジネスに革命が起きるかもしれません。