= Tempura - TEMPlate Utility for Ruby Application
[((<リファレンス|URL:references.ja.html>))]
[((<変更履歴|URL:changes.ja.html>))]
[((<ダウンロード|URL:http://www.fobj.com/tempura/files/>))]
最新バージョンは 0.1.2r3 です。
== 概要
Tempura は、XML(XHTMLなど)で書かれたテンプレートと実データ(任意のオブ
ジェクト)を結び付け、生きたXML文書を生成するための、いわゆるテンプレー
トライブラリです。オブジェクト指向スクリプト言語Ruby用のライブラリとし
て実装されています。
=== 特色
: プレビュー可能なXML形式の文書によるテンプレート
Tempuraでは、XML準拠形式((- REXMLライブラリでパース可能な形式-))の
テキストをテンプレートとします。テンプレートは、そのままWEBブラウ
ザでプレビューすることが可能です。また多くのHTMLエディタでの編集も
可能(なはず)です。テーブルなどで検索結果を列挙するようなビューのプ
レビューにも対応できるように工夫されています。
: 数種類の特別な属性名を持つXML属性のみが展開に作用
Tempuraでは、テンプレート内の特定のXML属性だけが展開に作用します。
Tempura用のXML属性は、どのXML要素に対しても効果を与えることができ
ます。展開に作用するXML属性名には、他のソフトウェアやCSSと比較的衝
突しにくい名前を採用しています。
: モデルデータは任意のRubyオブジェクト
配列やハッシュだけでなく任意のRubyオブジェクトを、モデルデータとし
てそのまま使用可能です。
: ビューとモデルの分離
画面デザインとアプリケーションロジックを明確に分離できます。見た目
を重視するようなWEBアプリケーションの開発において、画面デザイン担
当者(WEBデザイナー)とプログラマの作業が、それぞれ影響されにくく独
立してすすめやすくなります。
: イベント駆動型WEBアプリケーションのサポート
WEBアプリケーションをイベント駆動のGUIアプリケーションという視点で
見たときに、ユーザの操作によるイベントを簡単に扱う仕組みを持ってい
ます。この仕組みは、HTMLのa要素やform要素によるユーザのアプリケー
ション操作とメソッド呼び出しの関係の抽象化をサポートします。
: WEBアプリケーションフレームワークDiv用のライブラリ部品
WEBアプリケーションフレームワークDivのためのライブラリ部品を装備し
ています。Divのテンプレートとして、Erbに加えて、プレビュー可能な
HTMLを使うことが可能になります。
=== 開発の理由
特色のところを読んで、どこかで読んだことのある文句だと感じた方も多いか
もしれません。Tempuraと同種のテンプレートライブラリはすでに数多く存在
します。Tempuraに比較的近いもの・Tempuraが影響を受けているものとしては、
Ruby用のテンプレートライブラリである
(())や
(())などがあげられま
す。
では、なぜあえて新たにTempuraを作ったのでしょうか?理由は、amrita や
XTemplateなどに見られる利点である「プレビュー可能なテンプレート」と、
Ruby で書かれたWeb アプリケーションフレームワークDivなどに見られる利点
である「ユーザ操作を抽象的に扱うイベント駆動型プログラミング」を同時に
行いたい、というところにありました。
DivのGUIアプリケーション風イベント駆動型プログラミングでは、eRuby で記
述したビューから a や form などのメソッドを呼ぶことにより、
type='hidden' を持つinput要素を利用したメソッド呼出へのマッピングなど
の泥くさい部分を隠すことができます。ユーザによる操作((-Tempura ではイ
ベントと呼びます-))が抽象化され、対応するメソッド呼出との関係をシンプ
ルに扱うことができるわけです。しかし、eRuby によるビューは、HTMLとして
特殊な構文のために、視覚上のデザインをそのままHTMLブラウザで確認するこ
とができません。
一方、amirtaやXTemplateでは、テンプレート(ビュー)はそのままHTMLであり、
「視覚上のデザインをそのままHTMLブラウザで確認」することができます。し
かし、テンプレートの中で、ユーザによる操作(イベント)をメソッド呼出にマッ
プするためには、form要素・hidden型のinput要素・a要素のhref属性などを、
生のHTMLとして記述する必要が出てくるでしょう。
こういったことをふまえた上で、Tempuraは
* プレビュー可能なテンプレート
* Webアプリケーションでのユーザ操作の抽象化
を考慮したテンプレートライブラリとして、作成されました。
== 使用例
=== テンプレート:
| name | author |
| (will be replaced with a name of each item) |
(will be replaced with an author of each item) |
=== モデル:
class Item
attr_reader :name, :author
def initialize(name, author)
@name = name
@author = author
end
end
class ItemContainer
attr_reader :items
def initialize
@items = []
end
def add(name, author)
@items << Item.new(name, author)
end
end
=== 実データ:
data = ItemContainer.new
data.add("Ruby", "matz")
data.add("Perl", "Larry Wall")
data.add("Python", "Guido")
=== 展開:
tmpl = Tempura::Template.new( テンプレート )
tmpl.default_action = "myapp.cgi"
puts tmpl.expand(data)
=== 出力 (= テンプレート + 実データ):
| name | author |
| Ruby |
matz |
| Perl |
Larry Wall |
| Python |
Guido |
== ドキュメント
* ((<リファレンスマニュアル|URL:references.ja.html>))
* ((<変更履歴|URL:changes.ja.html>))
== 実行環境
=== 最低限必要なソフトウェア
* Ruby - 1.6 以降
* REXML - XMLパーサ。Ruby 1.8 には標準添付
=== ユニットテストを実行するために必要なソフトウェア
* Test::Unit - ユニットテストのためのライブラリ。Ruby 1.8 には標準添付
* uconv - utf8とeucの変換のためのライブラリ
=== より便利に使うために推奨するソフトウェア
* Div - WEBアプリケーションフレームワーク
* WEBrick - HTTPサーバーとして簡単に使える。Ruby 1.8 には標準添付
それぞれ以下からダウンロード可能です。
* Ruby - (())
* REXML - (())
* Test::Unit - (())
* uconv - (())
* Div - (())
* WEBrick - (())
== ダウンロード
(())からダウンロードできます。
== インストール
$ ruby install.rb
-dオプションでインストール先を指定することができます。
$ ruby install.rb -d {anywhere}
== ライセンス
Tempuraに含まれるソースコードおよびドキュメントは藤本尚邦が著作権を保持
します。それらのファイルは GNU Lesser General Public Licence version 2
に従って配布するものとします。
== 免責事項
本プログラムは無保証です。作者は、本プログラムをサポートする意志はあり
ますが、プログラム自身のバグ、あるいは、本プログラムの実行などから発生
するいかなる損害に対しても責任を持ちません。
== ホームページ
(())
藤本尚邦