SinatraからPadrinoへのお引越し
今回のお話はVOYAGE GROUP エンジニアブログ : Advent Calendar 2012の12/22のエントリーとなります。
Advent Calendarを書くのは初めてですが、大掃除や正月をゆっくり過ごすためのお話は既に出されていたので、年末らしい話!と考えるのはやめました。
じゃあ、なんの話にするかと悩みましたが、ここ最近久しぶりに戯れているRubyのお話にします。
Rubyといっても広いので、今回はSinatraと今年になって知ったPadrinoという2つのフレームワークについてのお話にします。
Sinatraは知っている方も多いかもしれませんが、Rubyの軽量フレームワークです。
PadrinoはSinatraをベースにしつつも、LoggerやORMをとりこんだ、こちらも軽量フレームワークです。
実のところ、SinatraはRubyで一番最初に触ったフレームワークですが、Padrinoを知ったのは今年になってからです。きっかけは、@bash0C7 からの"Padrinoいいですよー"という一言でした。
Shibuya.rbでも何回か話にあがり、VGでは実際にプロダクトの開発でも使用されています。
既存のSinatraアプリをPadrinoアプリに置き換えてみたいけど、できるのかな?という単純な興味が発端となり試してみたらできたので、そのやり方を紹介させていただきます。
まず、Sinatraアプリを作ります。今回はBundlerを利用します。
gem install bundler
mkdir voyage_advent_calendar_2012
cd voyage_advent_calendar_2012
ここからがアプリの作成です。 まずはGemfileを用意します。
# Gemfile
source :rubygems
gem 'sinatra', :git => "git://github.com/sinatra/sinatra.git"
Gemfileに記入されているSinatraを入れます。
bundle install --path gems
次はmy_app.rbの準備です。
# my_app.rb
require 'sinatra/base'
class MyApp < Sinatra::Base
get '/' do
'Hello Sinatra!'
end
run! if app_file == $0
end
これでもう準備は整いました。
後はたった一行のコマンドを打つだけで動きます!
bundle exec ruby my_app.rb
http://localhost:4567/ にアクセスしてHello Sinatra!が見えたら、作成成功です。
さて、ここまでだとSinatraのREADMEの最初の数行とかわりありません。
よくある話ですがアプリは動かし始めると、だんだん要求が増えてきます。
SInatraは最初に書いた通り軽量フレームワークなので、もしかしたら物足りなくなるかもしれません。
自分で不足分だけ補っていくのはそれはそれで楽しいですが、 Sinatraでは物足りない部分をさくっと補いたくなります。
そんな時に便利なのがPadrinoです。
Padrino is a ruby framework built upon the Sinatra web library. Sinatra is a DSL for creating simple web applications in Ruby.
という説明の通り、ベースにはSinatraがあり、ちょっとアプリが複雑になってきて、 Sinatraだと物足りたくなったら、こちらに乗り換えると、物足りない部分がさくっと補われます。
え、フレームワークの乗り換えなんて面倒、と思いきや、そうでもないです。 SinatraのREADMEの最初の数行を読むのと同等の気力でどうにかなります。
まずはPadrinoを入れる準備をします。 先程同じようにGemfileを編集します。この際、Sinatraの部分は削除してしまいます。
# Gemfile
source :rubygems
gem 'padrino', :git => "git://github.com/padrino/padrino-framework.git"
不用となったgemをばさっと削除して、必要なものだけ入れ直します。
rm -rf gems
bundle
Padrinoを入れたところで、次はPadrinoプロジェクトの作成です。 generateタスクが用意されているので、コマンド一行でプロジェクトのテンプレートが作成されます。
bundle exec padrino g project ../voyage_advent_calendar_2012 -n my_app
#conflict Gemfile
#Overwrite /your_app_path/Gemfile? (enter "h" for help) [Ynaqdh] Y
Gemfileがコンフリクトした!というメッセージが出てきます。 手元にあったGemfileとPadrinoが作成しようとしているGemfileが同じファイルだからです。 ここでは何も考えずYを押します。
さて、Padrinoは自分で必要となるgemが記入されたGemfileを用意してくれました。 先ほど同様、追記されたであろうgemを入れます。
bundle
これでPadrinoを動かす準備はできました。 後は、自分が作ったアプリケーションのコアファイルを移動し、 Sinatraを呼び出している部分をPadrinoに変えるだけです。
mv my_app.rb app/app.rb
# my_app.rb
class MyApp < Padrino::Application
get '/' do
'Hello Padrino!'
end
end
これでPadrinoへの載せ替えは終了です。
最後に、Padrinoを起動させます。
bundle exec padrino start
http://localhost:3000/ にアクセスしてHello Padrino!が見えたら、引越し成功です。
ということで、年末とは関係ないSinatraからPadrinoへのお引越し話でした。
明日は@hironomiuのエントリーです。