このすみ技術ろぐ

とあるWebエンジニアが、技術や趣味について書くブログです。

汎用テンプレートエンジンmustacheについて

とある理由から複数プログラミング言語で使えるテンプレートエンジンを探しているのですが、その結果mustacheに行き着きました。

本格的にコーディングをしてみるのは来週からなのですが、イントロを兼ねて書いてみます。

qiita.com

対応言語が多い

テンプレートエンジンを調査していて感じたことなのですが、そもそも複数プログラミング言語で使いまわせるテンプレートエンジン自体が、ほとんど見つけられません。

そんな中たどり着いたのがmustacheなのですが、対応言語が多すぎて驚きました。

Available in Ruby, JavaScript, Python, Erlang, Elixir, PHP, Perl, Raku, Objective-C, Java, C#/.NET, Android, C++, CFEngine, Go, Lua, ooc, ActionScript, ColdFusion, Scala, Clojure[Script], Clojure, Fantom, CoffeeScript, D, Haskell, XQuery, ASP, Io, Dart, Haxe, Delphi, Racket, Rust, OCaml, Swift, Bash, Julia, R, Crystal, Common Lisp, Nim, Pharo, Tcl, C, ABAP, Elm, Kotlin, and for SQL
https://mustache.github.io/ より

書き方はいたってシンプル

JavaScript版のサンプルコードを引用しますが、テンプレートエンジンとしては、いたってシンプルです。

var Mustache = require('mustache');

var view = {
  title: "Joe",
  calc: function () {
    return 2 + 4;
  }
};

var output = Mustache.render("{{title}} spends {{calc}}", view);

github.com

実際の書き方については、「mustache記法について簡単にまとめてみた」のQiita記事が分かりやすかったです。

qiita.com

インストールは難しくない

インストール方法は各言語によって違いますが、主要言語ではエコシステムが使えます。

# Ruby
$ gem install mustache
# JavaScript
$ npm install mustache --save
# PHP
php composer.phar require mustache/mustache

ロジックが書けない

mustacheは「Logic-less templates.」なので、Sectionを使っやシンプルな配列ループや簡易的な変数判定はできますが、ロジック自体は書けません。

そのためロジックは、テンプレートエンジンに値を渡すプログラミング言語側で事前実行し結果だけをmustacheに渡すか、callableな関数を用意する必要があります。

ただし、これはテンプレートエンジンの思想設計レベの話なので、デメリットに感じるかどうかは人によります。

まとめ

ロジックが書けないという特徴はあるものの、対応しているプログラミング言語が多いので、移植性の高いテンプレートエンジンとしてはmustache良さそうです。

今後は実践投入を予定していますので、実際に書いてみた結果、何かあれば随時共有したいと思います。