20091119_sinatraを使ってみた

8
超超超 超超超 Ruby Ruby 超超超超超超超 超超超超超超超 Sinatra Sinatra 超超超超超超超超超超超超

Upload: ngi-group

Post on 12-Nov-2014

2.096 views

Category:

Documents


6 download

DESCRIPTION

 

TRANSCRIPT

Page 1: 20091119_sinatraを使ってみた

超軽量超軽量 RubyRuby フレームワーフレームワークク

『『 SinatraSinatra 』』を使ってみた。を使ってみた。

Page 2: 20091119_sinatraを使ってみた

SinatraSinatra ってなに?ってなに? Rubyの超軽量のフレームワークです。

1 モジュールだけで ( も ) 動きます。

基本的には、 Rackや ERBを組み込んだ Dispatcherです。

開発環境構築~開発~本番環境構築 全工程がとっても簡単。

Sinatraの良いところ  Rubyのフレームワークと言えば Railsが圧倒的に有名ですが  Railsの長所と短所を考えてみると

  長所: 大きめの規模の場合、開発効率が良い  短所: 重量級故に実行速度が遅い。

ちょっとしたものを作る時には大げさ。

ということで、 Sinatraは 『ちょっとしたものを作る時にはいいかも』  そんなフレームワーク(だと思います)

Page 3: 20091119_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

じゃーん!なんだか美しい!

Page 4: 20091119_sinatraを使ってみた

その他、基本のご紹介その他、基本のご紹介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

Page 5: 20091119_sinatraを使ってみた

インストールもすごく簡単インストールもすごく簡単

Gemで入れるだけです。

# gem install sinatra # gem install mongrel

起動もすごく簡単起動もすごく簡単

これで WEBサーバーごと起動します! $ ruby hello.rb   

Portや WEBサーバの指定 $ ruby hello.rb -p 80 -s mongrel

Webrickや Thinも、入っているなら指定可能です

ソースに 2 行程足せば、 CGI動作させることも可能です。

Page 6: 20091119_sinatraを使ってみた

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という簡単デプロイ 速い(らしい) アクセスがない時は自動で子プロセスが消える  →メモリ節約、再起動効果

Page 7: 20091119_sinatraを使ってみた

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しない場合

Page 8: 20091119_sinatraを使ってみた

まとめまとめ

長所 なにもかも簡単 コードがシンプル そこそこ速い

短所 作りこむと開発効率悪そう(→ Railsの範疇) 作りこむと結局遅くなりそう(→ Railsもどき化)

結論ちょっとしたものを作りたいときに。壁が見当たらないので、初めてのプログラミングにどうでしょう。