モヒカンは正義

プログラマー風林火山で言う「風のエンジニア」になりたい(比較的)若者Webエンジニアの備忘録

Scalaで使うテンプレートエンジンの検討 (Scalate、Twirl、Beard)

Scalaでテンプレートエンジン使いたくなったので調べた。

www.scala-lang.org

探し方

GitHubでホスティングされているホットなものを探す。

github.com

こういうのを探すときは、

  • そこそこstarがついている (= みんなに使われている)
  • 定期的に新バージョンがリリースされている
  • contributorが一人じゃない

辺りを確認しておくのがオススメ。 そうしておけば、突然ライブラリが消滅したり、時代に取り残されて渋々他のライブラリへの移行を余儀なくされる、みたいな悲しいことを回避出来る確率が上がる。

見つけたもの

探し方 で触れた観点を持って良さげだなと思ったは次の3つ。

1. Scalate

github.com

Mustache、Jade、Scaml、SSPと複数の表記方法をサポートしている。 テンプレートエンジンって「こういう風にかけ!」と表記方法をビシッと指定されているものしか使ったことがなかったが、複数の表記方法から手に馴染むものを選べるのは嬉しいんじゃないだろうか。

とは言えいくつかはHTML特化の表記方法なので「メール本文とかPush通知の文面とかもテンプレート管理したいんじゃー」という場合は、選択肢としてはMustacheかSSP表記のいずれかになる。オススメはSSPで、テンプレート変数が未定義だった場合にはランタイムで怒ってくれる。Mustacheはしれっとブランクになってしまうのでそれに気づかず事故りやすそう。

2. Twirl

github.com

有名な モリモリ フルスタック系フレームワークplayのテンプレートエンジン。 SBT Pluginとして追加する感じで、templateをコンパイルしてくれるのでテンプレート変数の過不足が無くなるのが良い。 テンプレート変数が未定義だった場合に Scalate * SSP だとランタイムで気付けるが、Twirlだとコンパイル時点で気づける。

機能的は良いんだけど、コンパイルオプションで fatal-warningswarn-unused-import を有効にしていると、 TwirlKeys.templateImports := Nil を設定するハックをしないと unused import で怒られて使えないのが難点。

github.com

3. Beard

github.com

ScalateとTwirlに比べるとstarが少ないが、表記方法はMustacheベースで手に馴染みやすい印象。 Last releaseが2016/4で、2019/4/5現在新し目なIssueも無いのでメンテは活発では無さそうな感はある。

その他

今回はJava用のテンプレートエンジンは探してないけど、そっちも探せば他にも良さげなものはあるかも。

他にオススメあったら教えて下さい。