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のそういったさまざまな機能を順に見ていこうと思います。