かずきのBlog@hatena

すきな言語は C# + XAML の組み合わせ。Azure Functions も好き。最近は Go 言語勉強中。日本マイクロソフトで働いていますが、ここに書いていることは個人的なメモなので会社の公式見解ではありません。

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
}

割とお手軽ですね。