Time to Read
7分
前回までのあらすじ
Sinatra と Padrino の最新バージョンがリリースされたよ。 Sinatra 1.3.0 は昨日紹介したよ(Sinatra 1.3.0 & Padrino 0.10.3 がリリースされました。ざっくり紹介(1))。今日はパドリーノです。
そのまえに、 Padrino ってなんだよという方へ
Padrino framework は、コアに Sinatra を据え、さらに便利になるようにいろいろな機能を拡張したライブラリ一式です。むかし sinatra_more というものがあったんですが、その開発メンバーも含め新チームでゴリゴリと開発している模様です。
このフレームワークの狙いは、 Sinatra のエッセンスに合わせつつ、どんどん複雑さを増すばかりのアプリケーション開発に必要となるような機能、たとえば、フォーム、メール配信、国際化、ヘルパー、キャッシュなど……、を付け加えていくことです
詳細は 公式日本語ドキュメント「WHY」 をご参照ください。って、僕が訳したんですけど。
3行で分かる特徴としては、
- Sinatra をベースにした MVC の導入
- Agnostic
- Cherry-pickable
といったところでしょうか。
そもそも 0.10.0 リリースおめでとうございました
今回 0.10.3 は Sinatra 1.3 対応を大きな特徴としたリリースです。で、実はマイナーバージョンアップである 0.10.0 は3ヶ月前にリリースされています。その後、地道に3回のバージョンアップが行われていたりします。
Sinatra 1.3 リリースにかこつけて、その辺の Padrino の最新情報をピックアップしていこうかな~と思います。以下の内容の詳細はブログに詳しいですが、日本語版も追いついていく予定、デス…… がんばります……。
Rubinius サポート、 JRuby も問題なく動く (0.10.0~)
0.10.0 より、正式に Rubinius のサポートを開始しています。 CI もしています。
本当は、 JRuby もサポートだ~と言いたかったんですが、9月半ばよりCIの設定から外れています。C拡張が使えないことから利用者も少なそうだ、最新版では一旦サポートを外す、とのことでした :`( ただし、今手元で試した限りでは問題なく動かせます(最近までサポートしていたので当然といえば当然ですが……)。それに、ブログでも JRuby への言及がありますし、まったく見捨てようという流れではなさそうです。
ちなみに、 Running Padrino on JRuby というのを僕が書いたんですが、そもそも Java 力が低いこともありもっと良いやり方を誰かに書いてほしいです~~(で、確認中に思ったんですが、 JRuby ものすごく進歩してますね、 1.9 互換モードが普通に問題なく動いている……)。
JRuby 利用者が増えれば CI も再開するかもですので、どんどん利用してほしいところ。
ルーティング解決速度の改善(0.10.0~)
記事をみる限り 素の Sinatra とほとんど変化なし(つまりそれって相当速いよね?)、というレベルのようです。
catch-all ルーティング設定の導入(0.10.0~)
1 2 3 4 5 6 7 8 9 10 11 12 | MyApp.controller :pages do ## # NOTE このルーティング設定は、一番最後に評価されるので、 # 結果的にキャッチオールとして動作する get :show, :map => '/*page', :priority => :low do "Catchall route" end get :hoge, :map => "/hoge/fuga" do "Specific roooooute" end end |
あとは分かりますね。 :priority => :low というオプションを渡せるようになりました。 :priority => :high もありますので、ややこしいルーティングをしたときに活躍しそうです。
柔軟な before/after フィルター(0.10.0~)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | DemoApp.controller :example do # Based on a symbol before :index do # Code here to be executed end # Based on a symbol, regexp and string all in one before :index, /main/, '/example' do # Code here to be executed end # Also filter by excluding an action before :except => :index do # Code here to be executed end get :index do # ... end end |
- 特定のアクションだけ動かすフィルタ
- 特定のアクションでは動かさないフィルタ
みたいなのが簡単に実現できます。
キャッシュ機能の強化(0.10.1~)
具体的には Mongo Cache Store が利用できます(もともと、 Redis や memcached をキャッシュストアに使えたのですが)。そもそもキャッシュ機能自体が最近リリースされています。簡単なヘルパーでページキャッシュ/フラグメントキャッシュが実現できますので、ぜひ試してみましょう。
1 2 3 4 5 6 7 8 9 10 | # Basic, page-level caching class SimpleApp < Padrino::Application register Padrino::Cache enable :caching get '/foo', :cache => true do expires_in 30 # 何秒で expire するかをセット 'Hello world' end end |
これでキャッシュできてるって素敵やん?
ActiveSupport 3.1 コンパッチブル(0.10.2~)
Rails 3.1 のリリースは記憶に新しいですが、 Padrino はいちはやく ActiveSupport 3.1 に対応しています。
sinatra-flash の利用開始(0.10.3~)
rack-flash の開発があまり活発でないため、移行したようです。一緒に、コアメンバーである Davide D’Agostino(@DAddYE) が開発したもっと高速なflash機能もアナウンスされています。コードを見た感じ、そりゃ速いよ、と思いました(w padrino-contrib から入れられます。全然関係ないですけど @DAddYE のアイコンがかなりクールですね。
テストを minitest に移行(0.10.3~)
Test::Unit と shoulda で書かれていたテストを、「Ruby 1.9 は minitest を推奨してるっぽくね? 乗るしかない、このビッグウェーブに」というノリで minitest に移行しているところだそうです。速くてうれしいみたいです。
かっこいいロガー(0.10.3~)
そもそも Padrino::Logger はカラフルでかっこいいんですが、新しくなりました。まずは下を見てください。
より見やすく、適切な情報を見せてくれるように進化しました。遅いページは文字が赤くなったり、など……。
各種バグが概ね直っている
メジャーバージョンは未だに「0」ということで、それなりにバグが目立つこともあります。で、 0.10.0 ~ 0.10.1 まではリローダーが特定のルーティングを正しく再設定してくれないという結構困ったバグがありましたのですが、0.10.2の段階で FIX されました。
その他、かなりの数のバグフィックスがされています。ということで、可能な限り新しいバージョンを利用するのが良いかと思います。
ちなみに、最近互換性云々が流行りなのでひとこと言っておくと、 Padrino の特徴は Agnostic なところですので、その恩恵として外部ライブラリの影響でアップグレードに苦労する、ということが非常に少なくなっています。まあ、0.9.xはかなり激しく開発されていたので変更も多かったのですが、0.10系はコアのドラスティックな変更はかなり少なくなるようです。僕の経験でも、 0.9.10 ぐらいから 0.10 系に上げたりした際、アナウンスされている手順に任せれば特に問題なく移行できました。0.10系のアップグレードはほとんど「おまじない」無しでできるのではないかと思います。
むろん、設計上 Sinatra への依存度は大変高いですので、その間のバージョンの互換だけは正しい情報をキャッチアップしてください。
その他
- ドキュメントの強化
- 対応コンポネントの増強(上述の minitest とか、 mysql2 for sequel とか)
- 翻訳ファイルの改善
地道に開発が続いています!
One More Thing: Asset Pipeline への言及
以下のようなものが今のところありますよ、と紹介されていますね。
- Jammit Sinatra – Jammitの Sinatra ラッパー
- padrino-sprockets – 名前の通り。若いプロジェクトですが期待感高いとか
- assets_compressor – Padrino-contrib のレシピで、軽量です。
- Sinatra AssetPack – Sinatra のための、超クールな Asset コンパイラ
- Middleman – Asset 取扱いのための、興味深い製品、 Padrino でできている
コアには入らない可能性が高いですが、 padrino-sprockets gem あたり良さそう。むしろ上記ライブラリは僕もあんま試してないので試してみないとですね~~~。
ということで
Padrino framework が大変活発に開発されていること、それと同時に、アナタの思っている以上に機能が充実した、フルスタックフレームワークであることが分かっていただけたかもしれません。
0.10系がリリースされて数ヶ月、かなり安定してきたところですので、若いプロダクトとはいえストレスなく使える状態になっていると思います。何より、あくまでも「Sinatra」なので、あのサクサク感、ゴリゴリ感をそのままに、よりスピーディに開発が楽しめます。
ぜひ、あなたの Ruby の、 Web 開発の抽出しに Padrino を加えてみてはいかがでしょう?





