【実体験】n8nのJSONで動的変数が入らなくて2時間ハマった話【解決済み】

やらかしました。2時間、完全に詰まりました。

どうも、トモキです。26歳、アパレル会社員で、AI副業にチャレンジ中のやつです。

今日はね、本当に恥ずかしい失敗談を正直に書こうと思います。
n8nでワークフロー作ってたんですけど、JSONの中に動的変数が全然入らなくて、まるまる2時間溶かしました。

同じところで詰まってる人、絶対いると思うんですよ。だから記事にしておきます。

そもそも何を作ろうとしてたか

n8nっていうのは、ノーコードで自動化ワークフローが作れるツールです。ZapierとかMakeみたいなやつのオープンソース版ですね。無料で使えるし、カスタマイズ性が高いので最近副業界隈でめちゃくちゃ話題になってます。

ぼくはこれを使って、「特定のフォームに入力があったら、その内容をSlackに自動通知する」みたいなシンプルなワークフローを作ろうとしてたんです。

フォームからデータを受け取って、HTTP RequestノードでAPIを叩いて、JSONのbodyの中に変数を埋め込む。理論上は簡単なはずでした。

理論上は、ね。

何が起きたか:変数が「文字列」のまま送られる謎

HTTPリクエストのBodyにこんな感じで書いたんですよ。

{
  "message": "{{$json.name}}さんからメッセージが届きました"
}

これで前のノードから受け取った名前が入るはずだったんですけど、実際に送られたのは「{{$json.name}}さんからメッセージが届きました」という文字列そのまま。

え???

変数展開されてないじゃん。プレースホルダーがそのまま送られてるじゃん。意味ないじゃん。

ここから2時間の地獄が始まりました。

試したこと(全部ハズレ)

最初は「書き方が間違ってるのかな」と思って、いろいろ試しました。

  • 波括弧の数を変えてみた({{}} → {})
  • $jsonの書き方を変えてみた
  • ノードを繋ぎ直してみた
  • ワークフローを一から作り直してみた
  • ブラウザのキャッシュを消してみた(もはや関係ない)

全部ハズレ。何やっても固定テキストのまま。

YouTubeで「n8n JSON 変数 エラー」とか「n8n expression 入らない」とか検索しまくったんですけど、ドンピシャな動画が見つからなくて。英語のフォーラムとか見ても、ぼくの状況と微妙に違って。

正直、「ぼくにはn8n向いてないのかな」って思いかけました。泣きそうでした(ほぼ泣いてた)。

Claude先生に泣きついた

もう自力では無理だと判断して、Claude(AnthropicのAI)に状況を全部説明して聞いてみました。

「n8nのHTTP RequestノードでJSONのBodyに変数を入れたいんですけど、固定テキストになってしまいます。{{$json.name}}って書いても展開されません」って。

そしたらClaudeが即答したんですよ。

「BodyのタイプがJSON (Raw)になっていて、かつExpressionモードがオフになっていませんか?」

…………あ。

原因:Expressionモードの切り替えを知らなかった

これが今回のオチです。n8nには入力フィールドに「Expressionモード」と「固定値モード」の切り替えがあるんですよ。

フィールドの右側に小さいアイコンがあって、そこをクリックすることでモードを切り替えられる。Expressionモードにすると変数や式が使える。固定値モードだと文字列としてそのまま送られる。

ぼくはずっと固定値モードのまま変数を書いてたんです。だから何をやっても展開されるわけがなかった。

Claudeに言われてよく画面を見たら、確かにあった。小さいアイコン。全然気づいてなかった……。

Expressionモードに切り替えた瞬間、入力欄の見た目が変わって、変数がちゃんとハイライトされて。テスト実行したら、バッチリ動的な値が入ってきました。

2時間の問題が、30秒で解決しました。

笑えない。笑えるけど笑えない。

解決策まとめ:同じミスをしないために

同じところでハマってる人のために、手順をまとめておきます。

手順1:該当フィールドを確認する

変数を入れたいフィールド(今回はJSON Bodyの中)の右端を見てください。小さいアイコン(稲妻マークみたいなやつ)があるはずです。

手順2:Expressionモードに切り替える

そのアイコンをクリックして「Expression」モードに切り替えます。入力欄の背景色や見た目が変わればOKです。

手順3:変数を入力する

Expressionモードになったら、{{ $json.フィールド名 }}の形式で変数を書きます。入力補完も出てくるので、それを使うと楽です。

手順4:テスト実行で確認

「Test step」ボタンで実行して、OutputにExpected通りの値が入っているか確認してください。

これだけです。シンプルだけど、知らないとマジでハマります。

今回の教訓

正直に言うと、今回の失敗から学んだことがあります。

UIのモード切り替えはちゃんと確認しよう。

n8nに限らず、ノーコードツールってUIに色んな機能が詰め込まれてて、小さいアイコンに重要な設定が隠れてたりするんですよね。「なんか変な挙動だな」と思ったら、まずUIの隅々まで確認するのが大事だなと思いました。

あと、詰まったらAIに聞くのは全然アリだということ。今回もClaudeに聞かなかったら、もっと時間かかってたと思います。エラーメッセージとか状況を丁寧に説明すると、かなり的確に答えてくれます。

「AIに頼るのはダサい」みたいな変なプライドは捨てて、使えるものはどんどん使っていくスタイルでいこうと思います。副業で稼ぐためには、時間効率が大事ですからね。

最後に

n8nを使ってて「JSONに変数が入らない」「Expressionが機能しない」という状況になったら、まずExpressionモードの切り替えを確認してみてください。意外とこれで解決することが多いはずです。

2時間ハマったぼくが言うんだから、説得力あるはず(笑)。

これからもn8nを使ったワークフロー自動化の記事を書いていくので、よかったらまた見に来てください。同じように副業チャレンジ中の人、一緒に頑張りましょう!

それではまた。トモキでした。

コメント

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