Difyのテンプレートノードは、前のノードの値をJinja2で決まった表示へ整えるために使います。文章の要約や推論をさせるノードではありません。まず入力変数を接続し、空欄・未定義・None・0・falseを区別して、表示したい文を小さく検証しましょう。

対象は、Difyで前のノードの結果を次へつなげられるようになり、一覧や確認文の形を毎回そろえたい人です。本稿では架空の備品貸出状況を整形します。予約の確定、返却処理、外部メールの送信は扱わず、画面へ出す文字列だけを練習します。

仕様・講座情報の確認日:2026年10月10日。Dify公式のTemplate、If-Else、Code、Jinja公式のテンプレート仕様を参照しています。教材のJinjaはPython 3.12.14・Jinja2 3.1.6のローカル参照実行で確認しました。Difyの管理画面で実行した結果や、特定バージョンの動作保証ではありません。

テンプレートへ渡す値と、表示の役割を整理する

テンプレート、LLM、コード、IF/ELSEの役割を比べる

同じ入力の数量を「残り0台」と表示するだけなら、表現を毎回AIに考えさせる必要はありません。入力が0なら0を使い、見出しや単位を決まった位置へ置くためにテンプレートを使います。形式をそろえる部分と、意味を解釈する部分を分けると、出力が違った原因を調べやすくなります。

LLMノードは、文章の要約や問いへの回答など、モデルに処理を任せる場面で使います。テンプレートは入力された値を表示へ組み込みます。元の数量が誤っていても、テンプレートが実在の在庫を調べ直すわけではありません。表示が整ったことと、元情報が正しいことを別に確認します。

計算やデータの型を整える工程が大きくなったら、Codeノードなどの前処理へ分ける選択肢があります。数量を合計したり、複数条件でレコードを検査したりする処理を、長い表示用テンプレートへ詰め込むと、どこで値が変わったか追いにくくなります。計算した結果を短いテンプレートへ渡す形を検討してください。

IF/ELSEノードは、次にどの処理へ進むかを選びます。Jinjaのifは、同じ文字列の中でどの文を表示するかを選びます。「在庫がなければ受付不可という文を出す」だけなら表示のifで書けます。「在庫がなければ予約APIを呼ばない」なら、実行経路の条件分岐が必要です。注意文が出たことだけで、予約処理が止まったと判断しないでください。

アプリを最初に作るときの「テンプレートから作成」と、今回のテンプレートノードも別です。前者はアプリの構成例を取り込む入口で、後者はフロー内の値を文字列へ整える部品です。検索で似た用語が出たときは、アプリ作成の話か、変数整形の話かを見分けてから手順を使います。

表示を作る前に選ぶ処理の役割
処理この教材での用途確認する出力
テンプレート数量と品名を定型文へ入れる画面用の文字列
LLM自由文の説明を生成する場合生成文の内容と根拠
Code数量や入力型を検査・計算する場合型が明確な計算結果
IF/ELSE予約処理へ進むかを選ぶ場合実行された経路
アプリ作成テンプレートフローの構成例を取り込むアプリ全体の構成

実行経路の確認を先に練習したい人は、DifyのIF/ELSEで数値・空欄・AND/ORを調べる方法へ進めます。本稿では、その経路で受け取った結果をどう表示するかへ範囲を絞ります。

入力変数の名前と、接続先の型をそろえる

テンプレートに変数名を書くだけでは、前のノードの値が自動で入るとは限りません。編集画面でテンプレート側の入力変数を作り、前のノードのどの出力を使うかを選びます。教材では item_name、quantity、reservable、note、items を使う前提を置きます。

最初は一つの文字列だけを接続し、品名が表示されるか確認してください。品名が出ない状態で、配列のループや条件式まで一度に足すと、接続がないのか構文が違うのか分かりにくくなります。「接続一つ、表示一つ」という最小の確認を済ませてから、項目を増やします。

入力名は、表示したい意味が分かる名前へそろえます。text1 と text2 だけでは、数量なのか注記なのかが曖昧です。前のノードに stock_count があっても、テンプレート側へ quantity という名前で割り当てるなら、その対応を書いておきます。元の変数名と表示側の名前は、設定を通してつながります。

型も確認します。数値0と文字列「0」は、見た目が似ていますが別の値です。真偽値falseと文字列「false」も同じではありません。後から条件を足した際に、文字列が空でないため真として扱われることがあります。デバッグで型を確認し、必要な変換は表示より前の段階で行う方が追いやすくなります。

配列は、項目名を持つ複数のオブジェクトなのか、単なる文字列のリストなのかを確かめます。item.label と書けるのは、その項目が存在する構造を渡した場合です。入力が「ペン,ノート」という一つの文字列なら、同じforを使っても、期待した備品一覧にはなりません。JSONに似た見た目を、構造化された配列と混同しないようにします。

ここでは変数名の対応表を教材として示しています。Difyの版や画面言語によって、入力欄や出力選択の名称は変わる可能性があります。操作名を丸暗記するより、テンプレートへどのノードのどの型を渡したかを、実行詳細で確かめることを優先してください。

未定義、None、空文字、空白を別々に扱う

未定義は、その変数や項目が存在しない状態です。Noneは、存在する項目へ値がないことを明示した状態です。空文字は長さ0の文字列で、空白だけの文字列は文字はあるものの内容が見えない状態です。画面ではどれも空っぽに見えますが、代替表示へ切り替える条件は同じとは限りません。

Jinjaの default('未入力') は、通常、未定義に対して代替値を返します。空文字、None、数値0など、定義された値をまとめて補う指定ではありません。空欄が補われないときは、フィルタが壊れていると考える前に、その値が未定義なのか、空文字なのかを調べます。

文字列の注記を表示する教材では、まず未定義かNoneかを確認し、そうでなければtrimで前後の空白を除きます。その結果が空なら「記載なし」と表示します。trimは文字列の前後を整えるために使い、数量などの意味ある値を消すための工程へ流用しません。

空白が入力の誤りを示す現場では、勝手に「記載なし」へ直してよいとは限りません。必須注記が空なら、前の検証工程で確認待ちへ回す方法もあります。本稿の備品一覧では注記が任意という前提なので代替文を出します。任意項目と必須項目で、同じ空欄ルールを共有しないようにしてください。

未定義の表示を補うことは、入力の接続ミスを隠す可能性もあります。ずっと「記載なし」が出るなら、実際に注記がないのか、noteが前のノードへ接続されていないのかを確認します。便利な代替表示を付けた後も、元入力の存在を実行詳細で見られる状態にしておきます。

空に見える値の違い
入力の状態教材での見方確認方法
変数がない未定義入力接続と項目名を確認
None値がないことを示す値実行詳細の実際の値を確認
空文字長さ0の文字列型と文字数を確認
空白だけ内容が見えない文字列trim後の長さを確認
0・false意味を持つ数値・真偽値空欄とは分けて表示

defaultにtrueを付けると0とfalseも変わる

default('不明', true) の二つ目の引数は、未定義だけでなく、偽として評価される値にも代替値を使う指定です。空文字を補えるため便利ですが、0やfalseにも作用します。在庫0を「不明」、予約不可のfalseを「不明」へ変えると、意味のある判断結果を失ってしまいます。

例では、数量0は「在庫があるか分からない」ではなく、「確認した結果、残り0台」です。同じように予約可否falseは、予約してよいか不明ではなく、受け付けられない状態を表します。空欄用のフィルタを一括で当てる前に、各項目が何を意味するかを見直してください。

数量の表示では、未定義またはNoneなら「数量未確認」、それ以外はその値を表示する、という条件にします。数値の妥当性は別工程で検査する前提です。文字列「不明」や負の数量が入っても、この表示処理だけで正しい数量へ直すわけではありません。表示の防御と入力検証を分けます。

予約可否はtrueなら「予約可」、falseなら「予約不可」、それ以外なら「可否未確認」とします。「falseという文字列」が混ざる場合、true/falseの真偽値を持つ項目へ直せるか、前のノードで確認します。文字列の内容から勝手に推測する処理を増やすと、表示の条件が複雑になります。

この違いは、テンプレートだけでなく、集計の0やアンケートの回答なしを扱う場面にもつながります。数が0だったのか、取得できなかったのかを残すと、見る人が次に必要な行動を判断できます。「見やすい画面」を作るために情報を一つへ潰さないことが、定型文にも必要です。

ifとforは、表示の範囲が分かる短い単位で使う

Jinjaでは、値を差し込む部分、処理を書き始める部分、コメントの部分に異なる記法があります。値を表示する二重の波括弧と、ifやforを書く波括弧とパーセント記号を区別します。初心者は、まず品名一つを表示し、次に条件文一つ、最後に一覧のループ一つという順で試すと確認しやすくなります。

ifが長く続くと、どのendifがどの条件を閉じるか分かりにくくなります。数量の表示、予約可否、注記を別の段落にし、それぞれを短い条件で閉じます。同じ内容を二か所へ書くより、画面のどの項目に対する条件かを見出しで分ける方が、修正したときの影響を見つけやすくなります。

forで一覧を出すときは、空の配列の場合も決めます。何も表示されないと、一覧が空なのか、ノードが失敗したのか、利用者には分からない場合があります。教材では空配列なら「一覧はありません」と出し、数量が0の項目は「0台」と出します。行がない状態と、ある行の数量0を区別します。

ループのindexは、表示の連番として使えます。ただし元台帳の備品IDではありません。表示の1番目を問い合わせ番号として使うと、一覧の順番が変わった際に別の品目を指す可能性があります。記録を追跡する必要があるなら、入力から正式なIDを渡して表示する設計へ広げてください。

文の見栄えだけでなく、項目と項目の境界も確認します。ループを回した結果、名前と数量が一行へ連結されてしまうと、数値の対応が読みにくくなります。最初は改行を残し、複数項目を実際に渡して、どの数量がどの品名に付いたかを確かめてください。

備品貸出の表示を作り、9ケースで境界を確認する

架空データから定型の確認文を作る

次のテンプレートは、備品名、数量、予約可否、注記を表示する教材です。数量と予約可否の型は前のノードで検証済みという前提です。実在する備品予約システムの出力ではありません。最初の入力例は、品名「小型プロジェクター」、数量0、予約可否false、注記は空白だけにします。

これは0とfalseが代替文に置き換わらず、「0台」「予約不可」と表示されるかを見るための組み合わせです。見た目をよくする練習として通常値だけを渡すより、判断を失いやすい値を先に通します。借りられない備品を「不明」と表示しないことが、利用者の行動へ直接関わるからです。

備品:{{ item_name }}
数量:{% if quantity is not defined or quantity is none %}数量未確認{% else %}{{ quantity }}台{% endif %}
予約:{% if reservable is sameas true %}予約可{% elif reservable is sameas false %}予約不可{% else %}可否未確認{% endif %}
注記:{% if note is not defined or note is none %}記載なし{% elif note | trim == '' %}記載なし{% else %}{{ note | trim }}{% endif %}
備品:小型プロジェクター
数量:0台
予約:予約不可
注記:記載なし

実行詳細では、この表示だけでなく、入力の数量が数値0で、予約可否が真偽値falseだったかも確認します。前のノードが文字列で返していたら、表示の修正だけで済ませず、接続元の出力定義を調べます。テンプレートは型の問題を見つける入口になっても、すべての入力を自動修復する仕組みではありません。

item_name は必須文字列という前提にしています。そこがない場合に「備品不明」として処理を続けてよいかは、用途ごとに決めます。教材の入力契約では、品名が空なら前段の検証で止めると考えます。必須項目にまで代替文を付けると、接続がないまま完成したように見える可能性があるためです。

ローカルの参照実行は、構文と期待する文字列を確かめるためのものです。Dify上では、使っている版のノードに同じ変数を割り当て、単体実行とアプリ全体の出力を確認してください。ローカルで文字列ができたことを、Difyの接続や後続ノードまで通った結果と扱わないことが大切です。

配列の一覧は、空配列と数量0を区別する

二つの備品を一覧にする場合は、label と count を持つオブジェクトの配列を用意します。教材では小型プロジェクター0台、マイク2台という架空の組み合わせを使います。名前の並びだけを見るのでなく、0台の行が省かれていないか、2台が別の品名へ付いていないかを照合します。

{% for item in items %}
- {{ item.label }}:{{ item.count }}台
{% else %}
一覧はありません
{% endfor %}

このループのelseは、一覧が空の場合の表示です。予約可否を決めるelseではありません。数量0の項目は配列に存在しているため、その行を表示します。もし0台を一覧から除きたいなら、それは表示順とは別の仕様です。対象を絞った理由を残し、消した項目の意味を確認してください。

items自体が未定義やNoneの状態は、空配列とは分けて考えます。本稿のループ例は、有効な配列を渡す前提です。接続が抜けたときまで空一覧として通すより、入力の配列型を前段で検査する方が、誤りを見つけやすくなります。空でよい一覧と、取得失敗の一覧を混同しない設計です。

注記には改行や箇条書き記号が含まれる可能性があります。Markdownとして表示すると見出しやリンクの形が変わることもあるので、信頼できない入力をそのままHTMLへ組み込む方法へ安易に広げないでください。まずは内部で用意した架空の短い文字列を、通常のテキストとして確かめます。

複数項目を扱い始めたら、表示した件数と元配列の件数を比べます。五つ渡して四つだけ見えるなら、条件で消していないか、改行が崩れていないか、最後の項目が出力に含まれているかを確認します。画面を眺めるだけでなく、具体的な品名を一つずつ照合すると原因を絞れます。

9ケースの入力と期待する出力を先に決める

教材では、正常値、数量0、予約不可false、未定義、None、空文字、空白だけ、空配列、0を含む二件の配列という九つを確認します。機能を全部試す網羅的なテストではなく、今回の表示で失いやすい情報へ絞った確認です。追加する入力形式が増えたら、期待する出力も増やしてください。

未定義のケースは、quantityなどの項目を入力から外して作ります。Noneは項目を残して値をNoneにし、空文字は文字列の項目を空にします。同じ「空」のケースを名前だけ変えて作らず、実際の状態を別にすることが必要です。入力が違わないと、空欄ルールの差も確かめられません。

表示の境界を確かめる9ケース
ケース入力の変更期待する表示
通常値数量2、予約true、注記あり2台・予約可・注記の本文
数量0quantityを数値0にする0台を残す
予約不可reservableを真偽値falseにする予約不可を残す
未定義quantityを入力から外す数量未確認
Nonequantity・reservable・noteをNoneにする数量未確認・可否未確認・記載なし
空文字noteを空文字にする記載なし
空白noteを空白だけにする記載なし
空配列itemsを空配列にする一覧はありません
二件の配列数量0と2の二件を渡す両方の品名と数量が表示される

さらに、入力を文字列「0」や文字列「false」へ変えた場合は、今回の数値・真偽値の契約から外れると記録します。そのような入力を正規の九ケースへ混ぜて、すべて同じように動くと結論づけないでください。ローカルの参照実行と、Dify上の入力型の確認を組み合わせる必要があります。

単純にdefaultへtrueを足した別の表示を作り、0とfalseが代替文に変わることも比較できます。間違いが見える反例を残すと、後から「短く書けるから」と条件を戻してしまうのを防ぎやすくなります。期待値の表は、コードの説明書だけでなく、変更時に見直す基準にもなります。

改行、出力型、後続ノードの接続を確認する

テンプレートが返すのは整形した文字列です。JSONのように見える文字列を書いても、それだけで後続ノードが構造化したオブジェクトとして受け取るとは限りません。後続が配列を必要とする場合、表示用の文字列をそのまま渡さず、必要な出力型を持つ工程から接続する設計を考えます。

数値2を「2台」へ整えた時点で、その部分は表示の文字列です。後で数量を合計するノードへ渡すなら、元の数値を別の接続で渡します。人向けの文と、処理向けの値を同じ一本へまとめると、単位を取り除いて数値へ戻す工程が必要になり、誤りの場所も増えます。

改行の前後を消すハイフンの記法は便利ですが、最初から全部へ付けない方が確認しやすくなります。数量の文と予約の文がつながると、一つの長い項目に見えることがあります。複数行の文では、どの改行を残したいかを先に決め、ハイフンの追加前後を比べます。

最終の応答や出力ノードへ、テンプレートの出力を指定したかも調べます。前のLLMの出力がまだ接続されていると、テンプレート単体は正しくても、利用者へ見える文は変わりません。「編集したのに反映されない」ときは、出力先の変数を確認してからテンプレートを修正します。

フロー全体では、入力、テンプレート、最終出力という三地点を比べます。数量0が前の段階から存在しないならテンプレートだけの問題ではなく、テンプレートにはあるのに最終表示で消えるなら、その後の接続や表示を調べます。この切り分けは、Difyのナレッジ検索がヒットしないときの確認でも使う、工程ごとに事実を確かめる考え方です。

自習の完成条件と、講座で聞きたい質問を分ける

自習では、一つのテンプレートで九ケースの期待する文字列を説明できれば、この練習の区切りにできます。長い予約アプリを一度に作る必要はありません。入力の意味、空欄の扱い、表示の結果、処理対象外の型が分かる小さな成果物を残す方が、次の工程へ進む根拠になります。

次の課題へ広げるなら、予約処理の前に可否が確定しているかをIF/ELSEで確認し、数量不明の場合は外部処理へ進まないように設計します。ただし本稿は実行系の予約処理を検証していません。小さな表示の完成を、本番の予約システムが安全に運用できる結果へ拡大しないでください。

講師へ聞く内容は「Jinja2を教えてください」だけでなく、「0と未取得を分けたい」「表示と外部処理の経路を分けたい」「配列の入力型をどこで検査するか」と整理できます。質問に入力例と期待する出力があると、自分の目的に合う演習やレビューが受けられるかを比較しやすくなります。

学習順を広く見直したい人は、Difyの学習ロードマップと講座の選び方へ進めます。入力を受け取り、条件を確認し、結果を整えるという小さな課題を、機能の一覧を眺めるだけで終わらせず順番に作るための入口です。

生成AIを仕事へ使う講座の候補として、バイテックAIスクールのDifyマスターコース公式案内があります。公式トップでは申請フローや顧客管理などを扱う講座として確認できます。本稿のテンプレートや九ケースの添削が教材に含まれるとは確認していないため、受講相談で実際の演習範囲を聞いてください。

PR:バイテックAIスクールの無料カウンセリングを確認する

講座の公式料金表は、2026年10月10日確認で2か月148,000円、4か月228,000円、6か月298,000円の税込一括料金を掲載しています。教材の視聴と個別サポートの期間は別です。料金表とFAQで面談回数の案内が異なる箇所もあるため、選ぶプランの予約可能回数、質問対応、Difyやモデル利用料の負担を申込前に確かめてください。

学習で作った画面を見せるときは、架空データの教材であること、何を確認できたか、未検証の接続は何かを添えます。事務職の生成AIポートフォリオのまとめ方を使うと、表示ができた結果を、過大な業務成果へ言い換えず整理できます。

比較のために別の学習支援の形を知りたい場合は、生成AI講座の動画教材と個別支援を選ぶ基準も参考になります。今回のように入力の境界で迷う人は、教材の本数だけでなく、質問へ使える具体例とレビューの範囲を見て判断してください。

  1. 前のノードで数値・真偽値・文字列・配列を確認する。
  2. テンプレートの入力変数へ割り当てる。
  3. 0とfalseを残し、未取得だけを代替表示にする。
  4. 一覧の件数と改行を確認する。
  5. 最終出力へテンプレートの文字列を接続する。
表示と実行経路を分けた、備品一覧の学習用手順。編集部作成。

よくある質問

Q. DifyのテンプレートノードでAIに文章を考えさせられますか?
A.

テンプレートはJinja2で入力値を決まった文字列へ整えるノードです。要約や文章生成を行うLLMの処理と分けて使います。

Q. defaultを使っても空文字が補われないのはなぜですか?
A.

通常のdefaultは未定義の値を補います。空文字やNoneは定義された値です。任意の注記なら未定義・Noneを確認し、文字列はtrim後の空を調べるなど、入力の状態に応じて条件を決めます。

Q. defaultの第二引数をtrueにすればよいですか?
A.

0やfalseなども代替値へ変わるため、数量や可否には注意が必要です。0台と予約不可を残したい場合、未定義やNoneを明示的に分けます。

Q. Jinjaのifで予約APIの実行も止まりますか?
A.

Jinjaのifは表示する文字列を切り替えます。別ノードの実行経路を止めたい場合は、IF/ELSEなどで経路を設計し、実行詳細を確認してください。

Q. 九ケースはDifyの画面で実行した結果ですか?
A.

本稿はJinja2 3.1.6のローカル参照実行で構文と期待する表示を確認した教材です。Difyでは使用版の入力設定・単体実行・最終出力の接続を別に検証する必要があります。