eRuby を使ってみよう
erubis とは eRuby (埋め込み Ruby; embedded Ruby) の処理系です.
- コンソールでの eRuby 処理系 erubis の起動(標準入力)
- コンソールでの eRuby 処理系 erubis の起動
- Ruby プログラム内からの eRuby 処理系の起動
- ERB クラスの便利な機能
HTML タグの除去, メソッドの定義
【関連する外部ページ】: http://jp.rubyist.net/magazine/?0017-BundledLibraries
* Ruby プログラミング用の開発環境として,emacs のようなエディタを使用するか, Eclipse と Eclipse の Eclipse プラグイン版 RadRails の組み合わせを薦めます.
前準備
前もってインストールしておくソフトウェア
- Ruby の処理系である JRuby のインストールあるいは Ruby のインストールが済んでいること.
- (JRuby を使うときに限り) Windows での Java JDK 18 (Java SE Development Kit 18) のインストールが済んでいること.
C:\Program Files\Java\jdk1.6.0_17 のようなディレクトリがあれば,インストール済み.
コンソールでの eRuby 処理系 erubis の起動(標準入力を使用)
【要点】
テキストファイルの中に Ruby のプログラムを埋め込むことができる.erubis を使って評価すると,Ruby のプログラムの部分が評価結果に置き換わったような新しいテキストファイルが出来ます.このことを体験しましょう.ここでは「HTML ファイルの中に『環境変数 PATH を取得する Ruby プログラム』を埋め込んだもの」を使って練習を行う.
ここで標準入力といっているのは,コンソール(つまり標準入力)からファイルを入力し,最後に EOF (end of file) を入力すると,評価結果が出力されるというもの. 手軽に試すときは便利です.
* erubis コマンドを使う場合
erb コマンドで起動できるはずです.
erb <HTML> <%= ENV['PATH'] %> </HTML> EOF (Linux 等ではコントロールキー + D, Windows ではコントロールキー + Z)
* (Windows で JRuby, erb を使いたい場合)type con | jruby c:\jruby\bin\erb による起動
type con | jruby erb <HTML> <%= ENV['PATH'] %> </HTML> コントロールキー + Z Enter キー
コンソールでの eRuby 処理系の起動(一般のファイル)
今度は,一般のファイルに格納された eRuby 形式ファイルを評価させる場合です.
* erubis <ファイル名>
* デバックしたいときは「erubis -x ...」のようにします.
Ruby プログラム内からの eRuby 処理系の起動
以上で説明したように eRuby を使うと,HTML ファイルなどのテキストファイルの生成が簡単に出来ることが実感できたでしょう. 今度は,Ruby のプログラム内から eRuby 処理系を起動し,テキストファイルを生成するということを行ってみる.
【Ruby プログラムの例】
#! ruby -Ks # coding: windows-31j require 'erb' a = 1 b = 2 c = 3 template = ERB.new <<-EOF a = <%= a %> b = <%= b %> c = <%= c %> EOF puts template.result(binding)
【実行結果の例】
次の例は,条件分岐と繰り返し処理です.eRuby プログラムの中に条件分岐と繰り返し処理を書くことが出来ます. これは便利です.
【Ruby プログラムの例】
#! ruby -Ks
# coding: windows-31j
require 'erb'
# Build template data class.
class Commodity
attr_accessor :id, :name, :type, :price
def initialize( id, name, type, price )
@id = id
@name = name
@type = type
@price = price
end
end
# Set up template data.
commodities = [ ]
commodities << Commodity.new( 1, "Fukuoka apple", "apple", 50 );
commodities << Commodity.new( 2, "Kumamoto orange L", "orange", 30 );
commodities << Commodity.new( 3, "Kumamoto orange M", "orange", 20 );
commodities << Commodity.new( 4, "Fukuoka melon", "melon", 80 );
# Create template.
template = ERB.new <<-EOF
<html>
<head><title>Commodities</title></head>
<body>
<h1>Commodities</h1>
<table>
<tr>
<td>id</td> <td>name</td> <td>type</td> <td>price</td>
<% commodities.each do |f| %>
<tr>
<td> <%= f.id %></td>
<td> <%= f.name %></td>
<td> <%= f.type %></td>
<td>
<% if f.price < 30 %>
<b>Only <%= f.price %>!!!</b>
<% else %>
<%= f.price %>
<% end %>
</td>
</tr>
<% end %>
</table>
</body>
</html>
EOF
puts template.result(binding)
【実行結果の例】
上記のプログラムを実行すると、標準出力に出力されるので、それを h.html のような名前で保存し、ブラウザで表示してみる.
ERB クラスの便利な機能
HTML タグの除去
【Ruby プログラムの例】
#! ruby -Ks
# coding: windows-31j
require "erb"
include ERB::Util
puts html_escape("<HTML><BODY> <p> 100 < x < 200 </BODY></HTML>")
【実行結果の例】
メソッドの定義
【実行結果の例】