Ruby Freaks Lounge

第13回モジュラーなWebアプリケーションフレームワーク、Merb

はじめに

MerbはRubyで記述されたWebアプリケーションフレームワークです。2006年の10月18日にEzra Zygmuntowicz氏によって最初のリリースが発表されました

RubyでWebアプリケーションフレームワークといえばRuby on Rails(以下Rails)が有名ですが、Merbは以下のような特長を備えています。

  • ActiveRecord, DataMapper, SequelなどのORMを自由に選べる
  • jQuery, PrototypeなどのJavaScriptライブラリを自由に選べる
  • HAML, ERBなどのテンプレートエンジンを自由に選べる
  • 単一の機能を実現するために作られた再利用しやすいプラグイン群がある
  • 軽量でシンプルなコア
  • プラグイン機構としてRubyGemsを使っている
  • ControllerとViewのコンテクストが同じ
  • シンプルで強力なルーティングの仕組み

Merbの特徴は、モジュラーであることです。例えばビュッフェ形式のように、自分の好きな道具を選んで利用することができます。

また、Railsより後発のプロジェクトということで、全体的にRailsの問題点を克服するような設計となっています。最近では、Railsの次期メジャーリリースでMerbとの統合を行うという発表がなされるなど、Merbの優れた特長の多くがRailsに逆輸入される状況になっています。

インストール方法

では早速、Merbをインストールしてみましょう。Merbをインストールする方法としては、RubyGemsを使うのが一番簡単です。

以下のようにgemコマンドを使ってインストールしてみましょう。

% sudo gem install merb

merbというパッケージは、Merbが依存しているgemを一括してインストールするためのバンドルGemになっています。

執筆時点の最新バージョン(merb-1.0.11)では、49個のGemがインストールされます。Merbを構成している個々のコンポーネントは、すべて独立したgemとして提供されています。Merbでは、プラグインについてもすべてGemで提供する事になっており、バージョン管理の煩雑さを回避する事に一役買っています。

Merbを使ってみる

では、実際にMerbを使ってWebアプリケーションを作ってみましょう。以下のようなコマンドを実行すると、Merbアプリケーションのひな形を生成することができます。

% merb-gen app my_app_name

このmerb-genというコマンドは、templaterというGenerator生成ライブラリを使って実装されています。merbでは、controllerやtestなどのひな形を使うときには、このmerb-genコマンドを利用します。templater自体、非常に汎用的で優れたGeneratorフレームワークなので、コードジェネレータを作りたいときには重宝します。

アプリケーションのひな形が生成されたら、ひな形のディレクトリに移動してWebサーバを起動してみましょう。以下のコマンドでWebサーバが立ち上がり、4000番のポートでアクセスできるようになります。

% merb

では早速、http://localhost:4000にブラウザでアクセスしてみましょう。以下のような画面が表示されます図1⁠。

図1 Merbのエラー画面
図1 Merbのエラー画面

この画面は、リクエストされたPATH '/' に対応するルートが定義されていない場合に表示されるエラー画面です。

Merbには、発生した例外に対応するエラーページを表示する機能が最初から備わっています。

それでは、'/' へのリクエストに応答するために、以下のコマンドでTopコントローラのひな形を生成してみます。

% merb-gen controller top

     [ADDED]  app/controllers/top.rb
     [ADDED]  app/views/top/index.html.erb
     [ADDED]  spec/requests/top_spec.rb
     [ADDED]  app/helpers/top_helper.rb

これで、Topコントローラが生成されました。コントローラのファイルは、Railsと同様にapp/controllersディレクトリに設置されます。

以下は生成されたapp/controllers/top.rbファイルです。

リスト1 app/controllers/top.rb
class Top < Application

  def index
    render
  end

end

Applicationというクラスは、全てのコントローラの基底クラスとなるコントローラです。

この辺りはRailsと似ていますが、Railsとは違って、コントローラの名前としてTopという短い名前が使われています。メソッド名やクラス名に対するミニマリズムは、Merbの個性的な一面です。

次に、PATHとコントローラを結びつけるために、ルーティングの設定を行います。ルーティングの設定は、config/router.rbの中で行います。ファイルの最後の方に以下のような記述を加えましょう。

リスト2 config/router.rb
Merb::Router.prepare do
  # Change this for your home page to be available at /
  match('/').to(:controller => 'top', :action =>'index')
end

続いて、indexアクションが生成するViewを編集してみましょう。app/views/top/index.html.erbファイルが対応するViewになります。

リスト3 app/views/top/index.html.erb
<h1>Hello, world!</h1>

さて、それではもう一度Webサーバを起動してhttp://localhost:4000にアクセスしてみましょう。以下のような画面が表示されます図2⁠。

図2 Hello, world!

図2 Hello, world!

せっかくなので、Merbの特長であるモジュラー性を体験するために、テンプレートエンジンとしてERBの代わりにHAMLを使ってみましょう。

config/init.rbを開いて、以下のようにuse_template_engineの部分を書き換えます。

リスト4 config/init.rb
# Go to http://wiki.merbivore.com/pages/init-rb

require 'config/dependencies.rb'

use_orm :datamapper
use_test :rspec
#use_template_engine :erb
use_template_engine :haml

続いて、HAML用のViewファイル app/views/top/index.html.haml を用意します。

リスト5 app/views/top/index.html.haml
%h1 Hello, HAML world!

再びWebサーバを起動してhttp://localhost:4000を確認してみましょう。今度は以下のような結果が得られます図3⁠。

図3 HAMLを使った場合
図3 HAMLを使った場合

まとめ

Railsを使った事がある方は気がついたと思いますが、Merbを使ったWebアプリケーション開発は、ディレクトリ構成や開発の流れなど、全体的にRailsの作法を踏襲したものになっています。そのため、Railsの知識を持っていれば比較的簡単にMerbを使う事ができるようになると思います。

近頃では、SinatraやRamazeなどのPost Rails世代のフレームワーク群が数多くリリースされていますが、Railsからの乗り換えやすさという点では、Merbを選ぶのはとても良い選択だと思います。

次回は、Merb使いの間でORMの主流を占めているDataMapperを使って、実用的なアプリケーションを開発する例を紹介いたします。

おすすめ記事

記事・ニュース一覧