n8nを使っていると、よく出てくるのが「Expression」という言葉です。
最初に見ると、
- 「なんかコードみたいで難しそう」
- 「{{ }}って何?」
- 「どこからこの文字が出てきたの?」
と感じるかもしれません。
でも、Expressionの役割はかなりシンプルです。
ひとことで言うと、
「前のノードにあるデータを、次のノードで使うための指定」
です。
たとえば、
- Googleスプレッドシートから記事本文を取得
- OpenAIへ記事本文を渡す
- AIでタイトルを作る
という自動化を作る場合、OpenAIノードへ「どの記事本文を使うのか」を教える必要があります。
そのときに使うのがExpressionです。
この記事では、n8nのExpressionとは何か、基本的な書き方や使い方、初心者がつまずきやすいポイントまでやさしく解説します。
n8nのExpressionとは?
Expressionは、n8nの中にあるデータを別の場所で使うための仕組みです。
たとえばGoogle Sheetsノードから、
- タイトル
- カテゴリ
- 完成本文
というデータを取得したとします。
次のOpenAIノードで「完成本文」を使いたい場合、その値をExpressionで指定します。
イメージとしては、
- Google Sheetsノード
- 完成本文を取り出す
- OpenAIノードへ渡す
という流れです。
つまりExpressionは、
「このデータをここで使ってください」
とn8nへ伝えるためのものです。
なぜExpressionが必要なの?
毎回同じ文章を使うだけなら、普通に文字を入力すれば問題ありません。
たとえば、
以下の文章を要約してください。
という部分は固定できます。
しかし、その下に入れる記事本文は毎回違います。
1記事目と2記事目では文章が違うからです。
そこで、
固定の文章
+
Expressionで取得した記事本文
を組み合わせます。
すると、スプレッドシートの内容が変わっても、自動でその行の文章をAIへ渡せます。
これがExpressionを使う大きな理由です。
一番基本的なExpression
n8nでは、現在のデータを使うときに次のような形をよく使います。
{{ $json["完成本文"] }}
難しく見えるかもしれませんが、意味はシンプルです。
「今受け取っているデータの中から、完成本文という項目を取り出す」
という意味です。
たとえば現在のデータが、
- 完成本文:n8nは自動化ツールです
- カテゴリ:n8n
- タイトル:n8nとは?
となっていた場合、
{{ $json["完成本文"] }}
と指定すると、
n8nは自動化ツールです
という部分だけを取り出せます。
$jsonとは?
Expressionでよく出てくるのが「$json」です。
これも難しく考える必要はありません。
$jsonは、
「今このノードに入ってきているデータ」
くらいの意味で考えるとわかりやすいです。
つまり、
{{ $json["タイトル"] }}
なら、
「今のデータからタイトルを取り出す」
という意味です。
同じように、
{{ $json["カテゴリ"] }}
ならカテゴリを取り出します。
Expressionは自分で全部書かなくてもいい
初心者にとってうれしいのは、Expressionをすべて手入力する必要がないことです。
n8nでは、前のノードのOUTPUTに表示されている項目をドラッグして入力欄へ入れることができます。
たとえば、
- Google SheetsノードのOUTPUT
- 完成本文
- OpenAIノードのPromptへドラッグ
という操作をすると、n8nがExpressionを作ってくれます。
そのため最初のうちは、
「Expressionを暗記する」
より、
「前のノードのデータを次へ渡す機能」
と理解する方が大切です。
FixedとExpressionの違い
n8nの入力欄では、
Fixed
Expression
という表示を見ることがあります。
Fixedは、毎回同じ値を使う設定です。
たとえば、
記事を要約してください
という文章を直接入力する場合はFixedです。
一方Expressionは、ワークフローのデータによって値が変わります。
たとえば、
{{ $json["完成本文"] }}
なら、処理する行によって内容が変わります。
簡単に分けると、
Fixed
=毎回同じ値
Expression
=データによって変わる値
固定文とExpressionを一緒に使う
Expressionは、固定の文章と組み合わせて使うこともできます。
たとえばOpenAIへ、
以下の記事本文を読み、初心者向けのタイトルを1つ作ってください。
記事本文:
{{ $json["完成本文"] }}
というPromptを送ります。
上の説明部分は毎回同じです。
しかし「完成本文」はスプレッドシートの行によって変わります。
これによって、複数の記事を順番にAIへ処理させることができます。
別のノードから直接データを取る方法
ワークフローが少し大きくなると、「直前のノードではなく、もっと前のノードにあるデータを使いたい」という場面があります。
その場合は、ノード名を指定して取得できます。
たとえば「自動入稿記事取得」というノードから完成本文を取りたい場合は、次のようなExpressionを使えます。
{{ $('自動入稿記事取得').first().json['完成本文'] }}
意味は、
「自動入稿記事取得というノードの最初のデータから、完成本文を取り出す」
です。
少し長くなりますが、n8nではよく使います。
特に、
- Google Sheets
- AI処理
- HTML変換
- 画像生成
- WordPress
のようにノードが増えると、前の方にあるデータをもう一度使いたくなることがあります。
そのときに便利です。
ノード名をわかりやすくしておく
別ノードのデータをExpressionで参照する場合、ノード名がそのまま式の中に入ります。
そのため、
- Google Sheets1
- Google Sheets2
- Edit Fields1
のような名前のままだと、あとから見たときにわかりにくくなります。
おすすめは、
- 自動入稿記事取得
- 記事メタ生成
- 記事メタ解析
- 本文HTML整形
- WP下書き作成
のように、何をしているノードなのかわかる名前へ変更することです。
ワークフローが大きくなるほど、この差が効いてきます。
GoogleスプレッドシートでのExpression例
たとえばGoogleスプレッドシートに、
- テーマ
- カテゴリ
- メインKW
- タイトル
- 完成本文
という列があるとします。
完成本文を取得するなら、
{{ $json["完成本文"] }}
タイトルなら、
{{ $json["タイトル"] }}
カテゴリなら、
{{ $json["カテゴリ"] }}
という形で使えます。
このように列名とExpressionを対応させると理解しやすくなります。
AIが作ったデータを使う場合
OpenAIなどでAIにデータを作らせ、その結果を次のノードへ渡すこともできます。
たとえばAIに、
- テーマ
- カテゴリ
- メインKW
- タイトル
をJSON形式で出してもらいます。
JSONとは、データを項目ごとに整理した形式です。
たとえば、
{
"テーマ": "n8nとGoogleスプレッドシート連携",
"カテゴリ": "n8n",
"メインKW": "n8n Googleスプレッドシート",
"タイトル": "n8nとGoogleスプレッドシートを連携する方法"
}
のような形です。
このデータをn8nで分解すれば、
- テーマだけ
- カテゴリだけ
- タイトルだけ
というように別々に使えるようになります。
ExpressionとJSONは、AI自動化ではよく一緒に使います。
Expressionでよくあるエラー
項目名が間違っている
たとえばGoogleスプレッドシートの列名が、
完成本文
なのに、
{{ $json["記事本文"] }}
と書いていると、データを取得できません。
n8nでは項目名が一致していることが重要です。
エラーが起きたら、前のノードのOUTPUTを確認しましょう。
データが空になっている
Expression自体が正しくても、前のノードにデータがなければ何も取得できません。
たとえば、
- Google Sheets
- OpenAI
という流れでOpenAIに文章が届かない場合は、まずGoogle SheetsノードのOUTPUTを確認します。
完成本文が入っていなければ、ExpressionではなくGoogle Sheets側の設定が原因かもしれません。
ノード名を変更した
別ノードを直接参照している場合、ノード名の変更によって式を確認する必要が出ることがあります。
そのため、ノード名はワークフローを作る早い段階で整理しておくと管理しやすくなります。
Expressionがおかしいときはプレビューを見る
n8nではExpressionを入力すると、実際にどんな値になるのか確認できることがあります。
たとえば、
{{ $json["完成本文"] }}
と入力した下に、
n8nを使うとGoogleスプレッドシートから……
のような実際の文章が表示されれば、正しくデータを取得できています。
逆に、
- undefined
- 空欄
- エラー
などになっている場合は、参照先を確認します。
Expressionを書いたら、実行する前にプレビューを見るクセをつけるとミスを減らせます。
初心者はExpressionを暗記しなくていい
Expressionを見ると、
「全部覚えないとn8nを使えないのでは?」
と思うかもしれません。
でも、その必要はありません。
最初に覚えるのは、
{{ $json["項目名"] }}
くらいでも十分です。
そして、
「別ノードから取りたい」
「日付を入れたい」
「条件によって値を変えたい」
など必要になったときに、その書き方を調べれば大丈夫です。
n8nではExpressionを入力欄から作ったり、データをドラッグしたりできるため、丸暗記するより仕組みを理解する方が重要です。
Expressionを理解すると自動化が一気に広がる
Expressionがわかると、n8nでできることが一気に増えます。
たとえば、
- Google Sheetsから本文取得
- 本文をOpenAIへ渡す
- AIがタイトル作成
- タイトルをWordPressへ渡す
- WordPressの投稿IDをGoogle Sheetsへ戻す
という流れです。
それぞれのノードで必要なデータをExpressionで渡していきます。
つまりn8nの自動化では、
「どのデータを、どこへ渡すのか」
をExpressionでつないでいるとも言えます。
AI副業や自動化代行でも重要
将来n8nを使って自動化代行などをする場合、Expressionの理解はかなり重要です。
実際の業務では、
- 顧客名
- メールアドレス
- 問い合わせ内容
- 商品名
- 記事本文
- ステータス
など、毎回違うデータを扱うからです。
そのデータを、
- Google Sheets
- OpenAI
- Gmail
- WordPress
などへ渡していきます。
Expressionを理解すると、「サービスをつなぐ」だけではなく、「必要なデータを正しい場所へ送る」ことができるようになります。
まず覚えたいExpressionは2つ
初心者なら、まずこの2パターンを理解すれば十分です。
現在のデータから取得する場合
{{ $json["完成本文"] }}
別のノードから取得する場合
{{ $('自動入稿記事取得').first().json['完成本文'] }}
この2つを使えるだけでも、多くの基本的なワークフローを作れます。
あとは実際にn8nを触りながら、必要なExpressionを少しずつ増やしていけばOKです。
まとめ
n8nのExpressionとは、ワークフロー内にあるデータを別の場所で使うための仕組みです。
難しいコードのように見えますが、基本的な考え方は、
「前のノードにあるデータを、次のノードへ渡す」
だけです。
まずは、
{{ $json["完成本文"] }}
のような形から覚えてみましょう。
そして、
- Google Sheets
- OpenAI
- WordPress
のような小さな自動化で、実際にデータが流れる様子を確認してみるのがおすすめです。
Expressionを理解できるようになると、n8nは単にノードを並べるツールではなく、自分の好きなようにデータを動かせる自動化ツールとして使えるようになります。