20091119_sinatraを使ってみた
DESCRIPTION
TRANSCRIPT
超軽量超軽量 RubyRuby フレームワーフレームワークク
『『 SinatraSinatra 』』を使ってみた。を使ってみた。
SinatraSinatra ってなに?ってなに? Rubyの超軽量のフレームワークです。
1 モジュールだけで ( も ) 動きます。
基本的には、 Rackや ERBを組み込んだ Dispatcherです。
開発環境構築~開発~本番環境構築 全工程がとっても簡単。
Sinatraの良いところ Rubyのフレームワークと言えば Railsが圧倒的に有名ですが Railsの長所と短所を考えてみると
長所: 大きめの規模の場合、開発効率が良い 短所: 重量級故に実行速度が遅い。
ちょっとしたものを作る時には大げさ。
ということで、 Sinatraは 『ちょっとしたものを作る時にはいいかも』 そんなフレームワーク(だと思います)
言葉で説明するより見てもらう方が早い言葉で説明するより見てもらう方が早い
require 'rubygems' require 'sinatra' get '/hi' do 'Hello, world!' end
getの部分は、 HTTPメソッドなので、post, put, deleteなどが使用できます
マッチする URLには、 * や正規表現、変数が使えます。
post‘/create/*/:id’ do id = param[:id] name = param[:account][:name]end
じゃーん!なんだか美しい!
その他、基本のご紹介その他、基本のご紹介http://github.com/sinatra/sinatra/blob/master/README.jp.rdoc
ソースに日本語ドキュメントが含まれてるので、興味ある方はご参照ください。
リダイレクト redirect '/', 303
ステータスコード status 404 "Not found“
フィルター before do … end
ヘルパー helpers do include Rack::Utils alias_method :h, :escape_html end → <%=h hoge %>
ERB(テンプレート ) の使い方 get '/' do erb :index, layout => true end ./views/index.erb ./views/layout.erb
Staticファイル ./public以下に置く ./public/css/default.css → /css/default.css
ActiveRecord (O/Rマッパ ) は使いたい! require 'activerecord'
Sessions enable :sessions get '/' do ssid = session[:ssid] end
インストールもすごく簡単インストールもすごく簡単
Gemで入れるだけです。
# gem install sinatra # gem install mongrel
起動もすごく簡単起動もすごく簡単
これで WEBサーバーごと起動します! $ ruby hello.rb
Portや WEBサーバの指定 $ ruby hello.rb -p 80 -s mongrel
Webrickや Thinも、入っているなら指定可能です
ソースに 2 行程足せば、 CGI動作させることも可能です。
Apache + passenger(mod_rails)Apache + passenger(mod_rails) で動かすで動かす
Passengerで動かすのも簡単です。
# gem install passenger # passenger-install-apache2-module(最後に表示される 3 行の文字列を httpd.confにコピペ)
# mkdir /path/to/sinatra_root/public# mkdir /path/to/sinatra_root/tmp# vi config.ru-------------------------require ‘hello’run Sinatra::Application-------------------------あとは、 DocumentRootを /path/to/sinatra_root/publicに変更して httpdを restart
Passengerで動かすメリット Mongrelのように Portを消費しない(いくつも起動しなくていい) tmp/restert.txtというのを一緒にアップすれば restartしてくれるので アップすれば OKという簡単デプロイ 速い(らしい) アクセスがない時は自動で子プロセスが消える →メモリ節約、再起動効果
RailsRails と速度比較してみたと速度比較してみた
比較環境• Apache2.2.3 + Passenger2.2.5 同一設定• ApacheBenchを利用• sinatraは ActiveRecordを require
比較内容• テンプレートを使って簡単な HTMLを吐くだけ
Rails 1.2.6
Rails 2.3.4
Sinatra 0.9.4
req /sec
68 83 116
% 82% 100%(基準 )
140%
VSZ 42M 42MB 21M (13MB)
RSS 34M 25MB 18M (9MB)
比較結果
やっぱり速い!(よかった)
()内は ActiveRecordを requireしない場合
まとめまとめ
長所 なにもかも簡単 コードがシンプル そこそこ速い
短所 作りこむと開発効率悪そう(→ Railsの範疇) 作りこむと結局遅くなりそう(→ Railsもどき化)
結論ちょっとしたものを作りたいときに。壁が見当たらないので、初めてのプログラミングにどうでしょう。