眼鏡のIT勉強日記

テンプレートエンジンのライブラリをつくってみた

2025-07-14

TypeScript・JavaScriptで使用するHTMLテンプレートエンジンライブラリを作ってみた。名前は minimal-te(minimal template engine)。

きっかけ

Cloudflareを使ってみたく、HonoでシンプルなWebアプリケーションを作成してWorkersにデプロイしようと思い立った。

そこで、HTMLへのデータ埋め込みをどうしようか考えたが、なかなかフィットするものがない。

Honoではjsx/tsxを使うのが推奨されているが、馴染みがなく(難しくないから勉強しろという話なのだが)、、一方で、既存のテンプレートエンジンとしてEJSは、内部でNodeの組み込みAPIである fs を利用しているため、Workersでは動かない。

そこで、作ってみよう!となった。

特徴

こんな人に使ってほしい

ExpressでサーバーサイドレンダリングにEJSを使っていた人が、Hono+Cloudflare Workersへ移行しようとすると、同じ悩みにぶつかるはず。

Cloudflare WorkersはV8エンジン上で動くEdge Runtimeであり、Node.jsのAPIが使えない。EJSは内部で fs.readFileSync を呼び出すため、Workers上では実行時エラーになる。jsx/tsxに切り替えるのも学習コストがかかる。

そういった移行期の悩みを解消するために作ったのが minimal-te。EJSライクなプレースホルダー構文をそのまま使いながら、Edge環境でも動く。

機能

機能としては非常にシンプル。名前の通り最小機能のみ保持している。

関数として minimalTE をexportしており、引数にはHTML(文字列)と、埋め込む値(オブジェクト配列)を渡す。

import { minimalTE } from 'minimal-te';

const html = '<p><% name %></p>';
const result = minimalTE(html, [{ name: 'Hello!' }]);
// <p>Hello!</p>

テンプレートのHTML側では、<% %><%table %> としてプレースホルダーを用意し、そこに第二引数のオブジェクト配列から値を取得して埋め込む。

npmで公開中

これからライブラリとして育てていこうと思うので、ぜひ見てみてください☝

https://www.npmjs.com/package/minimal-te

機能の詳細な説明はこちらに載せています。

← 一覧に戻る