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 }
割とお手軽ですね。