n8nで複雑な自動化ワークフローを構築しようとして、既存のノードだけでは実現できない処理に直面したことはありませんか?
「APIレスポンスを特殊な形式に変換したい」「複数のデータソースを組み合わせて分析したい」「条件分岐をもっと柔軟に制御したい」。
こうした要望に応えるのが、n8nのCodeノードです。
本記事では、Codeノードを使いこなすための実践的なJavaScriptサンプルコードを紹介します。
基本的な使い方から応用テクニックまで、明日から使える具体例を通じて、あなたの自動化ワークフローを次のレベルへ引き上げる方法をお伝えします。
なぜCodeノードのマスターが重要なのか?n8n自動化の真の力を解き放つ鍵
n8nは200以上の統合ノードを提供していますが、実際の業務では「あと一歩」の機能が足りないケースが頻繁に発生します。例えば、私が最近直面した課題として、複数のAPIから取得したデータを独自のフォーマットに統合する必要がありました。既存のノードの組み合わせだけでは、処理が複雑になりすぎて保守性が著しく低下してしまったのです。
Codeノードを活用することで、以下のような問題を効率的に解決できます:
- APIレスポンスの複雑な加工処理(ネストした配列の展開、条件に基づくフィルタリングなど)
- 外部サービスとの特殊な認証処理(OAuth以外のカスタム認証など)
- 大量データの効率的な処理(バッチ処理、並列実行など)
- ビジネスロジックの実装(複雑な計算式、独自のアルゴリズムなど)
実際、私のクライアントの一社では、Codeノードを導入することで、月間40時間かかっていたデータ処理作業を完全自動化し、処理時間を5分に短縮することに成功しました。これは単なる時間短縮だけでなく、人的ミスの削減と処理の標準化という大きなメリットももたらしました。
しかし、多くのn8nユーザーがCodeノードの活用に躊躇する理由があります。それは「JavaScriptの知識が必要」という心理的ハードルです。確かに、プログラミング経験がない方にとっては敷居が高く感じるかもしれません。
そこで本記事では、コピー&ペーストで使える実践的なサンプルコードを豊富に用意しました。これらのコードを参考にすることで、JavaScriptの詳細を理解していなくても、すぐにCodeノードの恩恵を受けることができます。
すぐに使える!n8n Codeノードの応用サンプルコード集
ここからは、実際の業務で頻繁に必要となる処理パターンを、具体的なコードサンプルとともに紹介していきます。各サンプルには詳細な解説を付けているので、自分の用途に合わせてカスタマイズすることも可能です。
1. APIレスポンスの高度なデータ加工
外部APIから取得したデータを、自社システムに合わせた形式に変換する処理は非常に一般的です。以下は、複雑なJSONデータを扱う際の実践的なサンプルです。
// 複数のAPIレスポンスを統合して新しい形式に変換
const items = $input.all();
const processedData = [];
for (const item of items) {
const originalData = item.json;
// ネストしたデータの展開と再構成
const transformed = {
id: originalData.user?.id || 'unknown',
fullName: `${originalData.user?.firstName || ''} ${originalData.user?.lastName || ''}`.trim(),
email: originalData.contact?.email || originalData.user?.email || '',
orderHistory: originalData.orders?.map(order => ({
orderId: order.id,
date: new Date(order.created_at).toLocaleDateString('ja-JP'),
total: order.items.reduce((sum, item) => sum + (item.price * item.quantity), 0),
status: order.status.toUpperCase()
})) || [],
totalSpent: originalData.orders?.reduce((sum, order) =>
sum + order.items.reduce((orderSum, item) =>
orderSum + (item.price * item.quantity), 0), 0) || 0
};
processedData.push(transformed);
}
return processedData;
このコードのポイントは、オプショナルチェーン演算子(?.)を使用してnullやundefinedに対する安全な処理を実現している点です。実際の業務では、APIレスポンスが常に完全な形で返ってくるとは限らないため、このような防御的プログラミングが重要になります。
2. 条件分岐と動的フィルタリング
ビジネスルールに基づいた複雑な条件分岐を実装する例です:
// 複雑な条件に基づくデータのフィルタリングと分類
const items = $input.all();
const categorizedData = {
highPriority: [],
normalPriority: [],
lowPriority: [],
archived: []
};
for (const item of items) {
const data = item.json;
// 複数の条件を組み合わせた分類ロジック
if (data.status === 'archived') {
categorizedData.archived.push(data);
} else if (data.urgency === 'high' && data.value > 100000) {
categorizedData.highPriority.push({
...data,
priorityScore: calculatePriorityScore(data),
assignedTeam: 'senior'
});
} else if (data.urgency === 'high' || data.value > 50000) {
categorizedData.normalPriority.push({
...data,
priorityScore: calculatePriorityScore(data),
assignedTeam: 'standard'
});
} else {
categorizedData.lowPriority.push({
...data,
priorityScore: calculatePriorityScore(data),
assignedTeam: 'junior'
});
}
}
// 優先度スコアの計算関数
function calculatePriorityScore(data) {
let score = 0;
score += data.urgency === 'high' ? 50 : data.urgency === 'medium' ? 25 : 0;
score += Math.min(data.value / 10000, 50); // 最大50点
score += data.isNewCustomer ? 20 : 0;
return Math.round(score);
}
// 結果を個別のアイテムとして返す
const results = [];
Object.entries(categorizedData).forEach(() => {
items.forEach(item => {
results.push({
json: {
...item,
category: category
}
});
});
});
return results;
3. エラーハンドリングとリトライ処理
外部APIとの通信では、エラー処理が不可欠です。以下は、リトライ機能を含む堅牢なエラーハンドリングの例です:
// APIコールのリトライ処理とエラーハンドリング
const maxRetries = 3;
const retryDelay = 1000; // 1秒
async function callAPIWithRetry(url, options = {}) {
let lastError;
for (let attempt = 1; attempt = maxRetries; attempt++) {
try {
const response = await fetch(url, {
...options,
headers: {
'Content-Type': 'application/json',
...options.headers
}
});
if (!response.ok) {
throw new Error(`API returned ${response.status}: ${response.statusText}`);
}
return await response.json();
} catch (error) {
lastError = error;
console.log(`Attempt ${attempt} failed: ${error.message}`);
if (attempt maxRetries) {
// 指数バックオフを実装(待機時間を徐々に増やす)
const waitTime = retryDelay * Math.pow(2, attempt - 1);
await new Promise(resolve => setTimeout(resolve, waitTime));
}
}
}
// すべてのリトライが失敗した場合
throw new Error(`API call failed after ${maxRetries} attempts: ${lastError.message}`);
}
// 使用例
try {
const apiData = await callAPIWithRetry('https://api.example.com/data', {
method: 'POST',
body: JSON.stringify({ key: 'value' })
});
return [{
json: {
success: true,
data: apiData
}
}];
} catch (error) {
return [{
json: {
success: false,
error: error.message,
timestamp: new Date().toISOString()
}
}];
}
4. データの集計と分析
大量のデータを効率的に集計する処理の例です:
// 売上データの高度な集計処理
const items = $input.all();
const salesData = items.map(item => item.json);
// 日付別、カテゴリ別の集計
const aggregatedData = salesData.reduce((acc, sale) => {
const date = new Date(sale.date).toLocaleDateString('ja-JP');
const category = sale.category;
if (!acc[date]) {
acc[date] = {};
}
if (!acc[date]) {
acc[date] = {
count: 0,
totalAmount: 0,
items: []
};
}
acc[date].count++;
acc[date].totalAmount += sale.amount;
acc[date].items.push(sale.itemName);
return acc;
}, {});
// 結果を見やすい形式に変換
const formattedResults = [];
Object.entries(aggregatedData).forEach(([date, categories]) => {
Object.entries(categories).forEach(() => {
formattedResults.push({
json: {
date: date,
category: category,
salesCount: data.count,
totalRevenue: data.totalAmount,
averageOrderValue: Math.round(data.totalAmount / data.count * 100) / 100,
topItems: [...new Set(data.items)].slice(0, 5) // 上位5商品
}
});
});
});
return formattedResults;
これらのサンプルコードは、実際の業務で遭遇する様々なシナリオに対応しています。n8n完全ガイド記事では、n8nの基本的な使い方から始めて、このような高度な活用方法まで段階的に学ぶことができます。
Codeノードと他のアプローチの比較:いつ使うべきか?
n8nでは、同じ目的を達成するために複数のアプローチが存在します。Codeノードを使うべきタイミングを正しく判断することが、効率的なワークフロー構築の鍵となります。
Codeノードを使うべきケース
- 複雑なデータ変換が必要な場合:既存のノードの組み合わせでは10個以上のノードが必要になるような処理
- パフォーマンスが重要な場合:大量のデータを処理する際、Codeノードなら1回の処理で完了できる
- カスタムロジックの実装:独自のビジネスルールや計算式を適用する必要がある場合
- 外部ライブラリの活用:特殊な処理のためにnpmパッケージを使いたい場合
既存ノードを使うべきケース
- 標準的な処理の場合:HTTPリクエスト、データベース操作など、専用ノードが用意されている処理
- メンテナンス性を重視する場合:チームメンバーがJavaScriptに不慣れな環境
- 視覚的な理解が重要な場合:ワークフローの流れを一目で把握したい場合
私の経験では、まず既存ノードで実装を試み、処理が複雑になりすぎたり、パフォーマンスの問題が発生した場合にCodeノードへの移行を検討するアプローチが効果的です。
次のステップ:Codeノードマスターへの道
本記事で紹介したサンプルコードは、n8nのCodeノードが持つ可能性のほんの一部に過ぎません。これらのコードをベースに、自分の業務に合わせてカスタマイズしていくことで、より高度な自動化を実現できます。
まずは、紹介したコードの中から自分の業務に最も近いものを選び、実際のワークフローに組み込んでみてください。動作を確認しながら、少しずつ修正を加えていくことで、JavaScriptの理解も自然と深まっていきます。
さらに学習を進めたい方は、以下のリソースを活用することをおすすめします:
- n8n公式ドキュメントのCodeノードセクション
- JavaScriptの基礎を学べるMDN Web Docs
- n8nコミュニティフォーラムでの実践例の共有
n8nの真の力を引き出すために、今すぐn8nを始めて、Codeノードを活用した高度な自動化にチャレンジしてみませんか?きっと、これまで想像もしなかった業務効率化の可能性が広がることでしょう。