Sinatraの使い方

下記のページを参考にSinatraの使い方を勉強する。
Sinatra: README (Japanese)


SinatraRubyで最小労力で手早くウェブアプリケーションを作成するためのDSL。

ルート


Sinatraでは、ルートはHTTPメソッドとURLマッチングパターンがペアになっている。
HTTPメソッドとはgetやpostで、URLマッチングパターンとは'/'などで、'/'はトップページを表す。

get '/' do
  .. 何か見せる ..
end

post '/' do
  .. 何か生成する ..
end

put '/' do
  .. 何か更新する ..
end

delete '/' do
  .. 何か削除する ..
end

ルートは定義された順番にマッチする。リクエストに最初にマッチしたルートが呼び出される。

ルートのパターンは名前付きパラメータ(:name)を含むことができ、paramsハッシュで取得できる。

require 'sinatra'
get '/hello/:name' do
  "Hello #{params[:name]}!"
end

f:id:ayaketan:20111219204542j:image

'/hello/:name'は「トップページ/hello/任意の文字列」のページを表し、実行例ではアドレスに「トップページ/heloo/ayaketan」と入力したので、ページには「Hello ayaketan!」が表示されたが、アドレスに「トップページ/heloo/foo」と入力すると、「Hello foo!」と表示される。

また、ブロックパラメータで名前付きパラメータにアクセスすることもできる。

require 'sinatra'
get '/hello/:name' do |n|
  "Hello #{n}!"
end

f:id:ayaketan:20111219204557j:image

ルートパターンはsplat(またはワイルドカード)を含むこともでき、params[:splat]で取得できる。

require 'sinatra'
get '/say/*/to/*' do
  params[:splat]
end

get '/download/*.*' do
  params[:splat]
end

f:id:ayaketan:20111219204617j:image
f:id:ayaketan:20111219204635j:image

これもブロックパラメータを使用することができる。

require 'sinatra'
get '/download/*.*' do |path, ext|
  params[:splat]
end

f:id:ayaketan:20111219204650j:image

Erbテンプレート


テンプレートは./viewsディレクトリ下に配置されている。

require 'sinatra'
require 'erb'

get '/' do
  erb :index
end

f:id:ayaketan:20111219204704j:image
./views/index.erbを表示する。