初心者向け

n8n Edit Fields(Set)ノードの使い方:既定のままだと元のデータが消える

n8nで最もよく使うEdit Fields(Set)ノードの使い方を、実際に動かして確認した結果とあわせて解説します。既定では元の項目が引き継がれない点と、フィールド名のドットが入れ子になる点に注意が必要です。

動作確認: — n8n 2.36.8 / Edit Fields (Set) ノード v3.5

データの項目を作ったり、名前を変えたり、値を計算して入れたりするのが Edit Fields(Set)ノードです。n8n で最もよく使うノードのひとつで、 これまでの記事でも何度か登場しています。

この記事は前半がn8n を触ったことがない人向けで、項目を1つ作るところまでを通します。 後半は基本操作ができる人向けに、既定のままだと元のデータが消えるという 重要な挙動と、フィールド名の扱いを扱います。

内容は n8n 2.36.8 / Edit Fields ノード v3.5 で実際に動かして確認しています。

Edit Fields は何をするものか

前のノードから来たデータに、項目を足したり書き換えたりするノードです。

できることは大きく3つあります。

  • 新しい項目を作る(greeting に こんにちは を入れる、など)
  • 既存の項目を書き換える(同じ名前を指定すると上書きされる)
  • 値を式で計算して入れる(他の項目を組み合わせる、日付を入れる、など)

コードを書かずに済むので、単純な整形なら Code ノードより読みやすいです。 キャンバスを見ただけで何をしているか分かります。

実際に項目を追加してみる

手順

  1. Edit Fields ノードを追加する
  2. Mode は Manual Mapping(既定)のまま
  3. Fields to Set で項目を1つ追加する
    • 名前に greeting
    • 型は String
    • 値に こんにちは
  4. Execute step を押す

値に式を使いたい場合は、IFノードの記事と同じく 入力欄を Expression モードに切り替えます(fx が付いて緑色になる)。

型について

各項目には型を指定します。String / Number / Boolean / Array / Object があり、 型が合わないと変換エラーになります。

APIから来た値は、見た目が数字でも文字列であることが多いので、 Number を指定するときは注意してください。

既定では、元の項目が消える

このノードで最も事故につながる挙動です。

Include Other Input Fields という設定があり、既定はオフです。 オフのままだと、出力されるのは設定した項目だけになります。 前のノードから来たデータは引き継がれません。

入力idnameextraEdit Fieldsgreeting を設定既定のままgreeting元の3項目は消えるInclude Other Input Fields をオンidnameextragreeting
既定では、設定した項目だけが出力される。元のデータは引き継がれない。

実際に確認した結果

次のデータを入力して、greeting だけを設定しました。

{ "id": 1, "name": "もとの名前", "extra": "消えるか確認したい値" }

出力はこうなりました。

{ "greeting": "こんにちは", "user": { "name": "太郎" } }

id も name も extra も、すべて消えました。 エラーにはなりません。後続のノードで「なぜかデータが無い」という形で気づくことになります。

Include Other Input Fields をオンにして同じことをすると、こうなります。

{ "id": 1, "name": "もとの名前", "extra": "消えるか確認したい値",
  "greeting": "こんにちは" }

元の項目が残り、そこに greeting が足された形です。

どちらを使うべきか

「元のデータは不要」と確信できる場合以外は、オンにしてください。

必要な項目だけに絞りたい場合でも、オンにした上で Include を Selected にして残す項目を選ぶ方が安全です。 「うっかり消える」のと「明示的に絞る」のは別物です。

フィールド名にドットを使うと入れ子になる

もう1つ、気づきにくい挙動があります。

Support Dot Notation という設定があり、既定は有効です。 有効だと、フィールド名の . が階層の区切りとして解釈されます。

実際に user.name という名前で 太郎 を設定したところ、出力はこうなりました。

{ "user": { "name": "太郎" } }

user.name というキーではなく、user の中の name という入れ子になっています。

APIによっては、キー名そのものに . が含まれることがあります (data.value のような名前)。そのまま扱いたい場合は、 Options から Support Dot Notation をオフにしてください。

オフにして同じことをすると、こうなります。

{ "user.name": "太郎" }

もう1つのモード:JSON

Mode には Manual Mapping のほかに JSON があります。

項目を1つずつ追加するのではなく、出力したいJSONを丸ごと書く方式です。 項目数が多いときや、構造ごと組み替えたいときはこちらが速く書けます。

ただし画面上で項目が一覧にならないので、他の人が読むときの分かりやすさは Manual Mapping の方が上です。

Code ノードとの使い分け

どちらでも同じことができる場面が多いので、基準を決めておくと迷いません。

Edit Fields が向いている

  • 項目の追加・書き換え・名前の変更
  • 固定値や、式で書ける程度の計算
  • キャンバスを見ただけで何をしているか分かってほしい場合

Code が向いている

  • 件数そのものを変える(展開する、絞る、まとめる)
  • ループや条件分岐を含む複雑な処理
  • 入れ子の配列を扱う

うまくいかないときの切り分け

  1. 後続で項目が見つからない — Include Other Input Fields がオフのままではないか
  2. 意図しない入れ子ができた — フィールド名に . が入っていないか
  3. 値が反映されない — 式が Expression モードになっているか(fx と緑色)
  4. 型エラー — 文字列の "100" を Number で入れようとしていないか
  5. 上書きされた — 既存の項目と同じ名前を指定していないか

次に読む

次に読む