Slide 1

Slide 1 text

Ramaze と Sequel で ウェブサービスを作ってみた 渋谷.rb[:20120215] Kensuke Nagae

Slide 2

Slide 2 text

謝罪

Slide 3

Slide 3 text

s/Ramaze/Sinatra/ s/作ってみた/作ってます/

Slide 4

Slide 4 text

でも Ramaze の話をします

Slide 5

Slide 5 text

長永 健介 について ● 刺身☆ブーメラン, @kyanny ● ペパボ、 30days Album ● 最近猫を飼いました

Slide 6

Slide 6 text

HBKindle 作ってます ● はてブしたページを Kindle に送るサービス ● はてなブックマーク WebHook を使ってます

Slide 7

Slide 7 text

Ramaze と Sequel 使ってみた ● Ramaze はマイクロフレームワーク (Sinatra 的なもの) ● Sequel は O/R マッパ (ActiveRecord 的なもの) ● 両方初めて -> 簡単に使えた -> せっかくなので発表

Slide 8

Slide 8 text

Ramaze ● ラマゼ? ● WAF ● 主要な日本語の情報源 ○ ramaze-users ○ Ruby Freaks Lounge 第11回 自由なWebフレームワーク, Ramaze ○ Ruby Freaks Lounge 第12回 Ramazeを使って120行で作る 単語帳アプリ ■ 全て yhara さんの仕事 (すごい)

Slide 9

Slide 9 text

Ramaze のコードの例 require 'ramaze' class Blog < Ramaze::Controller map '/blog' # GET /blog def index 'Hello, this is my Ramaze blog' end end Ramaze.start

Slide 10

Slide 10 text

Ramaze の特徴 ● いいところ ○ DSL じゃない (Ruby のクラスそのもの) ○ 覚えることが少ない ● 悪いところ ○ Ruby を知らないときつい (デザイナさんとか)

Slide 11

Slide 11 text

Ramaze Command ● ひな形作成 ● ウェブサーバ起動 ● irb コンソール起動 ● 別に使わなくていい

Slide 12

Slide 12 text

覚えることが少ない? ● 規約が少ない ● ● require は Ramaze を知らなくても読める

Slide 13

Slide 13 text

Controllers ● map '/uri' ● request[:form_field_name] ● これだけ知ってれば十分使えます ○ params はあっても良かった ● controller/*.rb に置くのが流儀

Slide 14

Slide 14 text

Models ● 好きな ● O/R マッパを ● 使ってください ● model/*.rb に置くのが流儀

Slide 15

Slide 15 text

Views ● 好きな ● テンプレートエンジンを (ry ● layout 使えます ● Controller から render_* でレンダリング ● 変数の参照はインスタンス変数 @user とかで (Rails と同じ) ● view/*.erb とかに置くのが流儀 ○ map で階層増えたらそのぶんディレクトリを掘る

Slide 16

Slide 16 text

Helpers ● いっぱい ● あるので ● がんばって研究しましょう

Slide 17

Slide 17 text

Configuration ● Ramaze::Traited ○ 外からアクセスできるクラス変数 @@val ○ 継承で上書きされない == クラスごとに固有の値 ○ 設定値をもたせたりとか ■ 定数でよいのでは... ● Ramaze::Optioned ○ グローバル変数的な存在 ○ registrar とか context とかみたいな? ○ 設定値をもたせたりとか ■ グローバル変数でよいのでは... ○ 入れたり出したりが面倒くさい

Slide 18

Slide 18 text

Sessions ● session と flash がある ● Rack::Session::Cookie とか使ったほうがよさげ

Slide 19

Slide 19 text

Ramaze まとめ ● 覚えることが少ない ● 把握しやすい ● Sinatra を Modular スタイルに書きなおすくらいなら最初から採 用してもいいのでは

Slide 20

Slide 20 text

Sequel ● シークェル? ● O/R マッパ ● 主要な日本語の情報源 ○ http://d.hatena.ne.jp/yshgt/20080629/1214720897 ■ ここみれば以降のスライドみなくていいです ○ Ruby Freaks Lounge 第9回 SinatraとSequel・Hamlで掲示板 アプリを作る ■ これも yhara さん (すごい)

Slide 21

Slide 21 text

Sequel のコードの例 # データベースに接続 DB = Sequel.connect('sqlite://development.db') # CREATE DB[:users] << {:name => 'Kensuke Nagae'} # SELECT @user = DB[:users].filter( :name => 'Kensuke Nagae' ).first # UPDATE DB[:users].filter( :name => 'Kensuke Nagae' ).update(:name => 'kyanny')

Slide 22

Slide 22 text

Sequel の特徴 ● dataset がとてもお手軽 ● dataset がとてもお手軽 ○ ホントにお手軽なので二回いいました ● Model クラスも作れる ○ ActiveRecord でよいのでは... ● Migration もある ○ でも Rake タスクは自前で用意する... ● Heroku Friendly (postgres:// みたいな URL を直接食わせら れる)

Slide 23

Slide 23 text

dataset とはなにか ● Dataset Basics ○ Datasets are probably the thing that separate Sequel from other database libraries. ○ 「SQL クエリ」または「行セット」を表現したもの ○ 行セットとは、データの列を含む行の集まりです。 ○ SQL といえば集合指向 ○ dataset は集合を集合のまま扱う仕組み ■ SQL クエリとの剥離が少ないので直感的

Slide 24

Slide 24 text

The Sequel Console ● irb コンソール起動 ● DB という定数にデータベースオブジェクトが入る ○ sqlite(1) とかでよいのでは... ● マイグレーション実行 (-m) ○ 便利、だが反面 Rake タスクがない...

Slide 25

Slide 25 text

Migrations ● sequel -m path/to/migrations postgres://host/database ● rake タスクは自分で用意する... ○ http://steamcode.blogspot.com/2010/09/sequel-and- heroku.html ○ 自分で用意しなくてよかった ○ ほかにも探せばけっこうあります

Slide 26

Slide 26 text

Sequel for ActiveRecord Users ● ActiveRecord っぽい Model が欲しい方に ● けっこう多機能 (association, validation, callback, etc.) ○ ActiveRecord でよいのでは... ○ dataset スタイルとコードが違いすぎる ○ Sinatra の Classic Style と Modular Style に似ている ○ 最初から AR っぽく書くなら AR を選べばいい ○ 途中から変えるくらいなら最初から AR で書けばいい ○ 「大きく育てる気がないコード」用と割り切る

Slide 27

Slide 27 text

他にもいろいろあるけど 調べきれませんでした

Slide 28

Slide 28 text

Sequel まとめ ● プロトタイピングのお供に最適 ○ せっかく WAF はミニマルなのに DB 使うととたんにヘヴィに なるのはだるい ● dataset は小さいコード向き、と割り切る ● Model を使うくらいなら他の O/R マッパでいいんじゃない?

Slide 29

Slide 29 text

まとめ Ramaze も Sequel も使い始めに覚えなきゃいkこと・知ってないと使 えないことが少ないので、思いついたものをさっと書いて動かしてみ るのにオススメです

Slide 30

Slide 30 text

おわり ありがとうございました