BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース 本当はシンプル: Sinatra,1.0 をリリース

本当はシンプル: Sinatra,1.0 をリリース

原文(投稿日:2010/04/17)へのリンク

2007 年末の登場以来,軽量フレームワークの Sinatra web framework には,多くの関心が寄せられてきた。その結果は,現在 Google で "Sinatra" を検索すると,FrankNancy に関係するものより上位にランクされるほどだ。InfoQ では Sinarta プロジェクトの創始者である Blake Mizerany 氏から,Sinatra の詳細と 1.0 リリースの内容について話を聞いた。

Mizerany 氏の説明によれば,1.0 がひとつのマイルストーンであるのは,追加されたものよりも,取り除かれたものに理由があるという。

テンプレートに Tilt を採用することによって,かなりの行数のコードが取り除かれました。また,拡張 API の仕様が確定されました。0.9 シリーズにあった API 部分の重複は,現在では完全に解消されています。

その他のコードベースは,以前のリリースからほとんど変更されていない。

Sinatra は Rails のようなモデル-ビュー-コントローラ (Model-View-Controller,MVC) フレームワークではない。強いて言うならば,"Ruby を使用して web アプリケーションを作成するためのドメイン固有言語 (domain-specific language)" である。Sinatra ではアプリケーションが HTTP リクエストに応答する方法を,REST パラダイムに沿ったシンプルな形式で定義することができる。

Sinatra は HTTP へのダイレクトなマッピングです。Sinarta は隠された複雑さの代わりに,公開された単純さを目指しているのです。そもそも HTTP や HTML は難しいものではありません。隠す必要など何もないのです。 ... あまりに '基本的' なために誤解されることもありますが,実際に試せば気に入ってもらえると思います。

Sinatra のアプリケーションは,ひとつのファイルに収まるほど小さくなる。各処理のルートは HTTP メソッドと URL パターンによって定義され,ひとつのブロックとして扱われる。例えば Sinatra の "Hello world" アプリケーションは次のようなものだ。

require 'rubygems'
require 'sinatra'
get '/hi' do
  "Hello World!"
end

Sinatra はまた,Erb,Erubis,HAML など数多くのテンプレートシステムと組み合わせることができる。その一方でフォームビルダやデータベース接続など,MVC フレームワークの持っている機能の多くはバンドルされていない。このような単純さにゆえに,Ruby 1.8.x と 1.9.x,JRuby,MacRuby など,数多くの Ruby 実装上で動作可能だ。

Sinatra の採用実績を年代順に記録した Sinatra in the Wild というサイトがあり,このフレームワークを用いたさまざまな Web アプリケーションとサイトがリストされている。そこには GitHub や Gemcutter,さらには Heroku,Engine Yard,ENTP といった企業の名もある。最近では NewRelic から,同社の RPM Ruby Agent パフォーマンス計測ツールで Sinatra をサポートするという発表があった

バージョン1.0 では,新機能もいくつか取り入れられている。テンプレートのレンダリングに Tilt フレームワークが採用されたことにより,テンプレートキャッシュ,一貫性のあるテンプレートバックトレース,新たなテンプレートエンジンなどがサポートされるようになった。また Erb,Erubis,Haml などのテンプレートが初回レンダリング時にコンパイルされるようになり,表示構成時間が5~10倍も改善されている。テンプレートファイルのコンパイル結果を再利用するか,あるいは要求ごとに再コンパイルするかは,新たに追加されたフラグによってコントロールできる。

現行バージョンのユーザは,アップグレードによって多少の問題が発生するかも知れない。しかし今後も新機能を追加していくためには,それは必要なことだ。FAQ によると,

アプリケーションが公開機能のみを使用して,非推奨機能について対処できているなら,Sinatra 1.0 でも問題ありません。最新の Sinatra 0.9.x リリースでは ... Sinatra 1.0 で導入される非互換性のすべてについて,非推奨の警告が行われるようになっています。
[...]
今後 Sinatra 0.9.x リリースについては,セキュリティ上の問題や大きな障害に対応する追加リリースはありますが,新機能の追加は行われません。

1.0 リリースに長期間を要した理由のひとつは,Semantic Versioning Model を採用したことにある。

すべての 1.x リリースについて,今回の 1.0 リリースへの後方互換性を確保する予定です。そのためには今後長期間に渡って,1.0 リリースとの非互換性の発生を防ぐ必要があります。そのため私たちには,望ましくないインターフェースについての精査が必要だったのです。

Mizerany 氏は今後も Sinatra が,その支持者を増やし続けるものと予測する。

Sinatra はそのシンプルさゆえ,あらゆる場所で利用可能です。このシンプルさを維持するため,今後の活動には特に注意しています。... Sinatra には内輪の IRC や Campfire ルームなどは存在しません。次のステップは,ひとつの場所で決定されています。すべてがオープンなのです。

Mizerany 氏は Sinatra の拡張サポート機能を (作成が簡単なことなどの点で) 特に気に入っている 。氏によるとそれは,"特別なボイラプレート用のディレクトリや初期化スクリプトを必要としない,gem として提供・取得可能な単純なライブラリ" である,ということだ。すでに数多くの拡張が開発されていて,ActiveRecord を通じてデータベースを操作するためのもの,Sequel ORM認証 (authentication)非同期タスク を行うものなどがある。さらに Sinatra は,Ruby web フレームワークの標準 Rack インターフェース上に位置しているため,Rack ミドルウェアコンポーネントへの接続も可能である。

Sinatra のアイデアは,数多くの同種のフレームワークからインスパイアされたものだ。JavaScript 用の Sammy や Clojure 言語における Compojure などがその例であり,その他 Scala,PHP,.NET,といった言語にも同種のものがある。

Sinatra の開発をサポートしているのは Heroku だ。しかし,

Sinatra の成功の要因はコミュニティにあります。Heroku は単に必要な作業時間の確保をサポートしてくれたり,作業の継続を励ましてくれる存在なのです。このクレジットの 99.9999% はコミュニティのものです。メーリングリストのスレッド/質問を私が見るよりも先に,いつも他の誰かが,良質で丁寧な回答を付けてくれるのですから。

この記事に星をつける

おすすめ度
スタイル

BT