«前の日記(2009-08-14) 最新 次の日記(2009-08-22)» 編集

いがいが日記


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
end
http://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

«前の日記(2009-08-14) 最新 次の日記(2009-08-22)» 編集