massの日記

日々の薪

SinatraからPadrinoへのお引越し

ここ最近久しぶりにRubyと戯れている@_zooです。

今回のお話はVOYAGE GROUP エンジニアブログ : Advent Calendar 2012の12/22のエントリーとなります。

Advent Calendarを書くのは初めてですが、大掃除正月をゆっくり過ごすためのお話は既に出されていたので、年末らしい話!と考えるのはやめました。

じゃあ、なんの話にするかと悩みましたが、ここ最近久しぶりに戯れているRubyのお話にします。

Rubyといっても広いので、今回はSinatraと今年になって知ったPadrinoという2つのフレームワークについてのお話にします。

Sinatraは知っている方も多いかもしれませんが、Rubyの軽量フレームワークです。

PadrinoSinatraをベースにしつつも、LoggerやORMをとりこんだ、こちらも軽量フレームワークです。

実のところ、SinatraRubyで一番最初に触ったフレームワークですが、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!が見えたら、作成成功です。

さて、ここまでだとSinatraREADMEの最初の数行とかわりありません。

よくある話ですがアプリは動かし始めると、だんだん要求が増えてきます。

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のエントリーです。