n8nのワークフローが止まった:本番運用で覚えたエラー対処の実践メモ

自動化・ノーコード

のワークフローが本番で止まっていることに気づいたのは、翌朝クライアントから「通知が来てないんだけど」と連絡が来たときだった。

夜中に止まって、朝まで誰にも気づかれなかった。当たり前だ。僕はError Triggerを設定していなかった。

この記事でわかること:

  • n8nのエラーが発生する典型パターン3つ
  • 実際に踏んだエラーとそのとき何をやったか
  • Error Triggerを設定していなかった失敗と、再発防止のための設定
n8n error handling workflow
Photo by Patrick Martin on Unsplash

n8nのワークフローが止まったとき、まず何を確認するか

まず落ち着いて、n8nの管理画面を開く。

左のメニューから「Executions」を選ぶと、過去の実行履歴が一覧で出てくる。緑色がSuccess、赤色がError。赤いのが並んでいたら、そこにヒントがある。

実行ログをどこで見るか

エラーになった実行をクリックすると、ノードごとの処理結果が見える。どのノードで止まったか、そのとき何のデータが来ていたか、エラーメッセージは何か。この3つを確認するのが最初の一歩だ。

エラーメッセージは英語で出ることが多い。最初は「何が書いてあるか全然わからない」と感じるかもしれない。わかる。僕もそうだった。ただ、メッセージをそのままコピーして検索すると大抵は答えが見つかる。n8nの基本的なエラーハンドリングについてはこまろぐの解説記事が参考になる。

エラーの種類をざっくり3分類する

本番で実際に出たエラーを振り返ると、だいたい3パターンに分類できる。

一時的なエラー(時間を置けば解決することが多い)

  • 外部APIの一時的なダウン
  • レート制限(APIを呼びすぎてブロックされる)
  • タイムアウト(応答が遅くて制限時間切れ)

データ起因のエラー(設計を修正しないと繰り返す)

  • 想定外のデータ形式(nullが来たり空文字が来たり)
  • 必須フィールドの欠損
  • 型の不一致(数値を期待しているのに文字列が来る)

認証・接続エラー(設定の問題)

  • アクセストークンの期限切れ
  • APIキーの無効化
  • 接続情報の変更

この分類を頭に入れておくと、エラーメッセージを見たときにどの方向で対処するかが判断しやすくなる。


実際に踏んだエラーと、そのとき何をやったか

3ヶ月の本番運用で止まったのは4回。そのうち2回がAPIタイムアウト、1回がデータ型の不一致、1回が認証トークン切れだった。

APIのタイムアウト(もっとも多かった)

外部APIを呼び出すノードで、応答が30秒以上かかってタイムアウトになるケースが一番多かった。特に夜間バッチで複数のAPIを連続して呼び出すワークフローで発生しやすかった。

対処として、まずリトライ設定を入れた。HTTPリクエストノードの「On Error」設定を開いて、リトライ回数を3回、間隔を30秒に設定した。これだけで、同じエラーが翌週から出なくなった。

ただ、一時的なAPIダウンが重なると3回リトライしても失敗する。そういうケースは今でも手動確認が必要だ。

データ型の不一致でノードが止まる

Googleスプレッドシートからデータを取ってきて、次のノードで処理しようとしたとき「typeError: Cannot read properties of undefined」というエラーが出た。

原因は、スプレッドシートの特定の行が空だったこと。ワークフローは「データが必ずある」という前提で組んでいたが、本番データにはたまに空行が混じっていた。

対処は、データを受け取るノードの直後にIF分岐を追加して「空の場合はスキップ」というルートを作った。テストデータだけで確認していたときには気づかなかったパターンで、正直悔しかった。

認証トークン切れ

Gmail APIのアクセストークンが切れて、ノードが認証エラーを返した。n8nのCredentialsを確認したら有効期限が来ていた。

対処はCredentialsを再設定するだけで解決した。ただ、「いつ切れるか」が事前にわからないのが問題だ。今は定期的にCredentialの有効期限を確認するルーティンを月1で入れている。n8nのCredential管理の詳細はAI導入ラボの記事でも解説されている。

n8n credentials workflow automation
Photo by Bernd Dittrich on Unsplash

Error Triggerを設定していなかった話

これが一番の失敗だった。

n8nにはError Triggerという仕組みがある。ワークフローがエラーになったとき、別のワークフローを自動で起動してくれる機能だ。そのワークフローの中でSlackやメールに通知を飛ばすことができる。

僕はこれを「いつか設定しよう」と思いながら、最初の4ヶ月間設定しなかった。

結果として何が起きたかというと、ワークフローが止まっていても誰にも気づかれない状態になっていた。n8nの管理画面を開かない限りエラーに気づかない。フリーランスで一人でやっていると、毎日管理画面を開くわけではない。

設定方法は難しくない。まず「エラー通知用のワークフロー」を別途作る。このワークフローのトリガーにError Triggerノードを使う。その後に、Slackなり何なりで通知を送るノードを繋ぐ。これだけだ。

次に、エラー通知を受け取りたいワークフローの設定画面を開いて、「Error Workflow」にさっき作ったワークフローを指定する。これで、そのワークフローがエラーになるたびにSlackに通知が来るようになる。

設定してから2ヶ月で、2回通知が来た。どちらも夜中に止まったケースで、Error Triggerがなければ翌朝まで気づかなかったと思う。


止まってから気づいた設計の甘さ3つ

本番で止まった経験を通じて、「最初からやっておけばよかった」と感じた設計のポイントが3つある。

1. テストデータが綺麗すぎた

開発時に使ったテストデータは、自分で作った綺麗なデータだった。空行なし、型も統一、null値もなし。でも本番データは違う。過去のデータには空行も型のブレもある。テスト段階から本番に近いデータを使うべきだった。

2. エラーハンドリングを後回しにした

「動くことを先に確認して、エラー対処は後から」という考えで組んだ。動くことは確認できたが、エラー対処が後回しのまま本番に投入した。最低限のリトライ設定とError Triggerは、動作確認と同時に入れるべきだった。

3. 実行頻度の設計が甘かった

5分ごとに実行するワークフローを組んだが、処理の一部に「前回の結果に依存する処理」が混じっていて、エラーが連鎖するケースがあった。実行間隔と依存関係の整理は、組んだ時点で考慮すべきだった。


再発防止のために今やっていること

今は以下の3点をルールにしている。

ワークフローを本番に投入する前に必ずやること:

  • Error Triggerの設定(どのワークフローにも必ず)
  • 重要なAPIリクエストノードへのリトライ設定(3回・30秒間隔)
  • 空値・null値が来たときの分岐追加

定期的にやること(月1):

  • 全ワークフローのCredential有効期限確認
  • Executionsのエラー一覧を確認して異常なパターンがないかチェック

これをやるようになってから、「止まっていることに気づかない」という状況はなくなった。ただ、完全にエラーゼロというわけではない。止まっても通知が来て、すぐ対処できる状態になった、という話だ。

n8n monitoring workflow
Photo by Luke Chesser on Unsplash

まとめ

n8nのワークフローが本番で止まる経験は、設定してすぐに始まるわけじゃない。最初の数日は問題なく動いて、安心した頃にエラーが出る。

一番やっておいてほしいのは、Error Triggerの設定だ。これだけでも「気づかないまま止まり続ける」という最悪のケースは防げる。

リトライ設定やデータ型のチェックは、その次の段階で整理していけばいい。最初から全部揃っている必要はない。ただ、Error Triggerだけは後回しにしない方が良い。僕みたいにクライアントから連絡が来てから気づく、という経験をしないために。


合わせて読みたい
n8nの使い方入門:インストールから最初のワークフロー作成まで図解
n8n AI Agentノードを自腹で試した:LLMと繋ぐだけで何ができて何ができないか正直に書く

コメント

タイトルとURLをコピーしました