アイデア

  • まずはAPIの話
    • 外部ファイルを使わない→外部ファイルを使う
  • 実際に使えそうなネタがいい。
    • 便利そう
    • 楽しそうに見える
  • HTMLの自動生成かな?
    • C言語のテーブルとかいいんだけどなあ。需要がないかなあ。でも説明に使える
    • テンプレート作って、大量に生成する?
    • 項目をテキストファイルとして用意 or スクリプトとして用意
    • タイトルと本文、その他

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 %>

実はerbコマンドというものがある

Rubyがインストールされている環境なら、erbコマンドを実行することができる。

erb tamplate.rtxt