[応用機能]テンプレートエンジン

アプリケーション開発において、文字列の編集を行う事が多々あります。 java.lang.StringBuilderを使った文字列編集プログラムは、編集後に出来上がる文字列を直感的に捉える事が困難で、可読性が高いものではありません。

  1. String toName = "にんばす太郎";
  2. String date = new java.text.SimpleDateFormat("yyyy/MhM/dd").format(new java.util.Date());
  3. String[] items = new String[]{"商品1", "商品2"};
  4. String fromName = "にんばす花子";
  5. StringBuilder buf = new StringBuilder();
  6. buf.append(toName).append(" 様\n");
  7. buf.append(" ").append(date).append(" \n");
  8. buf.append(" お買い上げ商品").append(" \n");
  9. for(String item : items){
  10. buf.append(" ・").append(item).append(" \n");
  11. }
  12. buf.append("\n ").append(fromName);
  13. return buf.toString();

テンプレートエンジンは、文字列編集に特化した言語エンジンを持ち、編集対象の文字列にテンプレート言語を織り交ぜて記述するテンプレートと、そこに埋め込むデータをマージする事で、文字列編集ができます。
以下、上の例における、テンプレートエンジンを使ったテンプレートのイメージ。
$toName様
                                      $date
 お買い上げ商品
#for($item in items)
    ・$item
#end

                                      $fromName

テンプレートとデータを渡して文字列編集する機能を抽象化したのが、TemplateEngineです。

関連するパッケージは、以下です。

アプリケーション向けインタフェース TemplateEngine

アプリケーション向けインタフェースTemplateEngineを使った簡単なアプリケーションのサンプルを示します。

  1. import java.util.Map;
  2. import jp.ossc.nimbus.core.ServiceManagerFactory;
  3. import jp.ossc.nimbus.service.template.TemplateEngine;
  4. // Interpreterを取得
  5. TemplateEngine templateEngine = (TemplateEngine)ServiceManagerFactory.getServiceObject("TemplateEngine");
  6. // テンプレートを設定する
  7. // テンプレート言語は、実装に依存する。下記は、Velocityの場合
  8. // 通常、サービス定義で設定する
  9. templateEngine.setTemplate(
  10. "template1",
  11. "$toName様\n"
  12. + " $date\n"
  13. + " お買い上げ商品\n"
  14. + "#for($item in items)\n"
  15. + " ・$item\n"
  16. + "#end\n"
  17. + "\n"
  18. + " $fromName\n"
  19. );
  20. // データを作成する
  21. Map map = new java.util.HashMap();
  22. map.put("toName", "にんばす太郎");
  23. map.put("date", new java.text.SimpleDateFormat("yyyy/MhM/dd").format(new java.util.Date()));;
  24. map.put("items", new String[]{"商品1", "商品2"});
  25. map.put("fromName", "にんばす花子");
  26. // データを渡して編集する
  27. String result = templateEngine.transform("template1", map);

実装サービスの一覧は以下のとおりです。

実装サービス実装概要
jp.ossc.nimbus.service.template.VelocityTemplateEngineServiceApache Velocityを使ったテンプレートエンジン