44
はじめる! RubyWeb開発 ~ loop { @sinatra += 1 } ~ Uchio Kondo .rb勉強会 @ 2011-12-20 Jelly Jelly Cafe

rb勉強会資料 - はじめる! Ruby de Web 開発

Embed Size (px)

DESCRIPTION

.rb勉強会資料 - はじめる! Ruby de Web 開発@2011-12-20 jelly jelly cafe

Citation preview

Page 1: rb勉強会資料 - はじめる! Ruby de Web 開発

はじめる! RubyでWeb開発~ loop { @sinatra += 1 } ~

Uchio Kondo.rb勉強会 @ 2011-12-20

於 Jelly Jelly Cafe

Page 2: rb勉強会資料 - はじめる! Ruby de Web 開発

自己紹介

● 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...

Page 3: rb勉強会資料 - はじめる! Ruby de Web 開発

るびま

● Sinatra 再入門、 Padrino / Rack / その先の何か● http://jp.rubyist.net/magazine/?0036-SinatraReintroduction

Page 4: rb勉強会資料 - はじめる! Ruby de Web 開発

今日

● Rubyでのウェッブ開発の話をします● 緩い感じでやりたいです● 途中で高ぶる or 感極まるかもしれません

Page 5: rb勉強会資料 - はじめる! Ruby de Web 開発

ところで

● みなさん、なぜ Ruby をやろうと思いましたか?

Page 6: rb勉強会資料 - はじめる! Ruby de Web 開発

ぶっちゃけ

● Rails???● ですよね~

Page 7: rb勉強会資料 - はじめる! Ruby de Web 開発

すいません

● 今日は、Rubyでのウェブ開発と言っても● もっと広い話● Sinatra入門

● みたいなことを話したい● Railsのことも少し触れますよ~● disりません

Page 8: rb勉強会資料 - はじめる! Ruby de Web 開発

Rubyのウェッブフレームワーク

● Ruby on Rails● Merb● Ramaze● Camping● Sinatra● Padrino● Cramp● Renee

● などなど………

Page 9: rb勉強会資料 - はじめる! Ruby de Web 開発

Rackという「規格」がある

● Ruby on Rails● Merb● Ramaze● Camping● Sinatra● Padrino● (Cramp)● Renee

● などなど………

Page 10: rb勉強会資料 - はじめる! Ruby de Web 開発

Rackはアプリケーションフレームワークと、サーバ実装を繋ぐ

● Ruby on Rails● Merb● Ramaze● Camping● Sinatra● Padrino● (Cramp)● Renee

● などなど………

● Apache(mod_rails)

● NginX● Webrick● Unicorn● Thin● FastCGI

Page 11: rb勉強会資料 - はじめる! Ruby de Web 開発

Rackの仕組みが共通なので

● ミドルウェアが使いまわせる● Rackの条件に沿った実装をすれば、どんなフレームワークでも特定の機能/「関心事」を同じような手順で組み込める

● 統一的なデプロイ手順が実現できる● ディレクトリ構成、設定ファイル(config.ru)が統一● herokuやdotcloudのような仕組みが実現しやすい

● →ただの「オレオレ」じゃない、再利用性の高いフレームワークが作成できる

Page 12: rb勉強会資料 - はじめる! Ruby de Web 開発

cf. ほかの言語

● Ruby – Rack

● Python – WSGI(本家)

● Perl – PSGI/Plack

● HaskellとかCommon Lispにもあるらしい● Javaは、、、● PHPは、、、

Page 13: rb勉強会資料 - はじめる! Ruby de Web 開発

さて、

● 少し脇道にそれて、● Ruby のウェッブフレームワークの進化の歴史

Page 14: rb勉強会資料 - はじめる! Ruby de Web 開発

第1期:フルスタック

● Rails(1.x, 2.xの初期)

● ウェブに必要な機能がほぼ全部入っている● 重い、大きい

● “Rail” から外れたことをしようとすると大変だったりする

Page 15: rb勉強会資料 - はじめる! Ruby de Web 開発

第2期:マイクロフレームワーク

● Sinatra

● 軽量● 最低限の機能(ルーティングとわずかなテンプレートヘルパー、設定のためのDSL)

● 欲しい機能がない場合が多かった● 車輪の自作

Page 16: rb勉強会資料 - はじめる! Ruby de Web 開発

第3期

● Modularity+Agnosticism

● 「最低限の機能」の上に、その時作りたいものに必要な機能を盛り付けていく

● 柔軟性、「必要なものを必要なだけ」● Rails 3 以降、そして Padrino が相当

Page 17: rb勉強会資料 - はじめる! Ruby de Web 開発

「ビュッフェスタイル」の開発

Page 18: rb勉強会資料 - はじめる! Ruby de Web 開発

そして、右に行くほど「Rack」の仕組みの理解が重要になってくる

Rails 1.xRails 2.x

SinatraCampingRenee

(Merb)Rails 3.x ~Padrino

Full-stack Micro-framework

Modular &Agnostic

より先発 より後発

Page 19: rb勉強会資料 - はじめる! Ruby de Web 開発

Remember the Rack

● 疎結合● 可搬性

Page 20: rb勉強会資料 - はじめる! Ruby de Web 開発

Rackで実現できること

● セッションの実装● 認証(Basic/Digest)● ソーシャルな認証● ロギング● セキュリティの向上● 検索ボット対策● ガラケー対応

● リライト● キャッシュ● 画像変換● ReCaptchaの利用● Deflate

● ロック● などなど……

Page 21: rb勉強会資料 - はじめる! Ruby de Web 開発

モジュラーでアグノスティックとは

● Rack Middleware

●  +● 各フレームワークでの拡張機構● (Rails plugins, Sinatra/Padrino Extensions)● を組み合わせ、必要な機能を必要なだけ再利用&実装したアプリケーションを作るということ

● 最小の工数で最大の効果!

Page 22: rb勉強会資料 - はじめる! Ruby de Web 開発

閑話休題

Page 23: rb勉強会資料 - はじめる! Ruby de Web 開発

Ruby + Webをはじめよう

● まずは、動かすところから始めるといいと思う● 動かないとつまんないし● 理論だけでもつまんないし

● でも、「Rackの感じ」がつかめるとなお良い

Page 24: rb勉強会資料 - はじめる! Ruby de Web 開発

あなたと、

Page 25: rb勉強会資料 - はじめる! Ruby de Web 開発

Sinatra

● Simple● You may know:

require 'sinatra'get '/' do 'My way!'end

Page 26: rb勉強会資料 - はじめる! Ruby de Web 開発

Sinatraはマイクロだけれどちゃんとしている

● 拡張のための機構がある● → Padrino への道続き● 軽量、サクサク● Rack自体にはしっかり準拠(Rackの上の薄いレイヤー)しているので、Rack Middlewareなどの挙動の理解がわかりやすい

Page 27: rb勉強会資料 - はじめる! Ruby de Web 開発

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

Page 28: rb勉強会資料 - はじめる! Ruby de Web 開発

動かしてみよう

require 'sinatra'get '/' do 'My way!'end

get '/:name' do params[:name] + '\'s way!'end

$ ruby app.rb

Page 29: rb勉強会資料 - はじめる! Ruby de Web 開発

Hello, world

Page 30: rb勉強会資料 - はじめる! Ruby de Web 開発

レイアウトを追加しよう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

Page 31: rb勉強会資料 - はじめる! Ruby de Web 開発

hamlも簡単!

Page 32: rb勉強会資料 - はじめる! Ruby de Web 開発

認証機能をつけてみよう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!

Page 33: rb勉強会資料 - はじめる! Ruby de Web 開発

Basic認証も簡単!

Page 34: rb勉強会資料 - はじめる! Ruby de Web 開発

これがRack Middlewareです

use Rack::Auth::Basic do |user, pass| user == 'udzura' && pass == 'XXXX'end

Page 35: rb勉強会資料 - はじめる! Ruby de Web 開発

怪しい図解Rack Application

Rack::Auth::Basic

App

認証OK?

処理

ブラウザ~

Rack::Request

Rack::Response

(リクエスト情報のハッシュ)

(レスポンス情報の配列)

Server

Page 36: rb勉強会資料 - はじめる! Ruby de Web 開発

デプロイについて

● Herokuが何だかんだで楽● ほんのちょっとだけgitなのじゃ……

● Dotcloud, fluxflex, etc...

● もちろんApache2+Passenger, NginX+unicornなどをセットアップする方法もあります。昔に比べれば凄く楽になったのよ…

$ heroku create$ git add . && git commit -m 'init'$ git push heroku master

Page 37: rb勉強会資料 - はじめる! Ruby de Web 開発

Sinatraをもっと!

● WEB+DB PRESS vol. 57● Ruby in your hands – Sinatra

● 日本語+紙媒体では一番良い資料だと思う

Page 38: rb勉強会資料 - はじめる! Ruby de Web 開発

Sinatra – Up and Running

● The first Sinatra book in the world● Alan Harris

(各言語のProシリーズ, というかC#ハッカーらしい)

● Konstantin Haase(@rkh, currently Sinatra's main commiter)

● 英書● 邦訳マダー or やりますよ……(

Page 39: rb勉強会資料 - はじめる! Ruby de Web 開発

Sinatraの先へ

● Webの情報で、もっといろいろいじくる● @ruedup さん (HerokuでWebアプリ開発を始めるなら知ってお

きたい10のこと)( http://d.hatena.ne.jp/ruedap/20110509)

● 素直にRails● Many many documents

● 新進気鋭Padrino(hot!)

● Sinatraのノウハウそのままに大規模アプリへ● Railsにも慣れるかも● ジェネレータ、ActiveRecord、テスト……

Page 40: rb勉強会資料 - はじめる! Ruby de Web 開発

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)

● 書籍?ねえよ! 出てくるといいですね

Page 41: rb勉強会資料 - はじめる! Ruby de Web 開発

●Railsは…たくさん本があるし……

● 一冊と言われれば

● Ruby/Sinatra/Rackを一通りいじった上で、上記を必要に応じて使えば、+webの解説ぐらいでやりたいことが出来ると思う

Page 42: rb勉強会資料 - はじめる! Ruby de Web 開発

まとめ

● いきなりRails、もいいけどまずは「全体の地図」を把握しよう

● 「モダンなCGI」たるRackの機構をつかもう● Sinatraは高速だし、結構使えるんですよ…● Enjoy Ruby & Enjoy Programming!

Page 43: rb勉強会資料 - はじめる! Ruby de Web 開発

Thanks

● @aereal 氏のスライド● http://speakerdeck.com/u/aereal/p/the-brief-seeds-of-padrino

● 必読(英語です)● WAF歴史3層説をパクり参考にしました

Page 44: rb勉強会資料 - はじめる! Ruby de Web 開発

__END__

● ご清聴ありがとうございました● 各種書籍持ってきているので一緒に見てみましょう