前回,JavaSE6 新機能の一つである Scripting について紹介した。今回はそのScripting機能から利用可能な Velocity を紹介しよう。

メール送信やWebページ生成を簡単に

 皆さんはJavaアプリケーションにおいて,メール送信やHTTPレスポンスページの生成をどのように実装されているだろうか。

 メール送信処理においては,定型的な文面に動的な情報を埋め込み送信する文面を生成していることだろう。また,HTTPレスポンスページの生成においてもほぼ同様であろう。前者を独自に実装したり,後者をJSPで実装するのが一般的な解かもしれない。

 しかし,このような処理をもっと簡単に行えるプロダクトがある。これがテンプレートエンジンとよばれるもので,動的な情報をファイルなどに埋め込むための処理を実行してくれるものだ。テンプレートエンジンを利用すれば,ファイル内に動的な情報を簡単に埋め込めるようになり,メールの文面やHTTPレスポンス用のHTMLのみでなく,SQLの生成やスクリプトプログラムを動的に生成することすら可能となる。

 今回紹介するVelocity は Apache Software Foundation にて開発されているテンプレートエンジンであり,既に多くの実績をもつ非常に安定したプロダクトだ。また,冒頭でも紹介したように JavaSE6のScripting機能から呼び出すことが可能となっている。本稿ではこの機能を利用してVelocityを実行する方法を紹介する。

Velocityの概要

 Velocityは冒頭で述べたようにテンプレートエンジンだ。Velocityテンプレート言語(VTL)と呼ばれる専用の言語が記述されたファイル(テンプレート)を読み込み,適切な置き換え処理を行う。すなわち,プログラミング言語処理と言うよりも,文字列の置き換えを得意とするものと考えて頂ければよいだろう。

 Velocityを利用する場合,テンプレート作成者はVTLを用いてテンプレートを作成することになる。しかし,言語学習の心配をする必要はない。VTLは非常にシンプルかつ直感的で理解しやすい言語であり,誰でもすぐに使いこなせるようになっている。

 もともと Velocityは J2EEアプリケーションのMVCモデルにおけるビューの役割をレンダリングのみに徹底させ,デザイナとの完全な役割分担を可能とするように設計されたプロダクトだ。このときプログラミング言語を熟知していないデザイナでもビュー部分が作成できるようにと,非常に単純な言語となっている。

 Velocityの基本的な機能は,テンプレートに埋め込む情報が登録されたコンテキストとテンプレートファイルをマージし,テンプレートファイル内にVTLで記述された部分がコンテキストの内容と置き換える機能である。例えば,(リスト:テンプレートファイル)のようなテンプレートファイルを用意し,Velocityのコンテキストに hello という保存名で“こんにちは”という文字列(Stringオブジェクト)を登録し両者をマージすると,(リスト:生成される文面)のような文面が得られる。

 テンプレート内の$で始まる変数が置き換え対象であり,同名のオブジェクトがVelocityのコンテキストに保存されていた場合にはその値に置き換えられるのである。

テンプレート(hello.vm)

$hello

これはVelocityで生成されました

生成される文面

こんにちは

これはVelocityで生成されました

 置き換えの例からも分かるように,Velocityは$で始まる文字を置き換え操作の対象とし,同名の情報がコンテキストに存在する場合は,その情報を置き換えるのだ。実際には,単純な置き換え以上の機能を提供しており,VTL(Velocity Template Language) と呼ばれる,単純だが非常に強力な言語を用いてテンプレートを記述することになる。