「HerokuでWebアプリ開発を始めるなら知っておきたいこと」シリーズの第4回では、Herokuで使えるWebフレームワーク「Sinatra」について書きます。このシリーズのまとめページはこちら。
RailsもSinatraも使える
HerokuはRails専用のPaaSと思われがちですが、厳密にはそうではなく、RackというWebサーバーインターフェイス上で動作するものなら何でも動くようです。そしてこのおかげでSinatraのような数ページしか存在しない低機能な場合には、Railsは重厚すぎるのでおそらく向きません。 こういった小さなWebアプリを目的として、とりあえず試してみたいや小さな状態から必要なものを積み上げていきたい場合に最適なのが、最小労力で手早くWebアプリを作成するためのフレームワークSinatraです
SinatraのHello worldは4行で書けます。しかもそのコードはとても簡潔で、無駄なものがありません。
require 'sinatra'
get '/' do
'Hello world!'
end
必要なものを、必要なときに追加していくタイプのWebフレームワークがSinatraです。以前話題になった遅延評価的に学習・制作していくのに最適です。また、Railsが理解できなくて挫折した人にも超オススメです。Railsのチュートリアルを読みながら、Scaffoldで10分でブログを作ってみたけど、その先何をすればいいのかわからなかった人でも、Sinatraならきっと理解できます。自分がまさにそれでした。自分はRailsを未だに理解できていませんが、Sinatraはすんなり理解できて、自分の作りたいWebアプリをいくつか作ることができました。
もちろん、超有名でフルスタック、情報量もダントツのRailsもHerokuで使えるので、好みや状況に合わせてフレームワークを選ぶことができます。このSinatraとRailsの比較は、前回述べた「2種類の簡単さ」に当てはまると思います。
- とっつきやすさのSinatra
- 高い利便性・生産性を誇るRails
おそらくフレームワークを触る時間が長く、量が多くなるほど、Railsのほうが効率的になっていくのだと予想していますが、まず最初の一歩はSinatraで始めてみるのもいいかもしれません。
Padrinoも使える
もうひとつ、知っておきたいWebフレームワークとしてPadrinoというものがあります。自分はまだちゃんと使ったことが無いので詳しい説明をできませんが、ざっくり言うとSinatraとRailsの良いとこどりをしたWebフレームワークです。下記の記事やチュートリアルを見ているとPadrinoは、基本はSinatraで、そこにRails風の自動生成機能やテスト・国際化を追加したもののような感じです。
Padrino+MongoDB+Herokuを使って、5分でWikiアプリ作成する « blog.udzura.jp 10分でできるPadrinoとMongoDBを使ったAPI作成 - Meltdown Countdown
確かにSinatraをそれなりに使っていると、ページネーションはどうするんだろう?や認証機能を実装するならどれが定番だろう?や英語と日本語ページを自動で振り分けるには?などなど、Sinatra単体で持っていない機能を追加する方法やプラグインについて悩むことがあります。また、それらについてググッても、欲しい情報を得られることは多くはなく、その点のRailsのプラグイン・情報量の多さをいつも実感しています。
Padrinoはそういったよく使う機能については最初から含められているものもあり、Sinatraのシンプルさを多少犠牲にすることで高い利便性・生産性を持たせようとしているフレームワークのようです。SinatraとRailsのちょうど中間の位置づけですね。
他の言語にも影響を与えるSinatra
SinatraはRubyのためのWebフレームワークですが、その簡潔な設計思想は他のプログラミング言語にも影響を与え、Sinatra風に記述できるWebフレームワークが多くあります。 有名どころではJavaScriptのExpress、ScalaのScalatra,PythonのFlask、PHPでは複数あるSinatra風フレームワークの比較記事が書かれるほどです。
Sinatra風PHPマイクロフレームワーク5つ - ttaka/tmp
SinatraはRailsほどの圧倒的な知名度・情報量では無いものの、マイナー過ぎて使う人の少ないWebフレームワークでも無いので、これから情報が増えることに期待でき、個人的には今後はまずSinatraで入門し、さらに大きなアプリや複数人で開発する時にRailsやPadrinoを選ぶというのが初心者向けの定番ルートになるのではないのかな、と思っています。もちろん、Sinatraをそのまま使い続けることも選択肢のひとつとしてあると思います。
参考リンク
- Sinatra: README (Japanese)
- FLASHer のためのSinatra入門 [導入編] - func09
- Ruby Freaks Lounge:第7回 小規模Webアプリのためのフレームワーク,Sinatra
- Ruby Freaks Lounge:第9回 SinatraとSequel・Hamlで掲示板アプリを作る
- Ruby Freaks Lounge:第41回 Sinatra 1.0の世界にようこそ
- Ruby Freaks Lounge:第42回 実世界のSinatra
- Sinatra と OAuth を使って Twitter のタイムラインを取得してみた
- GoogleAppEngine + JRubyでクリスマスまでに彼女をつくる方法
- text.ssig33.com - このサイトを Sinatra で書き直した。
- System.Exit – GAE で Sinatra を使って “foo” を表示する最速の方法
- GAE + JRuby + Sinatra + Ruby Twitter GemでTwitterのBotを作成する - 愛と勇気と缶ビール
- 自己流でSinatraとRSpecとWebratとCucumber使ってみた。あとDataMapperも
- 広告系エンジニア » Blog Archive » Ruby のフレームワークSinatraとデータベースPOSTGISによる小規模なアプリケーションの例
- RubyフレームワークSinatra の作者 Blake Mizerany氏のインタビューを翻訳してみた。
今回は、小さなWebアプリ作成に向いているフレームワーク「Sinatra」について書きました。 次回は、実際にHerokuを利用する上で知っておくと便利な「環境変数ENV」について書きます。