FreeMarker Template Language 入門(1)
パッケージJava製品開発担当の大です。こんにちは。
以前このブログで書いたEclipseで帳票開発(6)という記事の中で、「シーオーリポーツIDEプラグイン for Eclipseの帳票クラスウィザードでは、FreeMarker Template Language(以下 FTL)を使用してテンプレートを記述する」という話をしました。
今回から、何回かにわけてこのFTLについて紹介していこうと思います。
FTLって何?
FTLは、FreeMarker Template Language という名前が示すとおり、FreeMarkerのテンプレート言語です。
FreeMarkerは、Javaベースの汎用のテンプレートエンジンです。The Visigoth Software Societyによりオープンソース(BSDスタイルのライセンス)で開発が行われています。
同様のツールには、Apache Velocityがあります。こちらもオープンソース(Apacheライセンスv2)で開発が行われています。
FreeMarkerやApache Velocityを使用すると、テンプレートファイルにデータを結合して、結果のテキストを得ることが出来ます。文章で書くとシンプルですが、実はとても強力なツールです。
FreeMarkerのインストール
こちらから、FreeMarkerの最新版をダウンロードしてきます。アーカイヴ(tar.gz形式になっています)を展開し、libフォルダにある「freemarker.jar」にクラスパスを通せば、インストールは完了です。
簡単な使用例
それでは早速、簡単なFTLで記述したテンプレートファイル(greeting.ftl)と、それを処理するプログラム(Greeting.java)の例を見てみましょう。
greeting.ftl:
こんにちは、 ${user}さん!
Greeting.java:
package test;
import java.io.File;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.util.HashMap;
import java.util.Map;
import freemarker.template.Configuration;
import freemarker.template.Template;
public class Greeting {
public static void main(String[] args) throws Exception {
Map<String, String> root = new HashMap<String, String>();
root.put("user", "大");
process("greeting.ftl", root);
}
private static void process(String template, Map<String, ?> data) throws Exception {
Configuration cfg = new Configuration();
cfg.setDirectoryForTemplateLoading(new File("c:\\template"));
Writer out = new OutputStreamWriter(System.out);
Template temp = cfg.getTemplate(template);
temp.process(data, out);
out.flush();
}
}
greeting.ftlを、Greeting.javaの21行目で指定した場所に置いて、このプログラムを実行すると、
こんにちは、大さん!
と、コンソールに出力します。見てのとおり、「user」というキーに結び付けられた値をテンプレートに結合して出力しているだけです。簡単ですね。データの渡し方はいくつか方法があるのですが、ここではHashMapに格納して渡しています。
ここでは、単に与えられた値を結合しているだけですが、FTLでは、条件分岐やループを使用したり、独自のマクロや関数を定義したりすることも可能です。次回以降は、FTLのそういったさまざまな機能を順に見ていこうと思います。