SlideShare a Scribd company logo
そ
う
だ
R
a
c
k
作
ろ
う。
Today s Goal
• Rackとは何か理解する
• Rackアプリ/ミドルウェアを作れるようになる
Agenda
1. Rackとは
2. Rackアプリを作ってみよう
3. Rackミドルウェアを作ってみよう
4. Gemにしてみよう(おまけ)
5. Unicornで動かしてみよう(おまけ)
1. Rackとは
Rackとは
RubyをサポートするWeb(AP)サーバと
Rubyフレームワークとをつなぐ規約
(PythonのWSGIを元に提案された)
Rackの役割
Passenger
Unicorn
Thin
Mongrel
Rails
Sinatra
Ramaze
Merb
Application ServerFramework
インターフェースの統一により、	

フレームワーク/APサーバ間の組み合わせを自由にする
2. Rackアプリを作ってみよう
!
•callというメソッドを持っていること
•callメソッドの引数としてWebサーバからのリクエスト
を受けること
•callメソッドは以下の要素を含むレスポンスを返すこと
- ステータスコード
- レスポンスヘッダ(Hash)
- レスポンスボディ(Array)
Rackアプリケーション
Rackアプリを作ってみよう
class RackApp
def call(env)
[200, {'Content-Type' => 'text/html'}, ["Hello, Rack world!"]]
end
end
 
run RackApp.new
config.ru
!
$ rackup config.ru
3. Rackミドルウェアを
作ってみよう
Rackミドルウェア
Rackに対応したアプリケーションに
機能を追加するためのミドルウェア
!
•Rackアプリケーションの仕様を満たしていること
•newの第一引数に他のRackアプリケーションを取ること
Rackミドルウェアを作ってみよう
class UpcaseAll
def initialize(app)
@app = app
end
 
def call(env)
code, headers, body = @app.call(env)
body.each {|part| part.upcase! }
[code, headers, body]
end
end
 
class RackApp
#...
end
 
use UpcaseAll
run RackApp.new
config.ru
Rackミドルウェアの入れ子構造
よく使うRackライブラリ
•Rack::Request
- リクエストを扱いやすくしてくれるラッパー
•Rack::Response
- レスポンスを扱いやすくしてくれるラッパー
•Rack::URLMap
- パスに応じてリクエストを振り分けてくれるアプリケーション
!
‣参考:http://route477.net/w/RackReferenceJa.html
【演習】
!
これまで学んだことを踏まえて、
オリジナルのRackミドルウェアを作ってみよう
5. Gemにしてみよう
Gemの作り方
require "my_first_gem/version"
 
module MyFirstGem
class UpcaseAll
#...
end
end
$ bundle gem my_first_gem
1. Gemの雛形を作る
2. 概要をgemspecに書く
3. ライブラリを書く
4.Gemをビルドする
$ rake build
【演習】
!
自作したGemをgeminaboxにアップして、
他人が作ったGemもインストールしてみよう
6. Unicornで動かしてみよう
Unicornの使い方
worker_processes 2
listen 9292
stderr_path File.expand_path('unicorn.log', File.dirname(__FILE__))
stdout_path File.expand_path('unicorn.log', File.dirname(__FILE__))
pid File.expand_path('unicorn.pid', File.dirname(__FILE__))
$ echo “gem ‘unicorn’” >> Gemfile
$ bundle install
1. Unicornをインストール
2. 設定ファイル(unicorn.conf)を用意する
3. Unicornを起動する
4. Unicornを停止する
$ kill -QUIT `cat unicorn.pid`
$ unicorn -c unicorn.conf -D

More Related Content

そうだRack作ろう。