n8nでデータが消える原因|returnで上書きしてしまう問題

AI自動化

n8nでワークフローを組んでいると、

・前のノードのデータが消える
・次のノードでundefinedになる
・保存用IDが消えている

といった問題にぶつかることがあります。

特にJavaScriptノード(Codeノード)を使い始めた頃にかなりハマりやすいです。

実際、自分もこれが原因で、

・重複判定が壊れる
・保存処理が動かない
・同じ投稿が繰り返される

といった問題が発生しました。

この記事では、n8nでデータが消える原因と対処法を、実体験ベースで整理します。


よくある症状

まず、よくあるのがこの状態です。

・前のノードでは値がある
・次のノードでundefinedになる
・途中からsource_tweet_idが消える
・media_keyがなくなる

一見するとn8nのバグっぽく見えますが、原因はかなりシンプルです。


原因は「returnの上書き」

一番多い原因はこれです。

return {
  json: {
    text: "生成した文章"
  }
}

一見問題なさそうに見えますが、これをやると、

それまでのデータが全部消えます。


なぜデータが消えるのか

n8nでは、各ノードがjsonデータを受け渡しながら動いています。

例えば前のノードで、

{
  "source_tweet_id": "12345",
  "media_key": "abcde"
}

というデータを持っていたとします。

しかし次のノードで、

return {
  json: {
    text: "生成した文章"
  }
}

としてしまうと、

{
  "text": "生成した文章"
}

だけに置き換わります。

つまり、

  • source_tweet_id
  • media_key

などが全部消えます。


実際に起きた問題

自分の場合、これが原因で、

・重複判定用IDが消える
・PostgreSQL保存が壊れる
・既出除外が効かなくなる

という問題が発生しました。

結果として、

同じ投稿が何度も投稿される状態になっていました。

かなり危険です。


正しい書き方

これを防ぐには、既存データを残しながら追加します。

return {
  json: {
    ...$json,
    text: "生成した文章"
  }
}

これで、

  • 元のデータ
  • 新しく追加するデータ

を両方保持できます。


…$json は何をしているのか

...$json

これは、「今までのデータを全部コピーする」という意味です。

つまり、

{
  "source_tweet_id": "12345",
  "media_key": "abcde"
}

を残したまま、

{
  "source_tweet_id": "12345",
  "media_key": "abcde",
  "text": "生成した文章"
}

のように追加できます。


undefinedになるときの確認ポイント

もしundefinedになる場合は、まずここを確認してください。


① 前のノードに値があるか

n8nは前のノードの出力を受け渡しています。

つまり、前のノードで既に消えている場合もあります。


② returnで上書きしていないか

これが一番多いです。

return {
  json: {
    text: "test"
  }
}

になっていないか確認してください。


③ ノード出力を確認する

n8nは各ノードの出力を確認できます。

どのタイミングで値が消えたかを見ると、原因がかなり見つけやすいです。


対処のコツ

迷ったら、まずこれです。

...$json

基本的に、

追加する
上書きしない

という意識で組むと壊れにくくなります。


まとめ

n8nでデータが消える原因は、ほとんどがこれです。

returnでjsonを上書きしている

特にCodeノードを使い始めた頃はかなりハマります。

重要なのは、

新しいデータを作る」のではなく
既存データを残しながら追加する

という考え方です。

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