InfoQ

News

Rack: HTTP要求処理が容易に

作者 Mirko Stocker, 翻訳者 編集部 投稿日 2008年4月4日 午後12時30分

コミュニティ
Ruby
トピック
Ruby on Rails,
テクノロジー,
スクリプティング,
Webフレームワーク
タグ
Ruby on Rails,
Rails

Rack(サイト・英語)は、WebサーバとRuby Webサーバフレームワーク間のインターフェイスを提供する。これにより、フレームワークの作成者がそれぞれ特定のWebサーバごとにハンドラーを記述するという負担を軽減し、多くの重複作業をなくす。

Rackでの作業は実に簡単である。以下の例では、Mongrel(source)で実行する最小限のアプリケーションハンドラーを作成するのに必要なことを示している。

require 'rack'
app = lambda { |env| [200, {"Content-Type" => "text/plain"}, ['Hello World!']] }
Rack::Handler::Mongrel.run(app, :Port => 3000)
env引数は、環境変数および要求パラメーターのハッシュ値を含んでいる。ブロックの戻り値は、HTTPステータスコード、ヘッダーおよび応答のボディの3つのエレメントの配列で構成される。

Rackの作成者であるChristian Neukirchen氏が、Rackの変遷についてInfoQに語った。

当初、RubyのWebフレームワークに不満を感じていたので、自分自身で記述する考えをいくつかひねり出した。web.py(サイト・英語)がリリースされ、小さく簡単 に保持できるところが気に入った。そこでフレームワークの記述を始めたが、成果が得られなかった。Cookieの解析などのいつもの記述などをして本筋か らそれてしまったからだ。実際には、他のプロジェクトからコードをコピーしたが、仕上げるまではかなり退屈な作業だった。そんなわけで、そのフレームワー クは決してうまくいかなかった。

その後、Python's Nevow(source)について知り、それと同種のものを実装してみたくなったが、始めるとすぐにサーバごとにヘルパーやアダプタをひたすら書き換え続けていることに 気づいた。Pythonフレームワークについてさらに詳しくなると、WSGI(source)、read、liked、simplifiedそして最終的にdrafted Rackにたどり着いた。すでに記述したコードを再アセンブルし、Python Paste(サイト・英語)の構造に基づいてモジュール方式にした。すると間もなくRack 0.1の準備が整った。

Rackが使用可能だった時、気に入ったフレームワークがなかったので、Coset(source)を実装した。それについてはわたしがこの頃使用しているものである。Camping(source)、web.py(サイト・英語)およびRESTlet(サイト・英語)からインスピレーションを描く。

Rackのサポートをするフレームワークのリスト(サイト・英語)を以下に挙げる。

* Camping(source)(Rackの分配に含まれる)
* Coset(source)
* Halcyon(サイト・英語)
* Maveric(source)
* Merb(サイト・英語)
* Mack(サイト・英語)
* Racktools::SimpleApplication
* Ramaze(サイト・英語)
* Rails(サイト・英語) (第三者、Thinで配送)
* Sinatra(サイト・英語)
* Vintage(サイト・英語)

Rackは、フレームワークと一緒に使用することも可能である。たとえば、ある要求でシンプルかつ高速処理が必要な場合、RackのRack:: Cascadeを使用して複数のアプリケーションをカスケードすることができる。Ezra Zygmuntowicz氏によるブログ記事では、完全にmerbスタックを経由せずに、Rackを使用したファイルのアップロードの方法を紹介してい る(source)

今後に向けて、Christian氏は1.0リリース仕様の安定化を計画している。

Rackについての詳細は、Rackの公式Webサイト(サイト・英語)を参照のこと。詳細情報に関しては、Rackの内部構造についてまとめたEuruko 07による文書(PDF・英語)が利用可能である。

原文はこちらです:http://www.infoq.com/news/2008/04/rack-http-web

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

No comments

返信

ジャンル別一覧

クラウドコンピューティング ~ EC2、Mosso、GoGrid

クラウドコンピューティングのプロバイダーであるEC2、Mosso、GoGridの新しいユーザーエクスペリエンスと、それぞれの機能の違いについて学びます。

仮想化入門

このArticleでは仮想化に関する利点と欠点を見ながら、仮想化の違いについて詳しく追っていきます。

Java 6のスレッド最適化は実際に動作しているのか? - パートII

パート2では、ベンチマークの結果を検証するために用いられるテクニックについてさらに深く見ていきたいと思います。最後に、「なぜプロセッサが異なるとロックのコストも大きく異なるのか」と言う真の疑問に答えます。

RESTアンチパターン

本稿では、Stefan Tilkov氏が「RESTful」な設計であると主張するアプリケーションに見受けられる最も一般的なアンチパターンのいくつかについて説明し、それらを避けるための方法を提案しています。

モデル駆動ソフトウェア開発のためのベストプラクティス

Sven Efftinge氏、Peter Friese氏とJan Köhnlein氏が、MDDを取り入れて成功した経験から、ベストプラクティスの解説を行います。

スケーラビリティの構築とパフォーマンスの達成:バーチャルパネル

Our panel of leading experts explores some of the challenges and thought processes that go into making their apps as scalable and performant as possible.

Spring 2.5:Spring MVCの新機能

この記事は、Spring 2.5で導入されたアノテーションを探究する3部作の第2弾です。Web層におけるアノテーションのサポートを扱います。最後の論文では、統合と検査で利用できる追加機能を説明する予定です。

"YUKATA"から始まるコミュニケーション(Agile2008 ライトニングトークより)

私は「浴衣」を着てパーティーに参加したことで、たくさん声を掛けていただけました。 そこで感じたことは、このカンファレンスが人との繋がりを生み出し、また言葉の壁を越えて積極的に交流する場所であることです。民族衣装はそれらを助けてくれるものでした。きっとこの交流が、新たなムーブメントをアジア圏の仲間たちにも与えてくれると確信しています。