[トップ] [更新履歴] [著書] [コンピュータ] [ゲーム] [CGI配布]
作成:[2001/01/21] 更新:[2001/01/22]
ある日、ここにeRubyというものが現れた。 eRuby・・・それは、embedded Rubyの略で埋め込みRubyという意味だ。 テキストファイルにRubyのコードを埋め込んでしまうのだ。
たとえばこんな感じになる。 時間帯によってあいさつが変わるテキストファイルだ。 rtxtという拡張子はわかるよね、eRubyなtxtファイルということだ。
Code: erubytest.rtxt
<% greeting = case Time.now.hour
when 0..5, 18..23
'こんばんは'
when 6..11
'おはようございます'
when 12..17
'こんにちは'
end %>
<%= greeting %>、るびきちです。
元気ですか?
<% ... %>や<%= ... %>にくるまれた部分がeRubyタグというやつだ。
その中にはRubyコードを埋め込める。
両者の違いは評価した値を出力するかどうかだけ。
前者は出力せず、後者は出力するのだ。
プログラムコードが埋め込まれているのだから、そいつを実行してやらねばならない。 実行するためにはeRubyインタプリタが必要だ。 それにはeruby*1とERbの2種類ある。 erubyは前田さんによるC言語での実装、ERbが咳さんによるRubyでの実装だ。 共にeRubyを解釈する。 以下のうちどちらかを手に入れよう。
インストールはマニュアルを見れば何も問題はないだろう。
ERbの場合、lib/erb.rbをerbコマンドとして実行できるようにしておくことが望ましい。
では、実行してみよう。
erubyの場合は、
$ eruby erubytest.rtxt
ERbの場合は、
$ erb erubytest.rtxt
朝、実行すると、
おはようございます、るびきちです。 元気ですか?
と出るし、昼だと、
こんにちは、るびきちです。 元気ですか?
そして、夜だと、
こんにちは、るびきちです。 元気ですか?
と出るようになる。
しか〜〜し、さっきの例なんぞは子供騙しにしかすぎん。 eRubyは、HTMLと共に使うことで真の力を発揮するのだ!!! eRubyタグもHTMLちっくであることからも、HTMLとの親和性の高さがうかがえる。 そう、普通のHTMLを書くようにeRubyなHTMLを書くことができるのだ。 さぁ、いつものHTMLエディタを使いなさい。
でだ、HTMLにRubyといったらそう、CGIプログラムだ。 CGIといったらPerlじゃ? ふん、甘いな。 CGIってのはあくまでインターフェースを決めてるに過ぎないんだ。 そのインターフェースさえ守ればどんな言語使ったっていい。 C言語だって使っていいし*2、ましてやFortran、SmalltalkでもなんでもOKだ。 もちろんRubyだってOKだ。 いや、OKどころか得意としてるんだよ。 なんせ文字列処理が得意で柔軟性も高いんだから。 しかし、いくらRubyといえども、プログラム中にHTMLを埋め込んでは、デザインの修正とかが聞きにくい。 そこで逆転の発想だ。 今まではプログラム中にHTMLを埋め込んだ。 今度はHTML中にプログラムを埋め込むんだ。 CGIたるもの、HTMLを吐き出すことが大事。 そういう発想こそ自然じゃないのかな。
動的なプログラムとしておみくじを作ろう。 eRuby使えばそんなもの一瞬でできることを見せてやろう。 ファイル名はomikuji.rhtmlだ。 rhtmlというのは説明不要だろう。 ここは説明のためだから、いいかげんなHTMLであることは見逃してくれ(笑)
Code: omikuji.rhtml <% ERuby.charset = "EUC-JP" %> <html> <head> <title>おみくじ</title> <% now = Time.now srand(now.year+now.month+now.day) results = %w[小吉 中吉 大吉 超吉] result = results[rand(results.length)] %> </head> <body> <center> <h1>おみくじ</h1> <p> 今日は<%= result %>です!! </center> </body> </html>
たったこれだけだ。 簡単すぎるね(笑) 嬉しいことは、これをプログラムとしてではなくてHTMLとしてみることができる点だ。 凝ったHTMLにすることも容易だ。 こんな簡単にCGIが書けちゃうなんてすごすぎる。 eRubyに出会って、さらにRubyラブ度に火がついた!!
<% ERuby.charset = "EUC-JP" %>
というのがHTMLの最初についているのだが、それは日本語のeRuby HTMLを書くときには必須のようだ。 *3 それがないと、HTTPのヘッダに
Content-Type: text/html; charset=us-ascii
がついてしまって、文字化けになってしまうからだ。 これをつけたら
Content-Type: text/html; charset=EUC-JP
になってちゃんと表示されるはずだ。
運が悪いときってついリロードしたくなる気持ちはわかるが、そうはいかないぞ(笑) 今日の日付を乱数の種にしてるから今日である限りはおみくじは変わらんのだ。 がはははは。
ふふっ、eRubyのすごいとこはこんなものじゃないぞ。 ループとともに使えばもっとすごいことができる。 ま、今日はこの辺にしときますか。 また加筆するんで。
*1全部小文字だ。
*2OTD BBSはC言語で書かれてて高速らしいな。
*3[2001/01/22]sho thanx!