アイデア
- まずはAPIの話
- 外部ファイルを使わない→外部ファイルを使う
- 実際に使えそうなネタがいい。
- 便利そう
- 楽しそうに見える
- HTMLの自動生成かな?
API:もっとも簡単なERBの使い方を考えてみる
もっとも簡単なERBサンプル。
require 'erb' ERB.new("<%= 1 + 1 %>").run #=> 2
でもこれじゃ何のことだかさっぱりわからない。
putsを使ったプログラムと結果は同じだし。
puts "#{1 + 1}" #=> 2
つまり、テンプレートにしたいテキストが、ソース中のリテラルになっている場合は、ERBのメリットを享受しにくいのかな。
ならばテンプレートを別ファイルに分けてみよう。template.txtを作成する。
こんにちは。<%= name %>さん。 今日は<%= time.month %>月<%= time.day %>日です。
require 'erb' text = File.read('tamplate.txt') name = 'dan' time = Time.new ERB.new(text).run(binding)
うん、だいぶERBらいくなった。キモはもととなるテキスト(テンプレート)がソースとは別のテキストファイルとして、独立しているところかな。
よりERBを効果的に見せるには、まずERBを含まない意味のあるテキストファイルが存在して、そのテキストファイルの一部に動的な文字列を組み込むようなサンプルがいいと思う。動的な文字列ではなく、機械的な繰り返しを埋め込むのも有効。
テンプレートの中で繰り返し
たし算の計算ドリルジェネレータはどうか。
タイトル せつめい。 <% 10.times do |i| %> (第1問) 1 + 1 = 2 <% end %>
これをERBに処理させると、無駄な空行が入ってしまう。ERBのAPIを調べてみると、newに渡す引数にtrim_modeというのがあって、これを設定すると改行の振る舞いも変えることができるのだけど……。ちょっとややこしい。
http://www.ruby-lang.org/ja/man/?cmd=view;name=erb …… Rubyリファレンスマニュアル - erb
次のようにテンプレートを書き換えると改行はうまくいくんだけど、カッコわるい。
タイトル せつめい。 <% 10.times do |i| %> (第1問) 1 + 1 = 2<% end %>