Webサイト制作コースのお申し込みはこちら Webサイト制作コースのお申し込みはこちら

Velocity(ベロシティ)とは

Velocityは、jakartaプロジェクトが提供すらJavaベースのテンプレートエンジンです。

雛形となるテキストを用意しておき、テキストの中で動的に変わる部分は、後述するVTL構文で記述しておきます。実行時にVTL構文で記載されているところは、そのプロパティ名などに対応するJavaオブジェクトの値に置き換えられます。

Velocityのメリット

例えば、ECサイトなどで送られる購入確認メールなどで使用するテキストは、顧客名や購入金額が異なるだけで、大部分は同じ内容になることが多いです。

Velocityを使うことで、雛形となるテキストは外部ファイル等に保存しておき、必要な時に雛形から動的に変わる部分(VTL)を置換したテキストを作成しメール配信等でつかえます。

また、固定の文言が変わる時は、外部に保存しておいた雛形ファイルを編集すれは、手軽に変更できるメリットもあります。

Velocityのインストール

それでは、Velocityをインストールしていきましょう。

VelocityはJava VM上で動作するテンプレートエンジンであるため、事前準備としてJDK(Javaの開発環境)が必要です。

Velocityのダウンロードは以下のサイトで行います。
http://velocity.apache.org/download.cgi

ページ中段のほうにある「Binaries」から「velocity-engine-core-x.x.jar」のリンクをクリックしてjarファイルをダウンロードします。(x-xはバージョン)

MavenでVelocityのインストール

Mavenを使って、パッケージ管理している場合はpom.xmlに次の設定を追加します。

<dependency>
  <groupId>org.apache.velocity</groupId>
  <artifactId>velocity-engine-core</artifactId>
  <version>2.2</version>
</dependency>

Velocityを使ってみよう

今回は、次のような予約確認メールのテキストを、雛形のファイルから作るサンプルコードを作ります。

この度は、当店のご予約ありがとうございます。
お客様のご予約日時は次の通りです。

お客様ID: 12345678
お客様名: 山田 太郎 様
予約日時: 2021年1月2日 11時00分

ご来店をお待ちしております。

STEP1. 予約確認メールの雛形(.vm)を作る

予約確認メールの内容から、送信メールごとに動的に変わる部分をVTL(Velocity Template Language)で変数化した雛形ファイルを作成します。VTLについては後述する内容で解説しますが、動的に変わる部分を「$」から始まる変数名で記述します。

この度は、当店のご予約ありがとうございます。
お客様のご予約日時は次の通りです。

お客様ID: $reserve.Id
お客様名: $reserve.Name 様
予約日時: $reserve.reserveTime

ご来店をお待ちしております。

雛形の作成ができたら、mail.vmというファイル名で保存しておきましょう。

STEP2. 予約データモデル(Javaクラス)を作る

次は、予約データを保持するReserveクラスを作成します。
ここで宣言するプロパティ名は、先ほど作成した雛形ファイルのVTLで定義した変数名と一致させておく必要があります。

/**
 予約データクラス
*/
public class Reserve {
    private String id;         // お客様ID
    private String name;       // お客様名
    private Date reserveTime;  // 予約日時

    public Reserve(String id, String name, Date reserveTime) {
        this.id = id;
        this.name = name;
        this.reserveTime = reserveTime;
    }
    public String getId(){
        return id;
    }
    public String getName(){
        return name;
    }
    public Date getReserveTime(){
        return reserveTime;
    }
}

STEP3. 雛形ファイルとモデルをマージして出力

雛形ファイルとモデルクラスの準備ができたら、最後はこの2つをマージする処理を記述していきます。

import java.io.StringWriter;
import org.apache.velocity.Template;
import org.apache.velocity.VelocityContext;
import org.apache.velocity.app.Velocity;
import org.apache.velocity.exception.ResourceNotFoundException;
import org.apache.velocity.exception.ParseErrorException;
import org.apache.velocity.exception.MethodInvocationException;

public class Sample{
    public static void main(String args[]){
        // 予約データを作成
        Reserve reserve = new Reserve("1234567", 
                                      "山田 太郎",
                                      "");
        //Velocityのエンジンを初期化します。
        Velocity.init();

        //コンテキストに予約データを設定します。
        //ここで指定する名前は、雛形ファイルで指定したVTLの名前と合わせる必要があります。
        VelocityContext context = new VelocityContext();
        context.put("reserve", visitor);

        StringWriter sw = new StringWriter();
        //テンプレートの読込
        Template template = Velocity.getTemplate("order.vm", "EUC-JP");
        //テンプレートとデータをマージ
        template.merge(context,sw);
        //マージ結果をコンソールに出力
        System.out.println(sw.toString());
        sw.flush();
  }
}

VTL構文を詳しく知る

前のサンプルコードでは、$変数名で動的な値を定義する構文のみを使用しましたが、VTLにはさまざまな構文があり、ifによる分岐や、foreachでコレクションの数だけ繰り返す処理など、柔軟な制御が行えるようになっています。

変数を出力

変数を出力する構文には、大きく次の2つがあります。

構文 説明
$変数名 変数の値を出力します。
変数の値がない時は$変数名がそのまま出力されます。
$!変数名 変数の値を出力します。
変数の値がない時は、何も出力されません。
ポテパンダの一言メモ

変数を出力する構文について、${変数名}$!{変数名}など、本来は中括弧をつけるのが正しい構文ですが、一般的には中括弧は省略して使われています。

条件分岐

#if#elseif#elseを使って条件によって出力内容を切り替えることも可能です。

#if( $score >= 80 )
$score 点です。すばらしい。
#elseif( $score >= 50 ) 
$score 点です。がんばりました。
#else
$score 点です。もう少し頑張りましょう。
#end

条件には、==、=、>、<、<=、>=などの比較演算子が使用可能です。

公式ドキュメントも確認してみよう

VelocityのVTL構文には、この記事では紹介しきれないほどに便利な構文が多数あります。

構文の詳細を確認したい場合は、次の公式ドキュメント(英語)を参照すると、すべてのVTL構文についての説明がありますので、こちらもチェックしてみましょう。

http://velocity.apache.org/engine/devel/vtl-reference.html

【関連記事】
java.util.dateクラスについて|使い方やjava.sql.dateとの違いを解説!

エンジニアになりたい人に選ばれるプログラミングスクール「ポテパンキャンプ 」

ポテパンキャンプは卒業生の多くがWebエンジニアとして活躍している実践型プログラミングスクールです。 1000名以上が受講しており、その多くが上場企業、ベンチャー企業のWebエンジニアとして活躍しています。

基礎的な学習だけで満足せず、実際にプログラミングを覚えて実践で使えるレベルまで学習したいという方に人気です。 プログラミングを学習し実践で使うには様々な要素が必要です。

それがマルっと詰まっているポテパンキャンプでプログラミングを学習してみませんか?

卒業生の多くがWebエンジニアとして活躍

卒業生の多くがWeb企業で活躍しております。
実践的なカリキュラムをこなしているからこそ現場でも戦力となっております。
活躍する卒業生のインタビューもございますので是非御覧ください。

経験豊富なエンジニア陣が直接指導

実践的なカリキュラムと経験豊富なエンジニアが直接指導にあたります。
有名企業のエンジニアも多数在籍し品質高いWebアプリケーションを作れるようサポートします。

満足度高くコスパの高いプログラミングスクール「ポテパンキャンプ」

運営する株式会社ポテパンは10,000人以上のエンジニアのキャリアサポートを行ってきております。
そのノウハウを活かして実践的なカリキュラムを随時アップデートしております。

代表の宮崎もプログラミングを覚えサイトを作りポテパンを創業しました。
本気でプログラミングを身につけたいという方にコスパ良く受講していただきたいと思っておりますので、気になる方はぜひスクール詳細をのぞいてくださいませ。