Padrino事始め

いままでREMPでは、フレームワークSinatraを使ってAPI等々の実装を行なってきたのですが、機能を足すたびに記述が長くなってしまい、またview等を追加する場合にもスケルトン生成を主導手動で行わければならないといった点があるので、やはり少し大きめのアプリケーションになるとRailsなのかな。と思っていたのですが、その前にSinatraを拡張したPadrino(http://www.padrinorb.com/)を使ってみることにしました。

導入

お約束ですが、Rubygemsですぐにインストールできます。

% sudo gem install padrino

次に作成するアプリケーションのプロジェクトを生成します。(ここがSinatraに無いところ)
Padrinoでは、好きなORMやテンプレートエンジンを利用することができるので、例えば、ORMにmongoid、テンプレートエンジンにerbを使いたければ、プロジェクトディレクトリを掘る階層でpadrinoコマンドを実行します。

% padrino gen project testapp -d mongoid -e erb
create
create  .gitignore
create  config.ru
create  config/apps.rb
(中略)
=================================================================
testapp is ready for development!
=================================================================
$ cd ./testapp
$ bundle install
=================================================================

で、次にコマンド実行時の末尾にあるとおり、bundle install でプロジェクトに必要なGemをインストールします。

% cd testapp
% bundle install
Fetching gem metadata from http://rubygems.org/.........
Fetching gem metadata from http://rubygems.org/..
Using rake (0.9.2.2)
Using i18n (0.6.0)
Using multi_json (1.3.6)
Using activesupport (3.2.5)
(中略)
Using sinatra-flash (0.3.0)
Your bundle is complete! Use `bundle show [gemname]` to see where a bundled gem is installed.

この段階でのディレクトリ構成を見ると

.
├── Gemfile
├── Gemfile.lock
├── app
│   ├── app.rb
│   ├── controllers
│   ├── helpers
│   └── views
│   └── layouts
├── config
│   ├── apps.rb
│   ├── boot.rb
│   └── database.rb
├── config.ru
├── public
│   ├── favicon.ico
│   ├── images
│   ├── javascripts
│   └── stylesheets
└── tmp

といった具合になっています。(Sinatraだと手動であれこれ掘らないとダメだったのですが楽…)
ひとまず動かしてみます。現状、mongoidをORMに指定したのでlocalhostのMongoDBに接続しに行くのでこれを止めます。

# config/database.rb
# Connection.new takes host, port
host = 'localhost'
port = Mongo::Connection::DEFAULT_PORT
database_name = case Padrino.env
when :development then 'testapp_development'
when :production  then 'testapp_production'
when :test        then 'testapp_test'
end
# 以下コメントアウト
#Mongoid.database = Mongo::Connection.new(host, port).db(database_name)

Sinatra流儀にひとまずapp.rbに直接 / へアクセスされた際の挙動を追加してみます。
単純にHello返すのみ。

# app/app.rb
class Testapp < Padrino::Application
register Padrino::Rendering
register Padrino::Mailer
register Padrino::Helpers
enable :sessions
get '/' do
"Hello, Padrino!"
end

ここまでで既に動くはずなので、rackupしてみます。

% rackup
[2012-06-10 14:33:47] INFO  WEBrick 1.3.1
[2012-06-10 14:33:47] INFO  ruby 1.9.3 (2012-02-16) [x86_64-darwin11.3.0]
[2012-06-10 14:33:47] INFO  WEBrick::HTTPServer#start: pid=36264 port=9292

といった具合にWEBrickが動き始めるので、ブラウザで http://localhost:9292 へアクセスすると表示を確認できます。
またコンソールを確認すると、ログ出力も確認できます。

[2012-06-10 14:33:47] INFO  WEBrick::HTTPServer#start: pid=36264 port=9292
DEBUG -      GET (0.0079ms) / - 200 OK
127.0.0.1 - - [10/Jun/2012 14:34:42] "GET / HTTP/1.1" 200 15 0.0175
127.0.0.1 - - [10/Jun/2012 14:34:42] "GET /favicon.ico HTTP/1.1" 200 - 0.0081

ひとまず動いたことだけは確認できました。
このままでは、Sinatraとほとんど変わりませんが、画面数を増やしていく場合にコントローラを分離して記述ができたりするのでそのあたりは後で書く…。
Sinatraの様にシンプルでありながら、Railsの様なMVCパタンも入れられるところが自分好みな感じがします。(触り始めて数時間の感想)

(Visited 1 times, 1 visits today)

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です