Template Engineの比較(Java)
MementoWeaverもそろそろメメントの生成処理を実装する時期になったようなので、採用するテンプレートエンジンを選定する。
最低の条件としては、Java SEから使用可能であることのみ。
MWの前身であるHPCMSではApache Velocity(1.6.2)を使用していた。
特にVelocityに不満があるわけでもないが、結局のところ今回はスクラッチから作り直しているので、HPCMSのvelocityテンプレートもそのまま流用というわけにはいかず、一応比較してみることにする。
選択肢
簡単にググッてみたところ、メジャーなものには以下がありそう。
最低条件はJavaSEからの利用だが、他の評価軸としては以下を考慮したい。
- コミュニティの活発度
- 対応するテンプレートの種別
- 導入に伴うハードルの高さ
コミュニティの活発度(2013.3.20現在)
選択肢 | 公式ページ | Version | 最終更新 |
---|---|---|---|
Apache Velocity | Apache Velocity Site - The Apache Velocity Project | 1.7 | 2010.11 |
FreeMarker | FreeMarker: Java Template Engine Library - Overview | 2.3.19 | 2012.2 |
Thymeleaf | Thymeleaf: java XML/XHTML/HTML5 template engine | 2.0.16 | 2013.2 |
Mayaa | JavaServer Templates "Mayaa" | 1.1.30 | 2013.1 |
Mustache.java | spullara/mustache.java · GitHub | (github) | (github) |
こう比較するとVelocityの更新が滞っていることが目立つ。
Mustache.javaはGitHub上でリポジトリが公開されているのみで、特にリリースバージョンとかを切っている様子ではなさそう(きちんと調べていない)。
対応するテンプレートの種別
上記5種の選択肢のうち、以下は使用シーンが特定されている様子。
導入に伴うハードルの高さ
- Velocity
- Commonsなどのライブラリに依存関係があるけど、ダウンロードパッケージ内にvelocity-1.7-dep.jarとして依存関係解決済みのjarがある(前回もそれを使った)ので、単純に1つのjarにクラスパスを通すだけ。(788KB)
- FreeMarker
- こちらもダウンロードパッケージ内にlib/freemarker.jarがあるのでそこにパスを通すのみ。(910KB)
- Thymeleaf
- こちらは以下のライブラリに依存している。何れもダウンロードパッケージにバンドルされている。(本体:694KB,+依存Lib:891KB)
- ognl 3.0.5 or later
- javassist 3.16.1-GA or later
- slf4j 1.6.1 or later
結論(Justification)
- Mavenを必要とするMustache.javaは(自分にとっては)導入のハードルが高い。
- MW以外でもテンプレートエンジンを利用する機会は想定されることからHTML/XML系に限定されるThymeleafは次点。依存ライブラリが多いのも一寸評価が下がる。
- Apache Velocityは最終リリースが3年前。活発度については不安が残る。
- FreeMarkerは約1年前にリリース。SourceForge上も2012.12月に更新されているが、「This release contains two important security workarounds that unavoidably make it obvious how some applications can be exploited. 」がまだ解消されていないという点で活発度については疑問符がつく。
現時点では一長一短ではあるのだが、Mavenを要するMustache.javaは今回は見送り。
汎用テンプレートエンジンであることを評価し、Thymeleafは見送り。
活発度はFreeMarkerの方が比較的高いように見受けられるが、セキュリティ上の問題が顕在化して対応しきれていない点を考慮して、Velocityを今回は採用する*3こととする。