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

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

💡 「穴埋め問題」のようにデータをはめ込むエンジン
📌 このページのポイント
テンプレートエンジンの変換フロー テンプレート <h1>{{title}}</h1> <p>{{body}}</p> 変数の埋め込み データ title: "こんにちは" body: "本文です" テンプレート エンジン 変数を置換・合成 出力(HTML) <h1>こんにちは</h1> <p>本文です</p> 完成したページ ✓ 変数が展開済み テンプレート+データ → エンジンが合成 → 完成したHTMLを出力
テンプレートエンジンのイメージ
ひよこ ひよこ

テンプレートエンジンって何をするものなの?

ペンギン先生 ペンギン先生

たとえば通販サイトの商品ページを考えてみて。レイアウトはどの商品も同じだけど、名前・価格・画像は商品ごとに違うよね。テンプレートエンジンは「ここに商品名、ここに価格」という雛形を用意して、データを流し込んで完成ページを作るんだ。「こんにちは、{{name}}さん!」みたいにプレースホルダーを書くイメージだよ。

ひよこ ひよこ

どんな種類のテンプレートエンジンがあるの?

ペンギン先生 ペンギン先生

PythonならJinja2、Node.jsならEJSやPug、JavaならThymeleaf、PHPならBlade(Laravel)が有名だよ。フロントエンド側ではReactのJSXやVueテンプレート構文もテンプレートエンジンの一種と言えるね。

ひよこ ひよこ

テンプレートエンジンを使うときの注意点ってある?

ペンギン先生 ペンギン先生

一番危険なのはユーザー入力をそのままテンプレートに埋め込んでしまうこと。XSS攻撃の原因になるから、必ずエスケープ処理が必要だよ。あとテンプレートの中にif文やfor文を大量に書きすぎると、HTMLとロジックがごちゃ混ぜになって保守が地獄になるから、ロジックは極力コントローラー側に寄せるのが鉄則だよ。

ひよこ ひよこ

Reactを使っていたらテンプレートエンジンは不要なの?

ペンギン先生 ペンギン先生

フロントエンドではそうだけど、サーバーサイドでHTMLメールを生成したり、PDFテンプレートを作ったりするときにはテンプレートエンジンが活躍するよ。Next.jsのようなSSRフレームワークでも、メール送信やPDF生成にはEJSやHandlebarsを併用することがある。

ひよこ ひよこ

テンプレートエンジンを自作することってあるの?

ペンギン先生 ペンギン先生

学習目的ではいい経験になるよ。最もシンプルなテンプレートエンジンは正規表現で変数プレースホルダーを置換するだけ。20行くらいで書ける。ただし実務で自作するのはセキュリティリスクが高い。エスケープ漏れがXSS脆弱性に直結するから、十分にテストされた既存ライブラリを使うのが鉄則。実はNode.jsの標準テンプレートリテラル(バッククォート)自体が最もシンプルなテンプレートエンジンとも言えるんだよ。

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「テンプレートエンジン」って出てきたら「雛形にデータを埋め込んで動的にページや文書を生成する仕組みだな」と思えればだいたいOK!
📖 おまけ:英語の意味
「template engine」 = 雛形を処理するエンジン
💬 templateは「型紙・雛形」という意味。同じ型紙を使い回してデータだけ入れ替えるイメージだよ
← 用語集にもどる