LoginSignup
23
20

More than 5 years have passed since last update.

簡単にSinatraまとめ

Posted at

とりあえず公式

Sinatra README

この記事でまとめていること

公式見たらだいたい分かります。その中でも、よく使うものをまとめてみました。

  • ルーティングに正規表現
  • 名前付きパラメータから値を取得
  • ブロックパラメータで名前付きパラメータにアクセス
  • ビューに値を渡す
  • ビューのデフォルトテンプレート
  • 全ページ共通の処理
  • ヘルパー
  • GET/POSTで送信されたデータの受け取り
  • セッションの利用
  • セッションの値を使った条件式
  • ビューファイルのフォルダ分け

ルーティングに正規表現

get %r{/hoge/([\w]+)} do
  yo
end

名前付きパラメータから値を取得

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

ブロックパラメータで名前付きパラメータにアクセス

get '/hello/:name' do |n|
  #n が params[:name] を保持
  "Hello #{n}"
end

ビューに値を渡す

get '/' do
  @hoge = "hoge"
  erb :index
end

テンプレート側は

<%= @hoge %>

で値を受け取って表示できる。

ビューのデフォルトテンプレート

テンプレートのレイアウトは
views/layout.erb
を用意すればそれがレンダリングされます。

それ以外のテンプレートを用意して利用したい場合は、第2引数にハッシュ形式のオプションを渡せばよいです。

get '/wiki' do
  @title = "wiki"

  erb :index, :layout => :piyo #piyo.erbがレンダリングされる
end

ビューのデフォルトテンプレートからビューを呼び出すこともできます。

<body>
  <header>
    <%= erb :header %>
  </header>

  <%= yield %>

  <footer>
    <%= erb :footer %>
  </footer>
</body>

全ページ共通の処理

リクエスト前の処理

before do
  @piyo = "hoge"
end

before '/hoge/*' do #ページの指定もできる
  @piyo = "hoge"
end

リクエスト後の処理

after do
  logger.info "loading data"
end

after '/hoge/*' do #ページの指定もできる
  logger.info "loading data"
end

ヘルパー

トップレベルのhelpersメソッドを使用して共通関数を定義できます。

helpers do
  def bar(name)
    "#{name}bar"
  end
end

GET/POSTで送信されたデータの受け取り

post '/test' do
  params[:hoge] #GET/POSTの区別は特に必要ない
end

セッションの利用

enable :sessions

post '/' do
  session[:hoge]
end

Sinatraではセキュリティのため、セッションデータはセッション秘密鍵で署名されます。
セッション秘密鍵はアプリケーション立ち上げごとにランダムで生成されますが、もし固定したい場合は

set :session_secret, 'your session secret'

でOK。

セッション値を使った条件式

未定義のセッションを条件式にかけると爆発するので、未定義ならnilを代入してあげましょう。

session[:hoge] ||= nil #未定義ならnilを代入する

if session[:hoge].nil? then
  redirect to('/')
end

豆知識

知ってると便利なもの

ビューファイルのフォルダ分け

viewをhogeフォルダにまとめた場合です。
/view/hoge/index.erb を読み込む場合

get '/hoge' do
  erb 'hoge/index'.to_sym
  erb :'hoge/index' #値はシンボルで渡す必要がある
end
23
20
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
23
20