blog.hamadu.net

2017/07/01 - JavaScriptのテンプレートエンジンを試した

このブログを生成している blogoid で使うテンプレートエンジンをいくつか試した。

handlebars

昔のバージョンではこれを使っていた。JavaScriptテンプレートエンジン界の老舗。

  • {{variable}} と書くと、テンプレートに渡した variable の内容が書き込まれる。

ただ、以下の制約があり、使いづらかったので別のを探し始めた。

  • 関数を渡せない。テンプレート内部での関数実行は、予めヘルパーとして登録する必要がある。
  • Partial機能はあるが、これも名前と内容を予め登録する必要がある。
  • for文やif文の構文が専用で用意されている。(blogoidの利用者にJavaScript以外のことを習得させる不便を強いることになる。)
    • しかも、for文だと中身のオブジェクトのキーが変数展開されていて気持ち悪い

doT.js

最速を謳うテンプレートエンジン。APIが使いにくかったので採用には至らず。

  • 文法はhandlebarsと似てる。
  • Partial機能あり。だが、予め登録する必要がある。

ejs

採用を決めたのがこれ。eRuby(erb) を意識したかのような名前だが、ejs の e は effective の e らしい。

  • <% %> で囲った部分が JavaScript として実行される。
  • <%= %> だと実行語、評価内容が出力される。
  • テンプレートファイルからの相対パスで別のファイルをincludeできる。

forEach 等の制御を入れたいときは、

<% [1, 2, 3].forEach((x) => { %>
  x:<%= x %>
<% }) %>

などのように書く。rails を触ったことがある人なら馴染み深いのでは。

自分で作る

趣味開発なのでこの選択肢も無くはないが、今現在その必要はないので保留。