Sinatraの利用
RubyでWebサイトを構築しようとすると、規模が大きいものは「Rails」、規模が小さく軽量なものは「Sinatra」と、構築しようとするWebサイトの特性に合わせて、このどちらかのフレームワークを利用することが一般的のようです。
今回は、個人サイトで利用するため「Sinatra」を使ってみました。
目次
- インストール
- 使い方
- パラメータの取得方法
- ERBテンプレートの利用
- JSONデータの出力
- JSONデータの出力(Active Record版)
- 参考リンク
インストール
まずはインストール
gem install sinatra
gem install sinatra-contrib
2行目の「sinatra-contrib」をインストールする理由は、コード変更時にWebサーバを再起動するのが面倒なので、リロード機能を実装するため。
使い方
使い方は下記のとおり。
require 'sinatra'
require 'sinatra/reloader'
class MainApp < Sinatra::Base
register Sinatra::Reloader
get '/test1/' do
'Hello World'
end
end
MainApp.run!
2行目と5行目がリロード機能のコード。ただし、「get ~ do」内のコード変更時はWebサーバの再起動が不要ですが、新しく別の「get ~ do」を追加した場合は再起動が必要でした。
12行目は作成したMainAppクラスを実行(run)しています。Rackupを利用して「config.ru」からMainAppクラスを実行できる環境を整えていれば、12行目は不要。
上記URLの /test1/ にアクセスすると「Hello World」という文字がブラウザに表示されます。
パラメータの取得方法
パラメータの取得方法は以下のとおり。
get '/test2/:p1/:p2/' do
'パラメータ[p1]:' + params[:p1] + '<br/>GETパラメータ[p2]:' + params[:p2]
end
上記はGETパラメータの取得方法だが、POSTされたパラメータについても同様な方法で取得可能です。
取得の方法は他にもありますが、個人的にはこちらの方が分かりやすいです。
ERBテンプレートの利用
ERBテンプレートを利用してページを生成する場合の方法。
まず「views」ディレクトリを作成して、その配下に「index.erb」ファイルを作成します。
「index.erb」の内容は以下のとおり。
<html>
<head>
<title><%= @title %></title>
</head>
<body>
<h1><%= @title %></h1>
<p><%= @content %></p>
</body>
</html>
続いてSinatraのリクエスト処理。
get '/test3/' do
@title = "テストページ"
@content = "テストコンテンツ"
erb :index
end
2行目、3行目で「index.erb」内に埋め込んだ変数の設定。
4行目で「views」ディレクトリ配下の「index.erb」を指定しています。
JSONデータの出力
レスポンスでページではなくJSONデータを返す方法。
get '/test4/' do
list = [{id:1, name:"A"}, {id:2, name:"B"}, {id:3, name:"C"}]
content_type :json, :charset => 'utf-8'
list.to_json()
end
JSONデータの出力(Active Record版)
Active Recordを利用して取得したデータをJSONデータとして返す方法。
get '/test5/' do
list = Category.get_category_list()
content_type :json, :charset => 'utf-8'
list.to_json(:root => false)
end
上記は「categories」テーブルから複数のレコードを取得して返す処理。
4行目「:root => false」を「:root => true」に変更するとノード名(category)が出力されてしまうので、通常は「false」または設定なし(デフォルトでfalse?)で処理します。