中級向け

1件失敗しても止まらない取得ワークフロー(n8n テンプレート配布)

複数のAPIを順に叩いて、1件失敗しても残りを取りこぼさない型です。インポートできるJSONを置いています。認証不要の気象庁APIを使うので、入れてすぐ動きます。再試行を入れていない理由も実測つきで書きました。

動作確認: — n8n 2.36.8

複数の対象を順番にAPIで取りに行く、という処理はよく書きます。 このとき既定のままだと、1件失敗しただけで全部止まり、成功していた分の結果も消えます。 前の記事で実際にそうなることを確かめました。

その対策を組み込んだ形を、そのままインポートできるJSONにしました。

jma-forecast-resilient.json をダウンロード

認証情報を1つも使いません。気象庁の公開APIを叩くだけなので、インポートして そのまま実行できます。 動作は n8n 2.36.8 で確認しています。

入れ方

  1. JSONをダウンロードする
  2. n8n の右上の ... から Import from File… を選ぶ
  3. Execute workflow を押す
インポート直後のn8nキャンバス。毎朝7時、取得する地域、予報を取得の3ノードが横に並び、予報を取得から Success と Error の2本の線が出て、それぞれ今日の天気だけ取り出す、失敗を1行にまとめるに繋がっている
インポート直後。「予報を取得」から Success と Error の2本が出ていれば成功です

読み込んだ時点で Success と Error の2本の線が出ていれば、正しく入っています。

何をしているか

ノードは5つです。

ノード 役割
毎朝7時 Schedule Trigger。毎日 7:00 に起動
取得する地域 Code。取りに行く対象を並べる
予報を取得 HTTP Request。エラー出力を有効にしてある
今日の天気だけ取り出す Code。成功した分を整形
失敗を1行にまとめる Code。失敗した分を記録用に整形

対象は「取得する地域」を書き換えるだけで変えられます。

return [
  { json: { label: '東京', areaCode: '130000' } },
  { json: { label: '大阪', areaCode: '270000' } },
  { json: { label: '福岡', areaCode: '400000' } },
];

areaCode は気象庁のエリアコードです。失敗する側を試したいときは、どれか1件を '999999' にしてください。 404 になります。

3リクエストが6アイテムになる

実行すると、線の上に流れたアイテム数が出ます。ここを見てください。

実行後のn8nキャンバス。毎朝7時から1 item、取得する地域から3 items、予報を取得のSuccessから6 items、今日の天気だけ取り出すから3 itemsと表示されている。Error側の線は灰色で数字がない
3リクエストなのに Success 側は 6 items。そこから3件に絞り込んでいます
  • 取得する地域 → 予報を取得: 3 items(3地域)
  • 予報を取得 → 今日の天気だけ取り出す: 6 items
  • 今日の天気だけ取り出す → : 3 items

3件送ったのに6件返っています。 気象庁のレスポンスはトップレベルが2要素の配列で、 n8n は配列を受け取ると要素ごとにアイテムへ分けるためです (HTTP Request の記事に書いた挙動です)。

1件目が3日間の予報、2件目が週間予報です。週間予報の方には weathers が無いので、 「今日の天気だけ取り出す」で落としています。

const area = series[0].areas[0];
if (!area.weathers) continue;   // 週間予報を捨てる

この1行を書かないと、空っぽのアイテムが3件混ざります。 前にこれで 「4件のはずが7件出る」という間違いを記事に書きました。

失敗したときに何が起きるか

1地域を '999999' にして実行した結果です。

成功側には2件だけが流れ、エラー側にはこれが届きました。

{
  "label": "大阪",
  "areaCode": "999999",
  "httpCode": "404",
  "message": "The resource you are requesting could not be found",
  "failedAt": "2026-09-25T02:44:44.434Z"
}

ワークフロー全体の結果は success です。1件失敗しても止まらず、 東京と福岡の予報はちゃんと取れています。

ポイントは label と areaCode が残っていることです。エラー出力には元の入力が そのまま残った上にエラー情報が足されるので、どの対象で失敗したのかが分かります。 これは Continue では消えてしまう情報です。

再試行を入れていない理由

このテンプレートには Retry On Fail を入れていません。 意図的です。

最初は入れていました。Retry On Fail: true / Max. Tries: 3 にした状態で 実行時間を測ったところ、再試行の待ち時間がまったく発生していませんでした。

同じ404に対して On Error だけを変えて測った結果がこれです。

On Error ノードの実行時間 再試行
Stop Workflow 2,793ms された
Continue (using error output) 343ms未満 されない

エラー出力を使うと、Retry On Fail は発動しません。 設定欄は有効なままで、 警告も出ません。入れたままにすると「再試行しているつもりで、していない」ものを 配ることになるので、外しました。

一時的な失敗に強くしたいなら、この型は向きません。 Stop Workflow に戻して Retry On Fail を使うことになります。ただしその場合、1件失敗すると全部止まります。

この挙動の詳細は n8n でエラーが起きたとき、後続ノードには何が届くのか に書きました。

ここから先の繋ぎ方

このテンプレートは整形したところで止めてあります。 通知や保存は環境によって違うので、 入れていません。繋ぐならこうなります。

  • 成功側の後ろ → Slack、メール、Google Sheets など
  • 失敗側の後ろ → 同じく通知、またはログ用のシートに追記

失敗側は1行の平たいオブジェクトにしてあるので、Google Sheets の Append にそのまま渡せる形です。

ワークフロー全体が落ちたときの通知は、また別の仕組みです。 n8n のエラー通知は、手動実行では飛ばない を参照してください。

検証していないこと

  • Publish して定時実行させるところまでは試していません。 手動実行での確認だけです。 Schedule Trigger のタイムゾーンは環境の設定を引き継ぐので、7:00 がどの時刻になるかは 各自の環境で確認してください
  • 失敗のさせ方は 404(存在しないURL)1パターンです。タイムアウトや接続不能で 同じ形のエラーが出るかは見ていません
  • 通知・保存ノードは繋いでいないので、そこから先が動く保証はできません
  • 対象は3件で試しました。数十件・数百件に増やしたときの所要時間やレート制限は 確認していません

次に読む