すがブロ

sugamasaoのhatenablogだよ

プログラム・ザ・Ruby(その4)

 前回の続き

eRubyをローカルで実行できるところまで書いた。
で、その後はapacheの設定を行えば準備は完了。
 さて、ではそのapacheの設定とは何を指すのか? 答えは簡単。CGIを実行可能にするだけ。また、eRubyファイルは拡張子が.rhtmlの場合が多い(らしい)ので、場合によっては

AddHandler cgi-script .rhtml

などを記述しておくと良いだろう。
 あとはeRubyの文法に従った書き方をすれば良いのだが、それに先立って各eRubyの処理系へのパスをファイルの先頭に書かなくてはいけない。
CGIを使ったことがあればお馴染みだと思うけど、

#!/usr/bin/perl

とかのヤツ。LinuxUnixならば whichコマンドなどで確認すれば問題ないだろう。
一方、Windowsでそのパスを設定するにはどうするかと言うと、例えばeruby.exeが以下のようなパスに存在していた場合。

c:\eruby\bin\eruby.exe

#! /eruby/bin/eruby

 とすれば良い。
で、あとはerubyとerbでeRubyとして動作させる文法に差異があるので、そこを気をつければ問題ない。
以下はWindows上で実行環境を整えた時に作成したファイル。

■eruby
#!/eruby/bin/eruby

<%
	ERuby.charset = "Shift_JIS"
	# これがないと化ける
%>

<html>
	<head>
	<title>Ruby test</title>
	</head>
	<body>
	
	<h1><%="一行のみ"%></h1>
	
	<%
		str = "複数でもできる"
		print "<p>", str, "</p>"
	%>
	<%
		for i in 0..10
			print i,"回目の繰り返し<br>"
		end

		print str.length,"<br>"
		print str.size,"<br>"
	%>

	</body>
</html>
■erb
#!/ruby/bin/ruby
print "Content-type: text/html\n\n"
require "erb"

str = "erb test!!!!!!!"

SCRIPT = <<HTML
<html>
<head>
<title>aaaaaaaaaaa</title>
</head>
<body>
  <h1>[<%=str%>]</h1>
  <table style="border-style:solid">
  <%
    for i in 0..10 
  %>
  <tr><td>
  <%= i %>回目
  </td></tr>
  <%
    end
  %>
  </table>
</body>
</html>
HTML

ERB.new(SCRIPT).run

 両者で同じスクリプトでないのが申し訳ないけど(いまRubyの環境構築したくないんでカンベンしてちょ)上がerubyで下がerb。
えーっと、erbのスクリプトに関してはeRubyスクリプトとして正しいものなのかはなはだ疑問であるが、これが正しいとして話を進める(どうもオレがRubyというものに向いていないのか、情報収集がヘタなのか、例文とかが見つからなくてねぇ)。
 で、見れば分かると思うけど、<%〜%>で囲んだ範囲にスクリプトを書くことになる。……が、個人的な感想で申し訳ないんだけど、Ruby標準で入ってるerbの構文はすげぇダサい。というか、通常のヒアドキュメントをちょっと便利にしただけっつーか。これはこれで便利だろうけど、htmlをベースにスクリプトを組み込むという趣旨で考えると、微妙な気がする。
 と言うわけで、eRubyを使いたいならerubyの処理系が良いと思います、という話でした。
■□■□■□■□■□■□■□
 ホントはもうちょっと色々書きたい気持ちもあるけれど、これ以上書くと愚痴になっちまうと思うので書きません。それと、もっと丁寧に書こうかなーと思っていたんだけど、Rubyはトラウマになりかけているので時間を掛けて調べたくないんだよね……。
 何でかって?(以下愚痴なんで軽く読み飛ばしてね! つうか結局愚痴書いちゃったよ) そりゃあ、情報が集めにくいから。マニュアルの使い方がよくわらないし(なんかの雑誌に書いてあったけど、クラス名#メソッド名で検索できますーとかマニュアルのどこに書いてあるんじゃ?)、どんなクラスがあるかの一覧とかもどう見るのかわかんなかったし(そういう一覧があるのかもわからん)、eRuby系になるとどっちの公式も使い方の説明とか絶望的だし。
 オレって自分を棚に上げて文句言ってるのかなー(苦笑)。
 追記:
愚痴ばっか書いたけど、Rubyの素晴らしいところもある。それは、イテレータ。カンタンにかけるので、凄く便利。
……そこらへんもマニュアルが読みやすければもっといいのだがな(erch_with_indexとかの種類・対応クラスについてとか)。