Rackと遊ぶ

記事タイトルとURLをコピーする

プログラマの新井です。 今回は皆大好き「Rack」を触ってみたいと思います。 Rackとは -- Rack: a Ruby WebServer Interface 簡単に言うと「Webサーバの差異を吸収し、統一的なAPIを提供するインターフェース」です。 WebサーバにはApache,WEBrick,Mongrelなど様々なものがあります。 これらに個別に対応しようとするとフレームワークごとにWebサーバをサポートするコードが必要になります。 Rackを利用するとフレームワークとWebサーバの間を良いように取りもってくれます。 [ブラウザ] [Webサーバ] [Rack] [フレームワーク] [Webアプリ] Rack Middleware -- 上記に上げたように「Webサーバの差異を吸収する」だけでも素晴しいですが、もう一つの利点があります。 それはRack Middlewareの仕組みです。 Rack Middlewareを利用することにより、サーバとアプリケーションの間でちょっとした処理を行うことができます。 例えば、条件に応じたURLの書き換えや、Cookieの処理などがRack Middlewareを利用することで簡単に、かつWebサーバに依存することなく行えるようになります。 とりあえずRackを動かしてみる -- gemでrackをインストールします。 $ gem install rack 以下のファイルをconfig.ruとして作成します。 rackupコマンドで起動します。 $ rackup config.ru これでlocalhost:9292にアクセスするとHello, world!が表示されるかと思います。 止めるときはCtrl-Cとかで止めてください。 デフォルトだとWEBrickが起動しますが、以下のようにすれば他のサーバーを起動することも可能です。 $ rackup config.ru -s SERVER Rackはこのようにconfig.ruに色々書くのですが、このコードでは処理も一緒になっています。 なので次はconfig.ruに書くべき設定とアプリケーション部分を分割しましょう。 Rackアプリを書いてみる -- ざっくり言ってしまうと以下の要素を満たしていればRackアプリとなります。 - callというメソッドを持っていること - callメソッドの引数としてenv(環境変数のハッシュ)を受けとること - callメソッドは,次の要素を含むレスポンスを返すること - ステータスコード - レスポンスヘッダ(Hash) - レスポンスボディ(Array) これらを満たすように修正してみました。 両方のファイルを同じ場所において先程と同様にlocalhost:9292へアクセスすると、「Hello, Rack Application!」と表示されるかと思います。 Rack Middlewareを利用する -- 最後にRack Middlewareを入れてみましょう。 デフォルトでもいくつか利用できるものがあります。 今回はBasic認証のRack MiddlewareであるRack::Auth::Basicを利用してみましょう。 config.ruを以下のように書き換えます。 サーバーを再起動してlocalhost:9292へアクセスをするとBasic認証のダイアログが出てくるかと思います。 config.ruで指定したユーザー、パスワードで認証できます。 まとめ -- 今回の題材のRackはフレームワーク開発者のような人でなければ普段あまり触ることのない箇所ではありますが、Rack Middlewareは通常の開発でもすぐ使えて役立つものが沢山あります。 また、Rack MiddlewareもRackアプリなので簡単に作成することができます。 今回はRack Middlewareの作成までは行いませんが、簡単に作れるうえ、理解もより深まること間違いないので是非一度作ってみることをお勧めします。 補足 -- Rackをインストールする際にgemを叩きましたが、Bundlerを利用するようにすればこのままHeroku上で今回のサンプルも動かすことが可能です。 参考サイト -- 5分でわかるRack Ruby Freaks Lounge:第23回 Rackとは何か(1)Rackの生まれた背景|gihyo.jp … 技術評論社