かずきのBlog@hatena

日本マイクロソフトに勤めています。XAML + C#の組み合わせをメインに、たまにASP.NETやJavaなどの.NET系以外のことも書いています。掲載内容は個人の見解であり、所属する企業を代表するものではありません。

ERBしてみよう

RailsやってたらViewがERBのテンプレートだっていうじゃない?
ってことでERBをやってみた。

使ってみて感じたことは、これはなかなかいいものだ。
ということで入門!!

ERBテンプレートの書き方

基本的には<%と%>で囲まれたところにRubyのコードを書いて、残りは普通のテキスト。
応用として、<%=と%>で囲まれた所は実行結果が出力される。

たとえばこんなのや

<% 3.times { %>
Hello world
<% } %>

こんなのになる

<% 3.times { |i| %>
<%= i %>
<% } %>

Rubyのプログラムから使うには以下の手順でいける。

  • require 'erb'
  • e = ERB.new テンプレート文字列
  • e.run or e.result

とっても簡単です。

ちょっと簡単に書いてみた。

require 'erb'

e = ERB.new <<EOS
<% 3.times { |i| %>
<%= i %>番目の挨拶
<% } %>
EOS

e.run

実行するとこうなる

D:\>ruby erb_study.rb

0番目の挨拶

1番目の挨拶

2番目の挨拶

無駄な改行が入ってる。
これは、%>の後の改行とかのせいになる。
無理すれば無くすように書けるけど、そのぶん読みにくくなる。
ここに色々書いてあるけど個人的にお気に入りな回避柵は-を使うやつ。
<%-で始めると、頭の空白を無視してくれる。
-%>で終わると、最後の空白や改行を無視してくれる。

そして、これを有効にするにはERBのコンストラクタの第三引数に"-"を渡す必要がある。
さっきのを書き換えてみよう。

require 'erb'

e = ERB.new <<EOS, nil, '-' # ここね!
<% 3.times { |i| -%>
<%= i %>番目の挨拶
<% } -%>
EOS

e.run

実行するとこうなる。

D:\>ruby erb_study.rb
0番目の挨拶
1番目の挨拶
2番目の挨拶

無駄な改行が消えてる。
これでやっと実用できそうだ。

何に使った?

丁度この間300カラムのテーブルを400個作る必要があった。
テーブル名とカラム名は何でも良かったので下のようなRubyスクリプトをこさえて結果をリダイレクトしてファイルに落とした。

require 'erb'

class Table
  attr_accessor :name
  
  @@TEMPLATE = ERB.new <<EOS, nil, '-'
create table <%= name %> (
  id int,
<% (1..300).each { |num| -%>
  column_<%= num %> varchar(50),
<% } -%>
  primary key(id));
EOS

  def ddl
    @@TEMPLATE.result binding
  end
end

(1..400).each { |i|
  t = Table.new
  t.name = "table_#{i}"
  puts t.ddl
}

割とお手軽ですね。