Railsはフルコース、Sinatraはお皿、Padrinoはビュッフェ
Rubyコミュニティの有志が定期的にパブリッシュしているオンライン誌の最新号、Rubyist Magazine 36号が11月28日に出ました。
今回の注目記事の1つは、近藤うちお(@udzura)さんによる「Sinatra再入門、Padrino/Rack/その先の何か」でしょうか。Ruby on Railsの弟分と言われることもある、軽量Webアプリケーション向けライブラリの「Sinatra」の解説です。極めてシンプルな文法(DSL)で、Webアプリケーションが作成できるので、Railsはちょっと大げさだなぁというようなケースや、そもそもRailsが用意しているレールとは違う骨組みでアプリを作りたい、あるいはサーバサイドはMongoDBやRedisといったストレージをAPI化してクライアントに見せたいだけ、というようなケースで使われることが多いように思います。Ruby界だけでなく、ほかの言語にもSinatraに似たコンセプトのものが増えていますよね。ちなみに私は仕事で使うスクリプト群は、SinatraにくるんでHerokuに置いて使っています。50~60行なら全部1ファイルで済んじゃうところが気に入っています。
Sinatraはシンプル過ぎて、結局車輪の再発明が必要になりがち――、その問題を解決したのが「Padrino」ということですが、どうも私は長らくこのPadrinoという存在が解せません(近藤さんのブログも結構読んではいるのですが)。だって、Sinatraにあれこれ盛り込んだら、結局またRailsになるんじゃないの? と思うからです。
【追記】以下、ちょっと私の誤解だったようです。ツイートを引用させて頂きます。「というかちょっと違っていて、、、、、、Padrino は Sinatra の上に Rails を使いたいんではなく、あくまで Sinatra 拡張スイートのうちの一つで、その中でももっとも良いものの一つ、というのが僕の考えなんです」とのことです。失礼いたしました……。
【追記2】「ビュッフェ」というたとえ話について再度考察したブログを、近藤さんが別エントリとして公開されました。そもそも、Sinatra自体がビュッフェ的であるとのことです。皆さま、ぜひご一読を。
近藤さんによれば、そうではないそうです。Padrinoの主眼はORMやテンプレートエンジン、テスティングフレームワーク、スタイルシートエンジン、JavaScriptライブラリなど、好きなモノを選んで使うことができる「ビュッフェスタイルの開発」を実現することだとのことです。好きなものを好きなだけお皿に載せるということですよね。このたとえで言えば、Ruby on Railsはフルコースとのことです。そういう説明をされると、なるほどという感じです。Merbが目指したモジュラリティーは、仕組みとしてはRails3に入っているけれども、実質的にはシェフのお勧めどおりにコースを食するのがRails的グルメという感じになっている面もあると思います。
SinatraはRack層に最も近いこともあり、記事の中ではRack層の活用がSinatraやPadrinoによる開発のポイントの1つと指摘されています。RackはRubyの話ですが、いまやWSGI(Python)やPSGI(Perl)、JSGI(JavaScript)というように、各言語にRack層と同じものがあります。この“モダンなCGI”とでもいうべき考え方を学ぶという意味でも、Sinatraは結構良いのかもしれませんよね。
そうそう、Sinatraといえば最近の話題を、もう1つ。Redis、Sinatra、jQueryを使って書かれたお手本のようなソーシャルニュースアグリゲーション実装の「LamerNews」が面白いです(GitHubのレポジトリ)。Redisの生みの親でイタリア人開発者のantirezさんがHackerNewsの編集方針を巡り、激昂した勢いで実装して運用をおっぱじめちまったもので、HackerNewsクローンです。ソースコードを見てみると、「この程度なら車輪の再発明でいいんじゃないの?」というような実装です。例えばHTMLテンプレートエンジンに相当するものを、いきなりKernel#Hとして定義してしまっていたりして、自前で必要なパーツを作って組み上げていくところに、Redis同様のミニマリズムを感じます。Sinatraの実例としては、もしかしたらいまいち(Sinatraのあれこれを使いこなしていない)のかもしれませんが、お皿の上に自由に盛って作る精神を見るという意味ではLamerNewsは参考になるかもしれません。全体が短いですし、私にはすごく面白かったです。