第5回Gotanda.rb

今日は一人だったので、前回ちょっと進めてたRackレベルで書くようなWebアプリをオレオレ構成で作ってました。

http://github.com/walf443/todoit/tree/master

タスク管理する何かがすごく作りたいかというとそうでもなく、最近RackがMerbブームとかの影響でかなり色々と変わっていて、しばらくウォッチしてなかったらついていけなくなってるので、何か書きながらRackの便利なミドルウェアやらを色々と見てみようという目論見です。

Rackに付属しているミドルウェアがどう便利なのか今のところよくわかってないやつもいっぱいありますが(なんか良いミドルウェアの利用例とかあれば教えていただけるとうれしいです)、

  • Rack::Builder
  • Rack::CommonLogger
  • Rack::ShowExceptions
  • Rack::Reloader ( 開発時とかにモジュールの再読みこみしてくれる )
  • Rack::ContentLength ( Content-Lengthヘッダをbodyのサイズから勝手につけてくれる )

あたりが便利だなと思いました。

Rack本体に付属してるミドルウェアよりもrack-contribに付属してるやつのほうが用途がはっきりしてるのか、使いやすそうなのは多いかなといった印象です。

contribだと、まだあまり使ってみてないですが、

  • Rack::NotFound ( 指定したファイルを読んで404ページとして出してくれる。Webサーバーの設定でよいという話もありますが。 )
  • Rack::BounceFavicon ( favicon.icoよけ。ロードバランサレベルでやればよいという話のような気もしますが、作り初めだとまぁ便利かも )
  • Rack::ETag ( ETagヘッダをつける )
  • Rack::Profiler
  • Rack::RelativeRedirect ( 302とかのときにLocationヘッダが相対パスなものを絶対パスに変換する。ロードバランサとか使ってるとうまく動かないかも )

あたりが便利そうな気はします。

今みていた感じだと、ミドルウェアでは複数のことはさせずになるべくシンプルにフィルタのようなものみたいに作られてるのが使いやすくていいかなと思いました。

作業中は完全にオフラインなので、gemを手元にcronでミラーしておいてるのが役に立ちました。githubあたりのやつが手元になかったのが、rackを1.9で動かしたりしようとしてうまくいかなかったのでもうちょっと準備をしっかりしておくとよかったなと思いました。

今のところは、来週も続きをやる予定。