Ruby Freaks Lounge

第11回 自由なWebフレームワーク,Ramaze

この記事を読むのに必要な時間:およそ 2 分

はじめに

第9回はSinatraで作った掲示板アプリを通して,SequelとHamlという2つのライブラリを紹介しました。今回はまた別のフレームワーク「Ramaze」について紹介します。

Ramaze

Ramaze(「ラマゼ」と読みます)はシンプルで,自由度の高いWebアプリケーションフレームワークです。

シンプルなフレームワークといえば,第7回第9回で紹介したSinatraもそうでした。SinatraはDSLを駆使して独自の世界を作っていましたが,RamazeはRubyのやり方をできるだけ踏襲します。実際のアプリケーションの例を見てみましょう。

リスト1 RamazeによるHello Worldアプリケーション

require 'rubygems'
require 'ramaze'

class MainController < Ramaze::Controller
  map '/'

  def hello
    "Hello, world!"
  end
end

Ramaze.start :port => 7000

上のプログラムを実行し, http://localhost:7000/hello にアクセスすると,画面に「Hello, world」と表示されます。

Sinatraに負けず劣らずシンプルですが,普通のRubyプログラミングのように,クラスを定義し,そのメソッドとしてアプリケーションの動作を記述します。クラス名はMainControllerとしましたが,特に規約はないので,好きな名前を付けて構いません。

「map '/'」はコントローラとURLを対応づけるための指示です。今回はMainControllerを'/'に対応づけているため,'/hello'へのアクセスでMainController#helloメソッドが実行されます。最後の「Ramaze.start」でサーバを起動しています。オプションでポート番号などを指定できます(省略すると7000番になります)。

インストール

上のプログラムを実際に実行する方法を解説します。まず,RubyGemsでRamazeをインストールします。

図1 Ramazeのインストール

gem install ramaze

現在なら,「ramaze-2009.05」というバージョンがインストールされるはずです(Ramazeはだいたい月に一回リリースがあり,年と月がバージョン番号になります)。その後,例えば「hello.rb」というファイルに上のスクリプトを保存し,以下のコマンドを実行するとアプリケーションが起動します。

図2 Hello Worldアプリケーションの起動

ruby hello.rb

選べるライブラリ

Ramazeの特徴の一つはモジュラーな設計であること,つまりいろいろな部分が「取り替え可能」になっていることです。Ramazeの提供する選択肢を見てみましょう。

サーバ

Ramazeは第7回で紹介した Rackを利用しているため,Mongrel,Thin,Passenger(mod_rails)などさまざまなアプリケーションサーバの上で動作させることができます。

ビュー部分(テンプレートエンジン)

RailsでおなじみのERBや,HTMLをインデントで表現するHamlなど,10を超えるテンプレートエンジンが標準でサポートされています。

テンプレートエンジンを切り替えるには,コントローラ内で「engine :ERB」のような指定を行います。

モデル部分(O/Rマッピングライブラリ)

Ramazeはデータベースについて感知しません。そのため,ActiveRecordDataMapperSequelといったライブラリを一つ選んで使うことになります。これらのライブラリは,どれも以下のような機能を持ちます。

  • Rubyのオブジェクトと,デーブル内のデータとのマッピング
  • モデルクラス間の関連を扱う機能(アソシエーション)
  • データベースに保存するデータの検証(バリデーション)
  • データベースのスキーマを操作する機能(マイグレーション)
  • プラグインによる拡張機能

ActiveRecordはRailsで標準採用されているライブラリで,同名のActive Recordと呼ばれるデザインパターンから名付けられました。モデルクラス自身はスキーマの情報を持たず,アクセサはテーブル構造から自動的に定義されます。

ActiveRecordはRailsで利用されているため,たくさんのプラグインが作られています。

DataMapperはmerbというフレームワークでよく使われるライブラリで,同名のData Mapperというデザインパターンから名付けられました。ActiveRecordと違い,テーブル構造とクラス構造は必ずしも一致する必要がなく,モデルクラスが明示的にプロパティを持ちます。

また,機能が「dm-core」「dm-validations」「dm-migrations」など複数のgemに分かれて実装されており,アプリケーションで必要な機能だけをインストールさせることが可能です。「dm-more」という,プラグインを集めたgemもあります。

Sequelは「あるテーブル」を表すオブジェクトを作り,それを通してSQLを発行するのを基本としています。対応するデザインパターンはTable Data Gatewayですが,Sequel::Modelを使うことで,ActiveRecordのようなモデルクラスを利用することもできます第9回参照)。

SequelはAPIがシンプルなため,比較的シンプルなアプリケーションと相性が良いでしょう。一方で,利用できるプラグインはまだあまり多くないようです。

著者プロフィール

原悠(はらゆたか)

NaClこと「ネットワーク応用通信研究所」勤務。さまざまなプログラミング言語に興味を持つ。最近触っている言語はRuby,Scheme,JavaScript,Englishあたり。

URL:http://route477.net/

著書

コメント

コメントの記入