Ruby Earrings
eRuby で遊ぶ

第5回 簡易掲示板を作るとしたら

自前ライブラリの require

前回の図を再掲します。

このように CGI を分割すると、システム全体で共通に使うクラスやメソッドを定義したファイルを作りたくなります。ので作ってしまいましょう。記事画面を disp.rhtml、データ保存 CGI を save.cgi、エラー画面を error.rhtml とし、共通に使うファイルを article.rb とします。全て同じディレクトリに置くことにします。

article.rbdisp.rhtml, save.cgi で利用するんだから、

require 'article'

と書こうと思いますよね。だって、同じディレクトリにあるんですもの。

でも、これがそうはうまくいかないのでした(*1)。ガガーン。ナゼでしょう。第1回で書いた設定を思い出してください。

AddType application/x-httpd-eruby .rhtml
Action application/x-httpd-eruby /cgi-bin/eruby

繰り返しますと、上記設定は .rhtml という拡張子のファイルをリクエストされたら、そのファイルを /cgi-bin/eruby に通した結果を返す、という意味です。.rhtml は実はタダの入力ファイルであって、実際に動いている CGI は /cgi-bin/eruby/cgi-bin/eruby にとっては disp.rhtml が置いてあるディレクトリ、つまり article.rb のディレクトリははるか向こうのほうにあるのです。うまくいかなくて当然です。

対策としては、

などが考えられますが、同じファイルを2箇所に置いたり、あちこちにファイルが分散したりするのも気持ち悪い。そんな場合はファイルをロードするときの検索パスリストをいじってしまいましょう。require する前にこういう風に書きます。

$:.push File::dirname(ENV['PATH_TRANSLATED']).untaint

ENV['PATH_TRANSLATED']は、ファイルシステムにおける .rhtml ファイルのパスです。eruby がセットしてくれます。一般の CGI で言うところの ENV['SCRIPT_FILENAME'] のようなものです。こうやって検索パスに .rhtml のあるディレクトリを加えることで、article.rbrequire/load できるようになります。

(*1) eruby を Action 設定でなく、eRuby HTML ファイルの冒頭に

#!/usr/local/bin/eruby

と書いて普通の CGI として起動している場合には問題ありません。


あとは書くだけ

最後まで読んで頂いてありがとうございました。ここまで5回分、わたくしが実際に eRuby で CGI を書こうとしたときにつまづいたところを順番に述べてきました。これだけの予備知識があれば、カンタンな掲示板ならつまづかずに書けると思います。あとは書くだけです。がんばってくださいね!

エ? あんたの作った掲示板は見せてくれないのか、って? えーとえーと。えとえと。掲示板を作っている最中にこの解説を書き始めてしまい、肝心の掲示板がまだできていません。えーん。すみませーん。そのうち。そのうち作りますから。多分(←それいい加減にやめなさい)。

最初、目次に「Tips 集」という項を作ってしまいましたが、5回分読み返すとあんまり本質的なことは書いてなくて、全部 Tips みたいなものです。掲示板を作り終えたら、要約済み箇条書きのTips ページを作ろうと思います。それではまたそのときにお会いしましょう。


Special Thanks

みなさまありがとうございます。いつもお世話になります。今回これを書くのにとくにお世話になったかたがたへ感謝のコトバを。イラナイって言われそうですケド。

まつもとゆきひろさん
言わずと知れた Ruby 作者サマ。無知ゆえに「プログラミング言語とは所詮あまり美しくはなれないものなのだ」などと思っていたわたくしの目からウロコを取ってくださいました。ステキな言語をありがとうございます。いつもおつかれさまです。

前田修吾さん
eruby 作者サマ。eruby 、待ってましたってカンジでしたー。eruby を作ったばっかりに、こんなふざけた解説ページを書かれることになってしまい気の毒です(ひとごとのように)。ML でもアホを相手につきあってくださり、ありがとうございます。どんくさいわたくしですが大目に見てくださいましね。

あおきみねろうさん、他 Jarh 作者のかたがた
文例に Jarh を使おうと思ったのはよかったのですが(Jarh は自分では作れません、クチあけて見てるだけデス…)、あれって凝れば凝るほど検索してもヒットしないんですよね。あおきさんが Jarh を集めててくださって、助かりました。

某掲示板奥田綾乃ファンちゃん、倉沢桃子ちゃん(偽)←こう書くの?
いまだに本名がわかってないままなのですがー。あの掲示板のあの風習は一体どこから? まあソレは置いておいて、ホント、民法どっかいけってカンジですよねっ。結局、倉沢桃子ちゃんのコロンブスの卵を使わせて頂いてしまいました。ありがとうございました。はー。しばらくトシのことは考えたくないです。
| prev || Ruby Earrings || next |

TAKEUCHi Kahori <takeuchi@kahori.com>