6. Velocimacro
2006.01.05 株式会社四次元データ 里見玲爾
- 6.1. Velocimacroとは
- 6.2. Velocimacroの定義
- 6.3. Velocimacroの設定
この章では、Velocimacroについて解説します。
6.1. Velocimacroとは
Velocimacro(VMとも呼ばれる)とはVelocityで定義できるマクロのことで、 マクロとは特定の操作手順をプログラムとして記述して自動化することです。 よく使う処理をマクロとして保存しておけば、 マクロを呼び出すことで簡単にその処理を行えるようになります。
テンプレートで使用できるVelocimacroには、 設定ファイルのほうから読み込んだVelocimacroと、 テンプレートのvmファイル内(インラインと呼ぶ)で定義されたVelocimacroの2種類があります。 設定にもよりますが、設定ファイルのほうから読み込んだVelocimacroはすべてのテンプレートファイルで使用可能ですが、 インラインで定義されたVelocimacroはその定義されたテンプレートファイル内でしか認識されないため、 他のテンプレートファイルでは使用できません。
設定ファイルから参照する場合には、 設定ファイル内のvelocimacro.libraryの部分にVelocimacroを定義したvmファイルのパスを指定します。 通常このときのvmファイルは、マクロの定義のみのファイル(テンプレートライブラリ、Velocimacroライブラリなどとも呼ばれる)とします。 一方、インラインでVelocimacroを定義する場合には、使用するvmファイル内でVelocimacroを定義するだけです。
次の節ではvmファイルでVelocimacroを定義する方法を解説します。
6.2. Velocimacroの定義
Velocimacroを定義するには、vmファイル内に#macro指示子を使って次のような形で記述します。
#macro( vmname $arg1, $arg2, ..) [ VTLコード.. ] #end
vmnameはVelocimacroを利用する際の名前で、$arg1、$arg2,..の部分は引数を表しています。
引数は複数指定可能ですが、実際呼び出す際の引数と一致する必要があります。
[ VTLコード.. ]にはVelocimacroとして認識させる処理(VTLやテキストなど)を記述します。
またVelocimacroの定義の()の中には、#で始まるVTL指示子は使えません。
このVelocimacroを呼び出すときには次のように記述します。
#vmname($arg1, $arg2, ..)
では実際にVelocimacroを定義してみましょう。
例 #macro(easyMacro $group) #foreach($human in $group) velocityCount : $human.name #end #end
この例では4章の#foreachであげた例のように、 groupに格納されている人(Human)オブジェクトの名前(name)を列挙するようなVelocimacroを、 easyMacroとして定義しています。 このeasyMacroを呼び出すには以下のように記述します。
#easyMacro($groupA)
6.3. Velocimacroの設定
設定ファイルの設定によって、Velocimacroの扱いを変更することができます。主に設定できる内容は以下のようなものです。
設定 | 解説 | デフォルト値 |
---|---|---|
velocimacro.library | Velocityエンジンの初期化のときに読み込むテンプレートライブラリのパスを指定します。 | VM_global_library.vm |
velocimacro.permissions.allow.inline | テンプレートの中で#macro指定子によりVelocimacroを定義可能かどうかを指定します。 | true |
velocimacro.permissions.allow.inline.to.replace.global | Velocityエンジンの初期化の際に読み込んだテンプレートライブラリで定義されたVelocimacroを、 インラインで定義されたVelocimacroで上書きできるかを指定します。 | false |
velocimacro.permission.allow.inline.local.scope | インラインで定義されたVelocimacroが、定義されたテンプレートでのみ有効かどうかを指定します。 trueのとき、Velocimacroは定義されたテンプレートでのみ有効です。 | false |
velocimacro.context.localscope | Velocimacro内でVelocityContextの値に変更を与える場合(#set指定子などによる)、 その変更をVelocimacro内のみの一時的な変更とするか、永続的な変更とするかどうかを指定します。 | false |
設定ファイルで設定できる他の内容については、10章「Velocityの設定キー」で詳しく解説します。