```mdx
---
title: "テンプレート"
description: "Jinja2 テンプレートを使用してデータを変換およびフォーマット"
icon: "note-sticky"
---

テンプレートノードは、Jinja2 テンプレートを使用して複数のソースからのデータを構造化テキストに変換およびフォーマットします。変数を組み合わせ、出力をフォーマットし、データを下流のノードやエンドユーザーのために準備するために使用します。

<Frame caption="テンプレートノードの設定インターフェース">
  <img src="https://assets-docs.dify.ai/2025/04/0838bb5c7e1d1a58ed30fcd9fc48920f.png" alt="テンプレートノードインターフェース" />
</Frame>

## Jinja2 テンプレート

テンプレートノードは、Jinja2 テンプレート構文を使用してワークフローデータに基づいた動的コンテンツを作成します。これにより、プログラミングのような機能が提供され、ループや条件分岐、フィルターを使用して高度なテキスト生成が可能になります。

### 変数の代入

ワークフローの変数を参照するには、二重中括弧を使います: `{{ variable_name }}`。ネストされたオブジェクトのプロパティや配列の要素には、ドット表記とブラケット構文を使用してアクセスできます。

```jinja2
{{ user.name }}
{{ items[0].title }}
{{ data.metrics.score }}
```

### 条件ロジック

if-else 文を使用してデータ値に基づいた異なるコンテンツを表示します:

```jinja2
{% if user.subscription == 'premium' %}
Welcome back, Premium Member! You have access to all features.
{% else %}
Consider upgrading to Premium for additional capabilities.
{% endif %}
```

### ループと反復

配列やオブジェクトを for ループで処理して、繰り返しのコンテンツを生成します:

```jinja2
{% for item in search_results %}
### Result {{ loop.index }}
**Score**: {{ item.score | round(2) }}
{{ item.content }}
---
{% endfor %}
```

<Frame caption="テンプレート処理の知識検索結果">
  <img src="https://assets-docs.dify.ai/2025/04/0ae3f13cf725cb2c52c72cc354e592ee.png" alt="テンプレートフォーマット例" />
</Frame>

## データフォーマット

### フィルター

Jinja2 フィルターはテンプレートレンダリング中にデータを変換します:

```jinja2
{{ name | upper }}
{{ price | round(2) }}
{{ content | replace('\n', '<br>') }}
{{ timestamp | strftime('%B %d, %Y') }}
{{ score | default('No score available') }}
```

### エラーハンドリング

デフォルト値や条件チェックを使用して、不足または無効なデータを適切に処理します:

```jinja2
{{ user.email | default('No email provided') }}
{{ metrics.accuracy | round(2) if metrics.accuracy else 'Not calculated' }}
```

## インタラクティブフォーム

テンプレートは、チャットインターフェースで構造化データ収集用のインタラクティブな HTML フォームを生成できます:

```html
<form data-format="json">
  <label for="username">Username:</label>
  <input type="text" name="username" required />
  
  <label for="priority">Priority:</label>
  <input type="select" name="priority" data-options='["low","medium","high"]'/>
  
  <label for="message">Message:</label>
  <textarea name="message" placeholder="Enter your message"></textarea>
  
  <input type="checkbox" name="urgent" data-tip="Mark as urgent"/>
  <button data-variant="primary">Submit</button>
</form>
```

<Frame caption="チャットインターフェースでレンダリングされたインタラクティブフォーム">
  <img src="https://assets-docs.dify.ai/2025/04/9d24e9cfa3cdde00e4eee15bd4bbea76.png" alt="インタラクティブフォームのレンダリング" />
</Frame>

ユーザーがフォームを送信すると、応答は構造化された JSON データとなり、即座に下流のワークフローノードで処理可能です。

## 出力制限

テンプレートの出力は **80,000 文字**（`TEMPLATE_TRANSFORM_MAX_LENGTH` で設定可能）に制限されています。これはメモリ問題を防ぎ、大規模なテンプレート出力の処理時間を合理的に保ちます。

## よくあるユースケース

**レポート生成** - 複数ソースからのデータを一貫した構造とスタイリングでフォーマットされたレポートに結合します。

**API 応答フォーマット** - 内部データ構造を外部消費向けにユーザーフレンドリーなフォーマットに変換します。

**LLM プロンプト準備** - 複雑なデータをよくフォーマットされたプロンプトに構造化し、LLM の処理精度を向上させます。

**メールと通知テンプレート** - ユーザーデータとワークフローの結果に基づいた動的コンテンツでパーソナライズされたメッセージを生成します。

**データ変換** - 外部システムとの統合のために異なるデータフォーマットや構造を変換します。

## ベストプラクティス

**説明的な変数名を使用する**ことで、特に複雑なデータ構造を処理する際に、テンプレートを読みやすく、維持しやすくします。

**データの欠如を処理する**ために、デフォルト値や条件チェックを使用し、テンプレートレンダリングエラーを防ぎます。

**可読性のためのフォーマット**により、適切なスペースや改行、フォーマットを使用して、クリーンでプロフェッショナルな出力を作成します。

**サンプルデータでテストする**ことで、テンプレートがエッジケースを処理し、異なる入力シナリオで期待通りの結果を出すことを確認します。
```