初心者向け
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 ノードより読みやすいです。 キャンバスを見ただけで何をしているか分かります。
実際に項目を追加してみる
手順
- Edit Fields ノードを追加する
- Mode は
Manual Mapping(既定)のまま - Fields to Set で項目を1つ追加する
- 名前に
greeting - 型は
String - 値に
こんにちは
- 名前に
- Execute step を押す
値に式を使いたい場合は、IFノードの記事と同じく
入力欄を Expression モードに切り替えます(fx が付いて緑色になる)。
型について
各項目には型を指定します。String / Number / Boolean / Array / Object があり、
型が合わないと変換エラーになります。
APIから来た値は、見た目が数字でも文字列であることが多いので、
Number を指定するときは注意してください。
既定では、元の項目が消える
このノードで最も事故につながる挙動です。
Include Other Input Fields という設定があり、既定はオフです。 オフのままだと、出力されるのは設定した項目だけになります。 前のノードから来たデータは引き継がれません。
実際に確認した結果
次のデータを入力して、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 が向いている
- 件数そのものを変える(展開する、絞る、まとめる)
- ループや条件分岐を含む複雑な処理
- 入れ子の配列を扱う
うまくいかないときの切り分け
- 後続で項目が見つからない — Include Other Input Fields がオフのままではないか
- 意図しない入れ子ができた — フィールド名に
.が入っていないか - 値が反映されない — 式が Expression モードになっているか(
fxと緑色) - 型エラー — 文字列の
"100"を Number で入れようとしていないか - 上書きされた — 既存の項目と同じ名前を指定していないか
次に読む
- n8n Codeノードの使い方 — Edit Fields では書けない加工をコードで
- n8n Mergeノードの使い方 — 2つのデータを突き合わせる
- n8n HTTP Requestノードの使い方 — 加工するデータを取ってくる
- コアノードの一覧 — ほかのよく使うノード