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