BT

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

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース Ruby on RailsがMetalに本腰を入れて取り掛かる

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

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

この記事に星をつける

おすすめ度
スタイル

BT