Upload
uchio-kondo
View
3.280
Download
5
Embed Size (px)
DESCRIPTION
.rb勉強会資料 - はじめる! Ruby de Web 開発@2011-12-20 jelly jelly cafe
Citation preview
はじめる! RubyでWeb開発~ loop { @sinatra += 1 } ~
Uchio Kondo.rb勉強会 @ 2011-12-20
於 Jelly Jelly Cafe
自己紹介
● Uchio Kondo(@udzura)● http://udzura.jp & http://blog.udzura.jp ● Works:
● Padrino framework contributor & evangelist(?● kaminari gem collaborator(sinatra周り)● rspec-padrino / rack-block / rack-session-dbm● 微妙なウェッブサービス(未完成ばかり
● Interest:● Ruby/Sinatra/TDD/Agile/non-blocking IO/Haskell...
るびま
● Sinatra 再入門、 Padrino / Rack / その先の何か● http://jp.rubyist.net/magazine/?0036-SinatraReintroduction
●
今日
● Rubyでのウェッブ開発の話をします● 緩い感じでやりたいです● 途中で高ぶる or 感極まるかもしれません
ところで
● みなさん、なぜ Ruby をやろうと思いましたか?
ぶっちゃけ
● Rails???● ですよね~
すいません
● 今日は、Rubyでのウェブ開発と言っても● もっと広い話● Sinatra入門
● みたいなことを話したい● Railsのことも少し触れますよ~● disりません
Rubyのウェッブフレームワーク
● Ruby on Rails● Merb● Ramaze● Camping● Sinatra● Padrino● Cramp● Renee
● などなど………
Rackという「規格」がある
● Ruby on Rails● Merb● Ramaze● Camping● Sinatra● Padrino● (Cramp)● Renee
● などなど………
Rackはアプリケーションフレームワークと、サーバ実装を繋ぐ
● Ruby on Rails● Merb● Ramaze● Camping● Sinatra● Padrino● (Cramp)● Renee
● などなど………
● Apache(mod_rails)
● NginX● Webrick● Unicorn● Thin● FastCGI
Rackの仕組みが共通なので
● ミドルウェアが使いまわせる● Rackの条件に沿った実装をすれば、どんなフレームワークでも特定の機能/「関心事」を同じような手順で組み込める
● 統一的なデプロイ手順が実現できる● ディレクトリ構成、設定ファイル(config.ru)が統一● herokuやdotcloudのような仕組みが実現しやすい
● →ただの「オレオレ」じゃない、再利用性の高いフレームワークが作成できる
cf. ほかの言語
● Ruby – Rack
● Python – WSGI(本家)
● Perl – PSGI/Plack
● HaskellとかCommon Lispにもあるらしい● Javaは、、、● PHPは、、、
さて、
● 少し脇道にそれて、● Ruby のウェッブフレームワークの進化の歴史
第1期:フルスタック
● Rails(1.x, 2.xの初期)
● ウェブに必要な機能がほぼ全部入っている● 重い、大きい
● “Rail” から外れたことをしようとすると大変だったりする
第2期:マイクロフレームワーク
● Sinatra
● 軽量● 最低限の機能(ルーティングとわずかなテンプレートヘルパー、設定のためのDSL)
● 欲しい機能がない場合が多かった● 車輪の自作
第3期
● Modularity+Agnosticism
● 「最低限の機能」の上に、その時作りたいものに必要な機能を盛り付けていく
● 柔軟性、「必要なものを必要なだけ」● Rails 3 以降、そして Padrino が相当
「ビュッフェスタイル」の開発
図
そして、右に行くほど「Rack」の仕組みの理解が重要になってくる
Rails 1.xRails 2.x
SinatraCampingRenee
(Merb)Rails 3.x ~Padrino
Full-stack Micro-framework
Modular &Agnostic
より先発 より後発
Remember the Rack
● 疎結合● 可搬性
Rackで実現できること
● セッションの実装● 認証(Basic/Digest)● ソーシャルな認証● ロギング● セキュリティの向上● 検索ボット対策● ガラケー対応
● リライト● キャッシュ● 画像変換● ReCaptchaの利用● Deflate
● ロック● などなど……
モジュラーでアグノスティックとは
● Rack Middleware
● +● 各フレームワークでの拡張機構● (Rails plugins, Sinatra/Padrino Extensions)● を組み合わせ、必要な機能を必要なだけ再利用&実装したアプリケーションを作るということ
● 最小の工数で最大の効果!
閑話休題
Ruby + Webをはじめよう
● まずは、動かすところから始めるといいと思う● 動かないとつまんないし● 理論だけでもつまんないし
● でも、「Rackの感じ」がつかめるとなお良い
あなたと、
Sinatra
● Simple● You may know:
require 'sinatra'get '/' do 'My way!'end
Sinatraはマイクロだけれどちゃんとしている
● 拡張のための機構がある● → Padrino への道続き● 軽量、サクサク● Rack自体にはしっかり準拠(Rackの上の薄いレイヤー)しているので、Rack Middlewareなどの挙動の理解がわかりやすい
Railsに比べたメリット
● 軽量(大事なことなので二回)● 学習コストが小さい● コードベース小さいので、何がどうなっているか分かる● 最悪 1,500 行程度を頑張って読めばすべてが理解できる(...)
● 上記の特徴のおかげで、リードタイムも短くなる
rack => 1193.26 rpscamping => 897.41 rpssinatra => 603.23 rpspadrino => 570.75 rpsmerb => 367.69 rpsramaze => 248.59 rpsrails => 139.62 rps
https://github.com/DAddYE/web-frameworks-benchmark
動かしてみよう
require 'sinatra'get '/' do 'My way!'end
get '/:name' do params[:name] + '\'s way!'end
$ ruby app.rb
Hello, world
レイアウトを追加しようrequire 'sinatra'require 'haml'get '/' do 'My way!'end
get '/:name' do @name = params[:name] haml :helloend
__END__@@ layout!!! 5%html %head %title Hello Sinatra %body = yield
@@ hello%h1= "Hello, #{@name}"%p = @name 's Way!
$ gem install haml
hamlも簡単!
認証機能をつけてみようrequire 'sinatra/base'require 'haml'class App < Sinatra::Base use Rack::Auth::Basic do |user, pass| user == 'udzura' && pass == 'XXXX' end enable :inline_templates
get '/' do 'My way!' end
get '/:name' do @name = params[:name] haml :hello endend
App.run!
__END__@@ layout!!! 5%html %head %title Hello Sinatra %body = yield
@@ hello%h1= "Hello, #{@name}"%p = @name 's Way!
Basic認証も簡単!
これがRack Middlewareです
use Rack::Auth::Basic do |user, pass| user == 'udzura' && pass == 'XXXX'end
怪しい図解Rack Application
Rack::Auth::Basic
App
認証OK?
処理
ブラウザ~
Rack::Request
Rack::Response
(リクエスト情報のハッシュ)
(レスポンス情報の配列)
Server
デプロイについて
● Herokuが何だかんだで楽● ほんのちょっとだけgitなのじゃ……
● Dotcloud, fluxflex, etc...
● もちろんApache2+Passenger, NginX+unicornなどをセットアップする方法もあります。昔に比べれば凄く楽になったのよ…
$ heroku create$ git add . && git commit -m 'init'$ git push heroku master
Sinatraをもっと!
● WEB+DB PRESS vol. 57● Ruby in your hands – Sinatra
● 日本語+紙媒体では一番良い資料だと思う
Sinatra – Up and Running
● The first Sinatra book in the world● Alan Harris
(各言語のProシリーズ, というかC#ハッカーらしい)
● Konstantin Haase(@rkh, currently Sinatra's main commiter)
● 英書● 邦訳マダー or やりますよ……(
Sinatraの先へ
● Webの情報で、もっといろいろいじくる● @ruedup さん (HerokuでWebアプリ開発を始めるなら知ってお
きたい10のこと)( http://d.hatena.ne.jp/ruedap/20110509)
● 素直にRails● Many many documents
● 新進気鋭Padrino(hot!)
● Sinatraのノウハウそのままに大規模アプリへ● Railsにも慣れるかも● ジェネレータ、ActiveRecord、テスト……
Padrinoも面白いです[PR]
● 公式チュートリアル● (http://jp.padrinorb.com/guides/blog-tutorial)
● blog.udzura.jp - Padrino+MongoDB+Heroku
● (http://blog.udzura.jp/2011/02/23/app-in-5-min-with-padrino-mongodb-heroku/)
● るびま● (http://jp.rubyist.net/magazine/?0036-SinatraReintroduction)
● 書籍?ねえよ! 出てくるといいですね
●Railsは…たくさん本があるし……
● 一冊と言われれば
● Ruby/Sinatra/Rackを一通りいじった上で、上記を必要に応じて使えば、+webの解説ぐらいでやりたいことが出来ると思う
まとめ
● いきなりRails、もいいけどまずは「全体の地図」を把握しよう
● 「モダンなCGI」たるRackの機構をつかもう● Sinatraは高速だし、結構使えるんですよ…● Enjoy Ruby & Enjoy Programming!
Thanks
● @aereal 氏のスライド● http://speakerdeck.com/u/aereal/p/the-brief-seeds-of-padrino
● 必読(英語です)● WAF歴史3層説をパクり参考にしました
__END__
● ご清聴ありがとうございました● 各種書籍持ってきているので一緒に見てみましょう