このガイドでは、Node-REDのTemplateノードについて、初心者の方でも理解できるように詳しく説明します。
Templateノードは、テンプレート(ひな形)にデータを埋め込んでテキストを生成するノードです。 日常生活で例えると、年賀状の宛名印刷のようなものです。
📮 年賀状の宛名印刷に例えると:
Templateノードは、Mustache構文というテンプレート言語を使用して、 メッセージのプロパティをテンプレートに埋め込み、新しいテキストを生成します。
🔄 Templateノードの動作イメージ:
🧔 Mustache(マスタッシュ)とは?
Mustacheは「口ひげ」という意味で、{{ }}の形が口ひげに見えることから名付けられました。
シンプルで覚えやすいテンプレート言語です。
{{変数名}}
{{{変数名}}}
{{#配列}} ... {{/配列}}
{{#条件}} ... {{/条件}}
{{^条件}} ... {{/条件}}
{{! コメント }}
{{.}}
| 設定項目 | 説明 | 選択肢 |
|---|---|---|
| プロパティ | 出力先のプロパティ | msg.payload(デフォルト)、任意のmsgプロパティ |
| 構文 | テンプレートの構文 | Mustache / Plain text |
| 形式 | エディタの表示形式 | Mustache / Plain text / JSON / YAML / HTML / CSS / JavaScript / Markdown |
| 出力形式 | 出力データの形式 | 文字列 / Parsed JSON / Parsed YAML |
| テンプレート | 実際のテンプレート内容 | 自由記述 |
| 名前 | ノードの表示名 | 任意の文字列 |
テンプレートの結果をそのまま文字列として出力
結果をJSONとしてパースしてオブジェクトで出力
結果をYAMLとしてパースしてオブジェクトで出力
📥 サンプルフローのインポート方法:
このサンプルフローには、以下で説明する全パターンの実例が含まれています。
参照元:NodeREDエディター内サンプルフロー
用途: 配列データをテンプレートで繰り返し展開
📌 ポイント:
{{#payload}} ... {{/payload}} で配列をループ{{! コメント }} は出力に含まれない用途: テンプレートからJSONオブジェクトを生成
設定:
用途: テンプレートからYAML形式のオブジェクトを生成
📌 YAMLの利点:
用途: HTTPレスポンス用のHTMLページを動的に生成
テンプレート例:
用途: 値の有無や真偽で出力内容を変える
📌 条件分岐のポイント:
{{#変数}}: 変数がtruthy(真)の場合に表示{{^変数}}: 変数がfalsy(偽)または未定義の場合に表示[] はfalsyとして扱われる📝 課題:
名前を受け取って「こんにちは、〇〇さん!」という挨拶文を生成してください。
🎯 要求仕様:
📊 期待される動作:
Injectノードの設定:
Templateノードの設定:
こんにちは、{{payload}}さん!📝 課題:
商品の配列データから、番号付きリストを生成してください。
🎯 要求仕様:
Templateノードの設定:
{{#payload}} ... {{/payload}} で配列をループ{{name}} と {{price}} を参照📝 課題:
センサーから受け取ったデータをJSON形式に変換して出力してください。
🎯 要求仕様:
Templateノードの設定:
📝 課題:
センサーデータの状態に応じて、異なる表示を行うHTMLレポートを生成してください。
🎯 要求仕様:
条件分岐の使い方:
{{#status}}...{{/status}}: statusがtruthyの場合{{^status}}...{{/status}}: statusがfalsyの場合statusの判定:
温度: {{payload.temperature}}℃
\n \n✅ 異常なし
\n {{/payload.alerts.length}}\n\n", "output": "str", "x": 540, "y": 100, "wires": [["ex4_debug"]] }, { "id": "ex4_debug", "type": "debug", "name": "HTML出力", "active": true, "tosidebar": true, "console": false, "tostatus": false, "complete": "payload", "targetType": "msg", "x": 710, "y": 100, "wires": [] } ]{{変数}} でデータを埋め込み{{#配列}} ... {{/配列}} で繰り返し{{#条件}}(真)と {{^条件}}(偽){{変数}} は自動エスケープ、{{{変数}}} は生出力{{! コメント }} は出力に含まれない{{#section}} には必ず {{/section}} が必要{{paylod}}(typo)などに注意{{payload.data.value}} のようにドット記法で参照[] はfalsyとして扱われる{{value}} not "{{value}}")Templateノードをマスターしたら、以下のノードも学んでみましょう:
| 問題 | 原因 | 解決方法 |
|---|---|---|
| 変数が展開されない | プロパティ名の誤り | Debugノードで実際のプロパティ名を確認 |
| 配列がループしない | セクション構文の誤り | {{#array}}...{{/array}} の形式を確認 |
| JSON出力でエラー | テンプレートが不正なJSON | JSONバリデーターでテンプレートを検証 |
| HTMLタグが表示される | エスケープされている | {{{変数}}}(三重括弧)を使用 |
| 条件分岐が動かない | truthy/falsyの誤解 | 空文字列、0、null、undefinedはfalsy |
| ネストしたデータにアクセスできない | 参照方法の誤り | {{object.property}} のドット記法を使用 |
| 構文 | 説明 | 例 |
|---|---|---|
{{変数}} |
変数展開(HTMLエスケープあり) | {{name}} → "田中" |
{{{変数}}} |
変数展開(HTMLエスケープなし) | {{{html}}} → "<b>太字</b>" |
{{.}} |
現在のコンテキスト | 配列ループ内で要素自体を参照 |
{{obj.prop}} |
ネストしたプロパティ | {{user.name}} |
| 構文 | 説明 | 用途 |
|---|---|---|
{{#section}}...{{/section}} |
セクション(真の場合/配列ループ) | 条件表示、配列の繰り返し |
{{^section}}...{{/section}} |
反転セクション(偽の場合) | デフォルト表示、空配列時の処理 |
{{! comment }} |
コメント | 出力に含まれないメモ |
| 値 | 判定 | {{#section}}の動作 |
|---|---|---|
| true | truthy | 内容を表示 |
| false | falsy | 内容を非表示 |
| "文字列" | truthy | 内容を表示 |
| ""(空文字列) | falsy | 内容を非表示 |
| [1,2,3](配列) | truthy | 各要素でループ |
| [](空配列) | falsy | 内容を非表示 |
| null / undefined | falsy | 内容を非表示 |
| 0 | falsy | 内容を非表示 |
このガイドが役に立ちましたら、実際のプロジェクトで練習してみてください!
Templateノードはテキスト生成の強力なツールです。
参照元:NodeREDエディター内サンプルフロー