2009-08-15 [長年日記]
_ [ruby] 夏休みの自由研究 sinatra
夏休みで時間がとれたのでひさびさに技術のお話。
ruby の web アプリを簡単に作れる sinatraをいじってみました。
特徴はとても簡単に作れること。
Webサーバまで込みなのでApatchとかIISとかも要りません。
ということで、Web開発に関しては素人の私が
素人ならではの視点で紹介します。
_ sinatra 参考文献
まずはどこを見ればいいかですが、
私はdarashiさんのスライドとUnohの内田さんのブログ、
そしてsinatraの公式ページreadmeを見ました。
あと、sinatraの綴りはローマ字で書いたshinatoraからhとoを抜いたものです。
私は間違って覚えていたのでぐぐってもさっぱり情報がでてきませんでした。(^^;)
_ sinatra インストール
ruby のパッケージ管理システムgem を使ってインストールできます。
私はmac 上のruby 1.8.7 で動かしています。
# macだと買ってきたそのままでruby1.8.6とgem が入ってる?
# gemのインストールや使い方はRuby逆引きレシピの最初の章に詳しく書いてあります。
$ sudo gem install sinatra
これでインストール完了。
_ sinatra 最初の一歩
最初のコードはこちら。 エディタで入力して myapp.rb など好きな名前で保存しましょう。require 'rubygems' require 'sinatra' get '/' do 'Hello world!' endでは、これを起動します。
$ ruby myapp.rbアクセスしてみます。ブラウザから
http://localhost:4567/にアクセスすると・・・動いた! 'Hello world!' が表示されれば成功です。'Hello world!'の部分を好きな文字列にするとブラウザで表示される文字列も変わります。注意は、ソースコードを変更したら ruby myapp.rb を止めて、再起動する必要があることです。
_ / 以下を指定したアクセス
require 'rubygems' require 'sinatra' get '/' do 'Hello World!' end get '/ja/' do 'Konichiwa.' end get '/hello/:param' do |param| "Hello #{param}!" end今度は http://localhost:4567/ja/ にアクセスすると、'Konichiwa.' が表示されます。/ja/の部分ですね。 次は http://localhost:4567/hello/iga へアクセスすると "Hello iga!" が表示されます。 paramにアクセスしたアドレスが入ってるわけですね。
_ RSSを出力してみよう
rubyの標準ライブラリを使ってrssが生成できるので、それをsinatraを使って公開してみましょう。より詳しくは Ruby逆引きレシピ149 RSSを作成したい に書いてあります。require 'rubygems' require 'sinatra' require 'rss' def make_rss(param) $rss = RSS::Maker.make("1.0") do |maker| maker.channel.about = 'http://igarashikuniaki.net/sinatra/index.rdf' maker.channel.title = 'igaiga' maker.channel.link = 'http://igarashikuniaki.net/tdiary/' maker.channel.description = 'いがいが日記sinatra' maker.items.new_item do |item| item.link = "http://igarashikuniaki.net/sinatra/1.html" item.title = param end end end get '/rss/:param' do |param| make_rss(param) $rss.to_s endhttp://localhost:4567/rss/iga などへアクセスすると、igaを含んだRSSが出力されます。igaを変えるとRSS item のタイトルが変わります。
_ まとめ
ということでサクサク書いてサクサク動くsinatraは便利だなぁと思いました。自分がwebアプリをさくさく書いてる感覚が例えるなら映画ピンポンの"I can fly!"って感じで気持ちいいです。(^^) ここまでできれば、好きなwebページ群を自分でパースして再編集してWebとRSSで出力、とかできますしね。あとはGoogleAppEngineで動くと無料で使えるしいいなと。GAEでsinatraを動かすのはjugyoさんのブログで書かれているので、次はこれにチャレンジしたいです。sinatra、楽しいです!
4798119881
_ 追記(2009.8.17 21:40)
まちゅさんのページにインストールではまった場合の対処があるのでリンク。 まちゅさんのとこはThin web serverが起動してるのだけど、 うちはWEBrickだ。sinatraのバージョンは同じぽいんだけど何が違うんだろ?== Sinatra/0.9.4 has taken the stage on 4567 for development with backup from WEBrick [2009-08-17 21:31:28] INFO WEBrick 1.3.1 [2009-08-17 21:31:28] INFO ruby 1.8.7 (2008-08-11) [i686-darwin9] [2009-08-17 21:31:28] INFO WEBrick::HTTPServer#start: pid=433 port=4567また、june29さんから「『ソースコードを変更したら ruby myapp.rb を止めて、再起動する必要がある』は本当か?自分の環境ではリロードだけでOK」との指摘をいただきました。ursmさんから回答をいただき、これはsinatra0.9.2以降で再起動が必要になったとのこと。その前はリロードで反映されていたそうです。0.9.2以降で同じことをやりたい場合はshotgunを使えとのことです。みなさんツッコミありがとうございました。m(_ _)m