#june29jp

Sinatraで遊んでみた

2009-04-23

ちょーお手軽に試せちゃう Web アプリケーションフレームワークであるところの Sinatra で遊んでみました.

Sinatra is a DSL for quickly creating web-applications in Ruby with minimal effort

Sinatra: README

“minimal effort” と謳っているのは伊達じゃなくて,Web サイトに書かれている通りに進めていけば,すぐに動くものができちゃいます.けっこうな衝撃体験でした!最初に Sinatra を知ったのはusericonsリニューアルとソース公開 – SWDYHを読んだときで,でもこのときはソースコードを見てもどの部分が Sinatra の処理に当たるかよく分かりませんでした.最近になって,改めて触ってみようと思ったときにRuby Sapporo Night vol.10 にてSinatraのお話をしました – dara日記があって,手を動かしてみるに至りました.

習作

練習用に,ということで,ボクが Tiarra のログとして貯め込んでいる Twitter のアーカイブを検索したりできるものを作ってみました.初めて触れるフレームワークなので学習コストも発生するわけですが,それでも数時間でひとまず動くモノができちゃうんだからすごいなー.

june29’s tiarrar at master – GitHub

Tiarrar

Tiarra のログファイルをパースするところは置いておくとして,Sinatra の処理に当たるコードは以下のような感じです.これだけで URL に対する挙動を割り当てられます.必要な情報だけ集めて,あとは view 側に渡してやるのですね.

get "/" do
  @groups = tiarrar.groups.keys
  @statuses = tiarrar.recent
  haml :index
end

get "/groups/:group" do
  @group = params[:group]
  @statuses = tiarrar.group(@group)
  haml :statuses
end

get "/search/" do
  @word = params[:word]
  redirect "/search/#{URI.encode(@word)}"
end

get "/search/:word" do
  @word = params[:word]
  @statuses = tiarrar.search(@word)
  haml :statuses
end

内容は

  • 「/」へのアクセスは,最近の status を表示する index のビュー
  • 「/groups/:group」へのアクセスは,指定グループに含まれる人の status だけを抜き出した statuses のビュー
  • 「/search」への word パラメータ付きアクセス(検索フォームの向き先がこれ)は「/search/:word」にリダイレクト
  • 「/search/:word」へのアクセスは,指定の文字列を含む status だけを抜き出した statuses のビュー

と,これだけです.

実現したい機能に対して,書かなきゃいけないコードの量が最小限で済むなぁ.もともと,Tiarra のログをブラウザから閲覧できるようにしたいとは思っていて,そうしておくと iPhone の Safari からもパッとアクセスできますしね,だけど,HTML に組み立てるのがけっこう面倒で,なかなか手が進まずにいました.

ボクがこれまで作ったものだと,TumbLensiReblog も Sinatra でキレイに置き換えられそうです.特に iReblog の方は,cgi.rb で API 部分を作っていて,設定が面倒だったりしたので,これからは Sinatra が代替になってくれそうで嬉しいです.

そうそう,cgi.rb だと小さすぎるけど,Rails だと大袈裟すぎる,Sinatra は間に入ってくれて,上手に使い分けると幸せになれますね.

雑感

Rails に触れたことがある,ってのが大きかったと思います.Sinatra の処理を書いているときは「Rails でいう routes.rb と controller を書いている」って感じでした.view はそのまま view ですね.今回,Haml に触れるのも初めてで,これまたキモカワイイなーと思ってしまいました.はむはむカワイイ!Haml は,慣れるまでは大変だけど,慣れてしまえばすいすい書けちゃいそう.each に対応する end を書いたりしてハマりました.

まとめ

Sinatra の世界に入門してみました.正しい使いどころで使えば強力な武器になりそうです.最初のビューまでサクッといけちゃうのがいいですね.プロトタイピングに向いていそう.Haml や Sass と合わせて活用すればさらに少ないコード量でとりあえず動くモノができちゃう.

Sinatra 面白いです!

おもしろかったら、シェアやブックマークや送金などぜひぜひお願いします。サイト運営の励みになります!

シェアや送金などお待ちしています!