InfoQ

News

Ruby on RailsがMetalに本腰を入れて取り掛かる

作者 Robert Bazinet , 翻訳者 編集部 投稿日 2008年12月28日 午前12時29分

コミュニティ
Ruby
トピック
Ruby on Rails,
Webフレームワーク
タグ
Rails

Ruby on Rails(リンク)チームは、Rack(リンク)を導入して、Railsを次のレベルに移行するのに忙しくしている。Rackの実装により、デベロッパがアプリケーションで多くの利用可能なミドルウェアを使用することができる。この追加により、RailsチームがRails Metalを作成することができる。それは、Railsセッションへのアクセスにより、Rails要求の前にある汎用Rackミドルウェアに関するラッパーである。Metalは、非常に高速で、1秒に何百ものアプリケーションを処理する必要があるアプリケーションに向いている。

David Heinemeier Hansson氏(リンク)は、RailsのブログでRails Metal on the Ruby(リンク)を発表し、その使用例を説明している。

このシナリオでは、汎用Rackミドルウェアについてシンラッパーを構築し「Metal」という名前と一緒に階層に場所を与えた。Rails Metalは、Campfire(リンク)ポーリングプログラムサービスのようなものに向いている。それは、1秒につき数百の要求を処理し、非常に高速でなければならないのと同時に、非常にシンプルである必要がある(2度のデータベースコールで、ストリングを返す)。現在このサービスはCで記述されているが、代わり にRails Metalに変換することを検討する予定である。

またJesse Newland氏は、ブログ記事でRails MetalをRailsの性能を備えたマイクロフレームワーク(リンク)として説明し、以下のように述べた。

Railsの要求処理コードをRack(リンク)と交換し、そのミドルウェアサポート(リンク)を統合するという最近の作業が終わった後で、Rails MetalはRailsアプリケーションがRackミドルウェアの性能を利用し、超高速アクションを作成することができるようにする論理的な進歩である。

Jesse氏は、通常のRailsコントローラと比較し、Metalを使用して、典型的な「Hello World」アプリケーションの例を提供している。

class Poller < Rails::Rack::Metal
    def call(env)
      if env["PATH_INFO"] =~ /^\/poller/
        [[200], {"Content-Type" => "text/html"}, "Hello, World!"]
      else
        [[404], {"Content-Type" => "text/html"}, "Not Found"]
      end
    end
end

通常のRailsコントローラ

class OldPollerController < ApplicationController
      def poller
        render :text => "Hello World!"
      end
end

コードは明らかに全く異なっている。シンプルなベンチマークは、Metal 25xがコントローラコードより高速なことを示している。

InfoQは、Rails CoreチームのJoshua Peek氏(リンク)およびRails Metal関係のデベロッパと意見交換をし、この有望な新テクノロジーについて詳細を得た。

Rails MetalについてJoshua氏は以下のように話した。

Rails Metalアプリケーションは、速度を目的に構築された、非常に小さなアプリケーション固有のエンドポイントである。同様のプロセスで、Railsと併用することができる。 それは、つまり開発が実に簡単であること、言い換えればスタンドアロンでデプロイ可能であることを意味する。

Rails Metalがどんな問題を解決しようかを決める際には、以下のように話している。

Metalは、1秒につき数百の要求に対処する必要がある、小さなサービスを構築するように意図されている。

Rails Metalは新しく、万人向けではないので、一般的なRailsデベロッパにとって、Metalはどんな意味を持つのかという質問が生じる。

Metalアプリケーションの構築を開始するのは、Railsデベロッパにとって実に容易であるが、非常に賢いツールである。Railsデベロッパは、いまでもいつものようにRailsを使い続けるべきであるが、特定のアクションが特別なパフォーマンスが必要だと確信できれば、そのツールを利用することが できる。

Metalは、最新のRack実装を普通に使用するようなものかもしれないが、その作成理由は、そうではないとJosh氏は以下のように説明する。

両方の世界の最も良い部分をデベロッパに提供したかった。Railsは、実アプリケーションの構築に必要なすべてを備えたフルスタックMVCフレームワークを提供するが、それでも可能な限りのスピードを必要とする場合は「Metal」を利用することができる。

Merb-Core(リンク)を見るのは、面白く、できればMetalと比較するとそのことがよく分かる。その両者は互いにかなり異なっている。

Merbは、フルMVCフレームワークである。しかしながら、Metalビットは極めて必要最小限である。それは、単なるRack APIである。ローリクエスト環境ハッシュを与えられ、ステータスコード、ヘッダーおよび応答のボディを返す必要がある。コントローラーやビューなどの概 念はない。それに適合する最小限のコードを実装するかどうかは、デベロッパ次第である。

マイクロフレームワークおよびそれらが満たすニッチについて、よく耳にする。Jesse Newland氏が別の「マイクロフレームワーク」に触れ、Metalについて話している。Joshua氏にMetalが他のマイクロフレームワークの必 要性をなくすかどうかについて尋ねた。

それはない。Sinatraのようなマイクロフレームワークにはまだ余地がある。それは、非常にシンプルにして、単純なAPIハンドラを手早く作成する。 実際、MetalアプリケーションとしてSinatraを使用することができる。SinatraはRackにビルドされるので、ほとんど動作する。

最後に、Metalの取得方法に関してである。

すでにEdge Railsで利用可能になっている。さもなければ、2.3である次のRailsのgemのリリースを待ってもよいかもしれない。

Rails Metalは、その発表時、おおいに注目を集めた。スピードを必要としているRailsアプリケーションに対して、約束を示している。Rails Metalに関する詳細は、Ruby on Railsブログ(リンク)およびRailsが利用可能になったGitHubリポジトリ(リンク)で、参照することができる。

 

原文はこちらです:http://www.infoq.com/news/2008/12/rails-metal

ブックマーク
digg+,
reddit+,
del.icio.us+,
dzone+,
slashdot+
Hatena

特集コンテンツ一覧

Flex 4の新機能トップ10

今週(2009年6月1日)AdobeはFlex 4の正式な初ベータ版をリリースしました。Flex 4はGumbo(オクラ)というコードネームで開発されています。今回のリリースには大きな変更が多数含まれています。このRIAフレームワークの最新バージョンにおいて変更された事柄についての概要を以下のリストで見ていきましょう。

Domain Driven Design(ドメイン駆動設計) Quickly 日本語版

ビジネス領域の深い理解を反映したドメインモデルを設計するための、ヴィジョンとアプローチです。この本は、Eric Evans氏の「Domain Driven Design」の主要点を短く読みやすく要約しました。

JavaプログラマがFlexとBlazeDSを学んだ方がいい13の理由

この記事ではJavaプログラマがなぜFlexとBlazeDSを学ぶべきなのかについて13の理由を述べています。なぜ高度にインタラクティブなWeb サイトからJavaで開発されたバックエンドをもつエンタープライズ・アプリケーションまでを含む、リッチ・インターネット・アプリケーション(RIA)の開発にFlexとBlazeDSの組み合わせが最適な選択肢となるのかについて述べています。

仮想パネル: バックログは重要な成果物とプラクティスか、それとも無駄か?

Mary Poppendieck氏、Ron Jeffries氏、Jeff Patton氏、David West氏、Steve Freeman氏、Jason Yip氏が、バックログに関する彼らの意見とアジャイルチームを成功させるために必要な事を語った。

Perf4Jを使ったパフォーマンス解析とモニタリング

この記事ではAlex Devine氏が、Java開発者がPerf4Jをどのように利用できるかと、タイミングステートメントにコードを追加し、ロギング、結果の解析とモニタリングを行うオープンソースツールセットの説明をします。

複雑な外部DSLを開発する

本稿では、Vaughn Vernon氏が内部DSLと外部DSLの違いを説明し、複雑な外部DSLを開発する際のステップを示します。

J2EEアプリケーションにおけるAOPを使ったフェッチ戦略の実装

この記事では低レベルのサービス・レイヤやリポジトリ・レイヤを肥大化させることなく、フェッチング・ストラテジによってモジュール化された方法でバックエンドにあるシステムからデータを取得する処理を最適化する方法について説明します。

実証済みのアイデアの融合: S#arp Architectureの裏側

この記事では、Web開発における多数の成熟傾向と、クライアントに価値を提供することに対するそれらのメリット、およびS#arp Architecture(最善の手法と技術を活用しようとするASP.NET MVCをベースとしたフレームワーク)内でのそれらの使用について取り上げます。