金子邦彦研究室プログラミングRuby プログラミングeRuby を使ってみよう

eRuby を使ってみよう

erubis とは eRuby (埋め込み Ruby; embedded Ruby) の処理系です.

関連する外部ページ】: http://jp.rubyist.net/magazine/?0017-BundledLibraries

Ruby プログラミング用の開発環境として,emacs のようなエディタを使用するか, Eclipse と Eclipse の Eclipse プラグイン版 RadRails の組み合わせを薦めます.

前準備

前もってインストールしておくソフトウェア

コンソールでの eRuby 処理系 erubis の起動(標準入力を使用)

要点

テキストファイルの中に Ruby のプログラムを埋め込むことができる.erubis を使って評価すると,Ruby のプログラムの部分が評価結果に置き換わったような新しいテキストファイルが出来ます.このことを体験しましょう.ここでは「HTML ファイルの中に『環境変数 PATH を取得する Ruby プログラム』を埋め込んだもの」を使って練習を行う.

ここで標準入力といっているのは,コンソール(つまり標準入力)からファイルを入力し,最後に EOF (end of file) を入力すると,評価結果が出力されるというもの. 手軽に試すときは便利です.

erubis コマンドを使う場合

erb コマンドで起動できるはずです.

erb
<HTML>
<%= ENV['PATH'] %>
</HTML>
EOF (Linux 等ではコントロールキー + D, Windows ではコントロールキー + Z)

[image]

■ (Windows で JRuby, erb を使いたい場合type con | jruby c:\jruby\bin\erb による起動

Windowsコマンドプロンプトで次のように操作

type con | jruby erb
<HTML>
<%= ENV['PATH'] %>
</HTML>
コントロールキー + Z
Enter キー

[image]

コンソールでの eRuby 処理系の起動(一般のファイル)

今度は,一般のファイルに格納された eRuby 形式ファイルを評価させる場合です.

erubis <ファイル名>

※ デバックしたいときは「erubis -x ...」のようにします.

[image]

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)

【実行結果の例】

[image]

次の例は,条件分岐繰り返し処理です.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 のような名前で保存し、ブラウザで表示してみる.

[image]

ERB クラスの便利な機能

HTML タグの除去

【Ruby プログラムの例】

#! ruby -Ks
# coding: windows-31j
require "erb"
include ERB::Util

puts html_escape("<HTML><BODY> <p> 100 < x < 200 </BODY></HTML>")

【実行結果の例】

[image]

メソッドの定義

【実行結果の例】

[image]