Shoeisha Technology Media

CodeZine(コードジン)

特集ページ一覧

テンプレートエンジンNVelocityを活用してテキストを生成する

NVelocityを利用して保守性の高いアプリケーションを構築する

  • LINEで送る
  • このエントリーをはてなブックマークに追加

本稿では、雛形(テンプレート)として用意しておいたテキストファイルをアプリケーションの実行時に読み込み、動的に値を埋め込める「NVelocity」というプロダクトを紹介します。NVelocityを利用すると、柔軟なテキストの生成や、保守性の高いアプリケーションの構築が可能になります。

目次

はじめに

 テキストを生成するアプリケーション(メールの本文やソースコード生成など)を作る場合、プログラム中でテキストを結合する方法が一般的です。しかし、長いテキストをプログラムで編集することは思いのほか面倒ですし、内容を変更する場合には再コンパイルを行わなければなりません。

 そこで本稿では、雛形(テンプレート)として用意しておいたテキストファイルをアプリケーションの実行時に読み込み、動的に値を埋め込める「NVelocity」というプロダクトについて紹介します。NVelocityを利用すると、単純な文字列の挿入だけではなく、条件分岐、繰り返し、メソッド/プロパティの戻り値の利用など柔軟なテキスト生成が可能になります。また、プログラムを変更することなくテキストを変更できるため、保守性の高いアプリケーションを構築できます。

対象読者

 Visual Studio(.NET)にて開発を行っている方、テキストの効率的な生成、ソースコードの自動生成などに興味がある方を対象としています。

サンプルの概要

 ダウンロードサンプルは、入力内容に合わせて、メールの文面を生成するアプリケーションです。ボタンを押すとメールの本文が生成されます。

 

必要な環境

 このサンプルはVisual Studio .NET 2003と、NVelocityのバージョン0.5にて動作確認をしています。NVelocityは同梱していますので、NVelocityを改めて入手することなく簡単に動作を確認することができます。

 本稿では、C#で解説していますが、VisualBasicのソースもサンプルには含まれています。また、Visual C#(Visual Basic) 2005 Express Editionでも動かすことができます(最初にプロジェクトをアップグレードするウィザードが表示されます)。

 もし、自分でNVelocityを導入する場合は、後述するCastleプロジェクトからダウンロードできるファイルの[SharedLibs]-[nvelocity]フォルダに含まれる「NVelocity.dll」に参照設定をしてください。

NVelocityの入手方法

 NVelocityは、JavaベースのVelocityを.NETで利用できるように移植したオープンソースライブラリです。Sourceforgeにて開発されていましたが、残念なことに2003年10月のバージョン0.42以降、Sourceforgeではバージョンアップが停滞しています。

 現在の最新版0.5は、Castleプロジェクトが開発しているMonoRail(Railsの.NET版)のソースコードに同梱されています。このバージョンでは、依存DLLの切り離し、バグフィックス、VS 2005対応などが行われています。本稿では、このCastleが提供しているバージョン0.5を利用しています。

 なお、NVelocityバージョン0.5のソースコードは、CastleプロジェクトのSVNレポジトリから参照することができます(まとめてダウンロードしたい場合は、TortoiseSVNなどのツールを利用するとよいでしょう)。

NVelocityの特長

 NVelocityは、定型的なテキストを効率良く生成することができるテンプレートエンジンの一つです。テンプレートエンジンとは、あらかじめ用意しておいた雛形(テンプレート)に動的に値を設定できる仕組みで、Java、Perl、Ruby、PHPといった他の言語では、Webデザインとロジックを分離する用途で広く利用されています。

 NVelocityの長所について整理してみましょう。

 

プログラムとデザインが容易

 テキストの生成をプログラムにハードコーディングすると、改行、タブ、クォーテーションマークなどを\r\n、\t、\"などのようにエスケープする必要があるため手間がかかります。また、変数などの値を代入する場合にも+演算子で文字列を結合したり、StringBuilderクラスとString.Formatメソッドによる整形をする必要があります。

 これに対して、出力後のイメージに近いテンプレートファイルを使うNVelocityでは、デザインの確認が容易にできますし、変数の代入もNVelocityが実行してくれます。

保守性の高さ

 また、テンプレートファイルによる保守性の高さもNVelocityの魅力の1つです。プログラムにハードコーディングしていないので、生成するテキストの変更が発生したとしても、テンプレートファイルの変更だけすれば良く、プログラムを変更する可能性が低くすみます。

豊富な機能

 テキストファイルを読み込んで値を代入するだけであれば、NVelocityを使う必要がないと思われるかもしれません。しかし、NVelocityには、次のような高度な機能も備わっています。

  • if文による条件分岐
  • foreach文による繰り返し
  • プロパティ、メソッドの値の設定
  • 変数の利用
  • アセンブリの埋め込みドキュメントであるテンプレートも読み出し可能

 このように、テキストを生成する場合には、テンプレートエンジンは有用であることがお分かりになると思います。


  • LINEで送る
  • このエントリーをはてなブックマークに追加

著者プロフィール

  • WINGSプロジェクト 青木 淳夫 (株式会社ネクストスケープ)(アオキ アツオ)

    <WINGSプロジェクトについて> 有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2018年11月時点での登録メンバは55名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂...

  • 山田 祥寛(ヤマダ ヨシヒロ)

    静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for ASP/ASP.NET。執筆コミュニティ「WINGSプロジェクト」代表。 主な著書に「入門シリーズ(サーバサイドAjax/XMLD...

All contents copyright © 2005-2018 Shoeisha Co., Ltd. All rights reserved. ver.1.5