【てんぷれーとえんじん】

テンプレートエンジン とは?

最終更新:
💡 「穴埋め問題」のようにデータをはめ込むエンジン

雛形(テンプレート)にデータを埋め込んで、HTMLやメール本文などの最終的な出力を動的に生成する仕組み。同じ構造の文書を効率よく量産できる。

📌 このページのポイント
雛形とデータから出力を生成 テンプレート {{name}} データ name:ひよこ エンジン 値を展開 出力を生成 出力 こんにちは、 ひよこさん! 雛形とデータを合わせてテキストを作る 構文やエスケープはエンジン・設定による 出力先に合う保護と雛形の信頼性を確認
青は雛形、緑はデータと出力、橙は生成処理。矢印は二つの入力を使って出力を生成する流れで、通信の方向ではない。{{name}}はJinjaなどの構文例で、すべてのエンジン共通ではない。実際の雛形は「こんにちは、{{name}}さん!」とする例。図ではHTMLのタグや条件分岐を省略した。PDF変換やメール送信は別の処理。
ひよこ ひよこ
何をするものなの?
ペンギン先生 ペンギン先生
商品名だけが違うページを作るとき、共通の雛形と商品データを用意して出力を生成するよ。「こんにちは、{{name}}さん!」のnameへ値を渡すイメージ。これはJinjaなどの構文例で、どのエンジンでも同じ書き方というわけではないんだ。
ひよこ ひよこ
どんな種類があるの?
ペンギン先生 ペンギン先生
PythonのJinja、JavaScriptのEJSなどがあるよ。JinjaはHTML以外のテキストも生成でき、EJSはJavaScriptを使ってHTMLを作る。変数だけでなく条件分岐や繰り返し、共通部品も扱える。ReactのJSXはJavaScriptの構文拡張なので、単なる文字列の穴埋め機能と同じものとして扱わないほうがいいね。
ひよこ ひよこ
安全に使うには?
ペンギン先生 ペンギン先生
ユーザーの値は雛形のコードにせず、データとして渡そう。HTMLへ出すときは、本文・属性・JavaScriptなどの出力先に合うエスケープが必要だよ。自動処理はエンジンや設定により違い、EJSの<%=はエスケープあり、<%-はなし。ユーザーが雛形そのものを書く場合の危険は、値のエスケープだけでは防げないんだ。
ひよこ ひよこ
Reactを使っていても出番はある?
ペンギン先生 ペンギン先生
別の用途で使うことはあるよ。たとえばJinjaはメール用のテキストやHTMLを生成できる。Reactがあるから必ず必要、必ず不要、とは決まらない。雛形からテキストを作る処理と、それを送信したりPDFへ変換したりする処理も別なんだ。
ひよこ ひよこ
自作するときの注意は?
ペンギン先生 ペンギン先生
学習なら単純な置換から考えられるけれど、実用では出力先に合う処理や不正な雛形への対策が必要だよ。既存ライブラリでも設定確認が欠かせない。複雑な業務処理は雛形の外へ分けつつ、表示の条件分岐や繰り返しまで一律に禁止する必要はないんだ。
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「テンプレートエンジン」って出てきたら「雛形にデータを埋め込んで動的にページや文書を生成する仕組みだな」と思えればだいたいOK!
📖 おまけ:英語の意味
「template engine」 = 雛形を処理するエンジン
💬 templateは「型紙・雛形」という意味。同じ型紙を使い回してデータだけ入れ替えるイメージだよ

参考資料

← 用語集にもどる