✔️
概念 #n8n #ユースケース #バリデーション #Codeノード #入力検証 #エラーハンドリング #データ品質 📚 n8nワークフロー自動化

カスタムバリデーションロジックをCodeノードで実装する

Webhookで受信したデータに複雑なビジネスロジックのバリデーションをCodeノードで実装し、エラー詳細を返却して後続処理を制御するパターン。

ユースケース概要

Webhookで受け取ったデータに対して、必須項目チェック・型チェック・ビジネスロジック(有効期限・在庫確認等)のバリデーションをCodeノードで実装する。エラー時は詳細なエラーメッセージを返却する。

解決する課題: 組み込みノードの単純な条件チェックでは対応できない複雑なビジネスルールの検証をCodeで実装する

使用するn8nノード:

  • Webhook Trigger(データ受信)
  • Code(バリデーション実行)
  • IF(バリデーション結果で分岐)
  • Respond to Webhook(エラーレスポンス返却)
  • 後続処理ノード(バリデーション成功時)

ワークフロー構成

[Webhook Trigger: POST /orders]

[Code: バリデーション実行]

[IF: isValid == true]
  ├── true  → [後続ノード: 注文処理]
  └── false → [Respond to Webhook: 400エラーレスポンス]

実装手順

Step 1: バリデーションロジック(Codeノード)

const data = $json;
const errors = [];

// ===== 必須項目チェック =====
const required = ['customerId', 'items', 'shippingAddress'];
for (const field of required) {
  if (!data[field]) {
    errors.push({ field, message: `${field}は必須です` });
  }
}

// ===== 型チェック =====
if (data.items !== undefined) {
  if (!Array.isArray(data.items)) {
    errors.push({ field: 'items', message: 'itemsは配列である必要があります' });
  } else if (data.items.length === 0) {
    errors.push({ field: 'items', message: '注文は1件以上必要です' });
  } else {
    // 各itemの検証
    data.items.forEach((item, index) => {
      if (!item.productId) {
        errors.push({ field: `items[${index}].productId`, message: '商品IDは必須です' });
      }
      if (!Number.isInteger(item.quantity) || item.quantity < 1) {
        errors.push({ field: `items[${index}].quantity`, message: '数量は1以上の整数である必要があります' });
      }
    });
  }
}

// ===== ビジネスロジック =====
// 1注文あたりの上限金額チェック
if (data.totalAmount > 1000000) {
  errors.push({ field: 'totalAmount', message: '1注文の上限金額(100万円)を超えています' });
}

// 配送先の郵便番号形式チェック(日本形式: 000-0000)
if (data.shippingAddress?.postalCode) {
  const postalCodeRegex = /^\d{3}-\d{4}$/;
  if (!postalCodeRegex.test(data.shippingAddress.postalCode)) {
    errors.push({ field: 'shippingAddress.postalCode', message: '郵便番号の形式が不正です(例: 123-4567)' });
  }
}

return [{
  json: {
    ...data,
    isValid: errors.length === 0,
    validationErrors: errors,
  }
}];

Step 2: バリデーション結果の分岐(IFノード)

Condition: {{ $json.isValid }} equals true

Step 3: エラーレスポンスの返却

バリデーション失敗時はWebhookに400レスポンスを返す。

Node: Respond to Webhook
Response Code: 400
Response Body (JSON):
{
  "success": false,
  "message": "バリデーションエラーが発生しました",
  "errors": {{ JSON.stringify($json.validationErrors) }}
}

呼び出し元が受け取るレスポンス例:

{
  "success": false,
  "message": "バリデーションエラーが発生しました",
  "errors": [
    { "field": "items[0].quantity", "message": "数量は1以上の整数である必要があります" },
    { "field": "shippingAddress.postalCode", "message": "郵便番号の形式が不正です" }
  ]
}

Step 4: 成功時の後続処理

バリデーション成功時は $json.validationErrors フィールドを除いて後続ノードに渡す。

// Codeノードでバリデーション用フィールドを除去
const { isValid, validationErrors, ...cleanData } = $json;
return [{ json: cleanData }];

ポイント・注意事項

  • バリデーションエラーは全件収集してから返却する(最初のエラーだけでなく全エラーをまとめて返す)
  • Respond to WebhookノードはWebhook Triggerと対になる。必ずWebhook Triggerの Response Mode: When Last Node Finishes または Using Respond to Webhook Node を設定する
  • バリデーションルールは変更頻度が高い。コメントを充実させるか、ルールを外部設定(Googleシート等)から読み込む

関連機能

  1. 1. 🔄n8n概要 - ワークフロー自動化プラットフォーム
  2. 2. ⚙️n8nワークフローの基本(ノード・コネクション・実行)
  3. 3. n8nトリガーの種類(Webhook・スケジュール・イベント)
  4. 4. 🔀n8nロジック制御(フィルター・条件分岐・ループ・マージ)
  5. 5. 🌐n8n HTTP Request・API連携
  6. 6. 🔗n8n主要インテグレーション(Slack・Gmail・GitHub)
  7. 7. 🛡️n8nエラーハンドリング・デバッグ
  8. 8. 🤖n8n AI・LLMエージェント(Chain・Agent)
  9. 9. 💻n8n Codeノード・カスタム処理
  10. 10. 🏢n8nエンタープライズ機能(ソース管理・シークレット・チーム管理)
  11. 11. 🌤️毎朝SlackにAIで天気・ニュースを通知する
  12. 12. 📊GitHubのPRをGoogleシートに自動記録する
  13. 13. 📧新規ユーザー登録時にWelcomeメールを自動送信する
  14. 14. 💳StripeのWebhookで決済完了を検知して処理する
  15. 15. 📈スケジュールトリガーで週次レポートを自動生成する
  16. 16. 🎫Gmailトリガーでサポートメールを自動Notionチケット化する
  17. 17. 🎯条件分岐でリード属性に応じて担当者を振り分ける
  18. 18. 📨ループ処理でリストを走査し一括メール送信する
  19. 19. 📋複数APIのデータをマージして統合レポートを作成する
  20. 20. 🗄️外部REST APIからデータを取得してDBに保存する
  21. 21. 🔍GraphQL APIでGitHubのIssueを取得・加工する
  22. 22. 🔐Bearer認証付きAPIを呼び出してデータ同期する
  23. 23. SlackとNotionを連携したチームタスク管理フロー
  24. 24. 🤝GmailとHubSpotを連携したCRM自動化フロー
  25. 25. 🚀GitHubデプロイイベントをSlackに通知する
  26. 26. 🚨APIエラー発生時にSlackへアラートを送る
  27. 27. 🔁リトライ付きの堅牢なデータ同期フローを構築する
  28. 28. 📝エラーログをAirtableに自動記録する
  29. 29. 🤖LLMを使ったカスタマーサポート自動応答ボット
  30. 30. 🔎ドキュメントRAG検索システムを構築する
  31. 31. 📬AIでメール内容を自動分類・ルーティングする
  32. 32. 🔧JavaScriptで複雑なデータ変換処理を実装する
  33. 33. 📄npmライブラリを使ったPDF自動生成フロー
  34. 34. ✔️カスタムバリデーションロジックをCodeノードで実装する
  35. 35. 🗂️Gitでワークフローをバージョン管理する
  36. 36. 🌍環境変数で本番・ステージングを切り替える
  37. 37. 👥チームでのワークフロー共同管理フロー
  38. 38. 📋AIで履歴書を自動スクリーニング・スコアリングする
  39. 39. 🧾請求書PDFをOCRで自動データ入力・会計ソフト登録する
  40. 40. 📱ブログ記事→SNS自動投稿パイプラインを構築する
  41. 41. 📦Shopify注文処理を完全自動化する(在庫・配送・顧客通知)
  42. 42. 🔔予約リマインダーを自動送信してノーショーを削減する
  43. 43. 📊経営ダッシュボードを毎朝Slackに自動配信する
  44. 44. 🔭競合情報を自動収集してWeeklyレポートにまとめる
  45. 45. 🎉新入社員オンボーディングを完全自動化する

出典: https://docs.n8n.io/code/