Docurain Labo

Docurainサービス開発日記

わかりやすいテンプレートのために - 式リテラルのご紹介

Docurainのテンプレート

DocurainではExcelテンプレートに差し込みたいデータの位置をプレースホルダーとして記述します。

また、出力する帳票の行を動的に増やす、特定の条件のときだけ表示する、などの動的な部分は組み込みのマクロ命令により実現します。 このマクロ命令はVelocityに準拠しています。

式リテラル

今回ご紹介する式リテラルはこのVelocityの制約を突破するために追加されたDocurain独自の機能です。 Velocityの制約とは、いわゆる「式」を使える箇所が限られている点です。

通常、式を指定できるのは

#if($a < 0) ... #end
#set($b = $a + 1)

のような箇所だけです。つまり、

$a 足す 1 は $a + 1 です。
#set($list = [$a, $a + 1, $a + 2])

のような記述ができず、

#set($plus1 = $a + 1)
#set($plus2 = $a + 2)

$a 足す 1 は $plus1 です。
#set($list = [$a, $plus1, $plus2])

のように回りくどい書き方になります。なかなかキツいですねこれは。

https://s3.ap-northeast-1.amazonaws.com/site.docurain.jp/blog/2020/08/スクリーンショット-2020-08-31-14.27.10.png

エンジニアは怠惰であるべき。怠けるために全力を出した結果、生み出されたのが「式リテラル」です。

使用例

式リテラルは、バッククオート ` で囲んだ文字列がそのまま値として評価されます。*1

↑のテンプレートを式リテラルを使用することにより簡潔にすることが可能です。

https://s3.ap-northeast-1.amazonaws.com/site.docurain.jp/blog/2020/08/スクリーンショット-2020-08-31-14.41.40.png

#set($plus1 = %{num} + 1)
%{num} 足す 1 は $plus1 です。
%{num} 足す 1 は `%{num} + 1` です。
#set($b = %{a} + 1)
#set($c = %{a} + 2)
#set($list = [%{a}, $b, $c])
#set($list = [%{a}, `%{a} + 1`, `%{a} + 2`])

のように記述できるようになりました。

スッキリしてわかりやすくなりましたね! Javascriptのテンプレートリテラルに似せたデザインにしたので、違和感も少ないかと思います。

他にも様々な機能がありますので、ぜひアカウント無料登録してマニュアルを参照しお試しください。

*1:現在のところバッククオートのエスケープはできません。すなわち、バッククオートを含む式リテラルは使用できません。