今さらRubyでCGIもないだろうと思って調べたら、Rackにたどりついた。
CGI程度の簡単アプリであっても、Rackに乗せるべきだと思った。
Route 477 - 5分でわかるRack , シュレーディンガーの猫たち から一部引用 (略) というわけで、これからRuby用のWebアプリ用フレームワークやWebサーバを書 こうとするなら Rackは間違いなくチェックすべきライブラリだ。そうでなくて、 単にWebアプリを作りたいだけの場合でも、「超シンプルなWebアプリ用フレー ムワーク」としてRackを使うという選択肢もあるだろう。 (略) Rackの思想 「Webアプリって要するにリクエストをレスポンスに変換するだけの関数だよねー」 ってのがRackの基本っぽい。 なので、
- env(環境変数のハッシュ)を受け取って
- ステータスコードとHTTPヘッダとHTTPボディを返す ような関数を書けばWebアプリになります。
一度、サンプルを作って体験してみよう。
デカ文字作成サイトがちょうど良いかな。
ついでに、Rack::Reloaderを[Nendo]でWebアプリ開発する時にうまく使えないかにも興味がある。
Greenbear Laboratory - Rack日本語リファレンス Rack::Reloader リクエスト時に、Rubyスクリプトが更新されていたらリロードする。 (ただ し、重くなるのを避けるため、一度リロードしたら10秒間はリロードしない。 この秒数は設定可能。)
[Nendo]の話に移ると、Emacsで[Nendo]アプリを編集する場合、スクリプト全体を毎回実行するのではなく、関数単位でevalし、テストを繰返すスタイルを取る。 Lispでは多分、標準的な開発スタイルだと思われる。 ちなみに、Gauche用のWebフレームワーク[Kahua]はもっと進んでいて、サーバーに直接replで接続し、サーバー上にデプロイ済みのアプリに対して関数単位で動的に更新しながら開発できる。 これに慣れると、ファイル単位のReloadとかDeployの繰返しには戻りたく無くなる。
[Nendo]とRackで、これに似たスタイルを作れそうな気がするので、その辺もいろいろ実験してみようと思う。 (単に、replでS式を一つ評価する度に完成したRubyソースを吐きだすような特殊なreplを作れば良いだけだと思っている。考えが甘いかな?)