Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
shibuya-rb-20120215-ramaze-sequel
Search
Kensuke Nagae
February 15, 2012
Programming
3
3.8k
shibuya-rb-20120215-ramaze-sequel
Kensuke Nagae
February 15, 2012
Tweet
Share
More Decks by Kensuke Nagae
See All by Kensuke Nagae
スタディサプリ開発チームのこれまでとこれから / StudySapuri Product Meetup #1
kyanny
0
2.5k
Tokyo Web Dev hiring discussion session
kyanny
0
13k
sbpayment.rbのご紹介
kyanny
0
2.1k
#AsiaDevNight
kyanny
0
160
Grape による API 実装 in action
kyanny
7
7.2k
<%= link_to "bundle", "update" %> - Make "bundle update" more fun to review
kyanny
2
5.2k
Web Developer Seminar
kyanny
0
1.9k
Heroku を利用した Quipper の開発事例紹介
kyanny
11
3.3k
Continuous gem dependency updating with Jenkins and Pull Request
kyanny
9
3.3k
Other Decks in Programming
See All in Programming
TerraformとStrands AgentsでAmazon Bedrock AgentCoreのSSO認証付きエージェントを量産しよう!
neruneruo
4
2.3k
gunshi
kazupon
1
140
[AI Engineering Summit Tokyo 2025] LLMは計画業務のゲームチェンジャーか? 最適化業務における活⽤の可能性と限界
terryu16
2
220
Navigation 3: 적응형 UI를 위한 앱 탐색
fornewid
1
520
Patterns of Patterns
denyspoltorak
0
410
Denoのセキュリティに関する仕組みの紹介 (toranoana.deno #23)
uki00a
0
210
GISエンジニアから見たLINKSデータ
nokonoko1203
0
190
perlをWebAssembly上で動かすと何が嬉しいの??? / Where does Perl-on-Wasm actually make sense?
mackee
0
280
はじめてのカスタムエージェント【GitHub Copilot Agent Mode編】
satoshi256kbyte
0
140
re:Invent 2025 のイケてるサービスを紹介する
maroon1st
0
160
re:Invent 2025 トレンドからみる製品開発への AI Agent 活用
yoskoh
0
570
Navigating Dependency Injection with Metro
l2hyunwoo
1
200
Featured
See All Featured
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
5.8k
Un-Boring Meetings
codingconduct
0
170
The innovator’s Mindset - Leading Through an Era of Exponential Change - McGill University 2025
jdejongh
PRO
1
74
The Curious Case for Waylosing
cassininazir
0
200
Digital Projects Gone Horribly Wrong (And the UX Pros Who Still Save the Day) - Dean Schuster
uxyall
0
120
Mozcon NYC 2025: Stop Losing SEO Traffic
samtorres
0
110
Leveraging LLMs for student feedback in introductory data science courses - posit::conf(2025)
minecr
0
97
Designing Experiences People Love
moore
143
24k
JAMstack: Web Apps at Ludicrous Speed - All Things Open 2022
reverentgeek
1
300
YesSQL, Process and Tooling at Scale
rocio
174
15k
Bridging the Design Gap: How Collaborative Modelling removes blockers to flow between stakeholders and teams @FastFlow conf
baasie
0
420
The Illustrated Children's Guide to Kubernetes
chrisshort
51
51k
Transcript
Ramaze と Sequel で ウェブサービスを作ってみた 渋谷.rb[:20120215] Kensuke Nagae
謝罪
s/Ramaze/Sinatra/ s/作ってみた/作ってます/
でも Ramaze の話をします
長永 健介 について • 刺身☆ブーメラン, @kyanny • ペパボ、 30days Album
• 最近猫を飼いました
HBKindle 作ってます • はてブしたページを Kindle に送るサービス • はてなブックマーク WebHook を使ってます
Ramaze と Sequel 使ってみた • Ramaze はマイクロフレームワーク (Sinatra 的なもの) •
Sequel は O/R マッパ (ActiveRecord 的なもの) • 両方初めて -> 簡単に使えた -> せっかくなので発表
Ramaze • ラマゼ? • WAF • 主要な日本語の情報源 ◦ ramaze-users ◦
Ruby Freaks Lounge 第11回 自由なWebフレームワーク, Ramaze ◦ Ruby Freaks Lounge 第12回 Ramazeを使って120行で作る 単語帳アプリ ▪ 全て yhara さんの仕事 (すごい)
Ramaze のコードの例 require 'ramaze' class Blog < Ramaze::Controller map '/blog'
# GET /blog def index 'Hello, this is my Ramaze blog' end end Ramaze.start
Ramaze の特徴 • いいところ ◦ DSL じゃない (Ruby のクラスそのもの) ◦
覚えることが少ない • 悪いところ ◦ Ruby を知らないときつい (デザイナさんとか)
Ramaze Command • ひな形作成 • ウェブサーバ起動 • irb コンソール起動 •
別に使わなくていい
覚えることが少ない? • 規約が少ない • • require は Ramaze を知らなくても読める
Controllers • map '/uri' • request[:form_field_name] • これだけ知ってれば十分使えます ◦ params
はあっても良かった • controller/*.rb に置くのが流儀
Models • 好きな • O/R マッパを • 使ってください • model/*.rb
に置くのが流儀
Views • 好きな • テンプレートエンジンを (ry • layout 使えます •
Controller から render_* でレンダリング • 変数の参照はインスタンス変数 @user とかで (Rails と同じ) • view/*.erb とかに置くのが流儀 ◦ map で階層増えたらそのぶんディレクトリを掘る
Helpers • いっぱい • あるので • がんばって研究しましょう
Configuration • Ramaze::Traited ◦ 外からアクセスできるクラス変数 @@val ◦ 継承で上書きされない == クラスごとに固有の値
◦ 設定値をもたせたりとか ▪ 定数でよいのでは... • Ramaze::Optioned ◦ グローバル変数的な存在 ◦ registrar とか context とかみたいな? ◦ 設定値をもたせたりとか ▪ グローバル変数でよいのでは... ◦ 入れたり出したりが面倒くさい
Sessions • session と flash がある • Rack::Session::Cookie とか使ったほうがよさげ
Ramaze まとめ • 覚えることが少ない • 把握しやすい • Sinatra を Modular
スタイルに書きなおすくらいなら最初から採 用してもいいのでは
Sequel • シークェル? • O/R マッパ • 主要な日本語の情報源 ◦ http://d.hatena.ne.jp/yshgt/20080629/1214720897
▪ ここみれば以降のスライドみなくていいです ◦ Ruby Freaks Lounge 第9回 SinatraとSequel・Hamlで掲示板 アプリを作る ▪ これも yhara さん (すごい)
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')
Sequel の特徴 • dataset がとてもお手軽 • dataset がとてもお手軽 ◦ ホントにお手軽なので二回いいました
• Model クラスも作れる ◦ ActiveRecord でよいのでは... • Migration もある ◦ でも Rake タスクは自前で用意する... • Heroku Friendly (postgres:// みたいな URL を直接食わせら れる)
dataset とはなにか • Dataset Basics ◦ Datasets are probably the
thing that separate Sequel from other database libraries. ◦ 「SQL クエリ」または「行セット」を表現したもの ◦ 行セットとは、データの列を含む行の集まりです。 ◦ SQL といえば集合指向 ◦ dataset は集合を集合のまま扱う仕組み ▪ SQL クエリとの剥離が少ないので直感的
The Sequel Console • irb コンソール起動 • DB という定数にデータベースオブジェクトが入る ◦
sqlite(1) とかでよいのでは... • マイグレーション実行 (-m) ◦ 便利、だが反面 Rake タスクがない...
Migrations • sequel -m path/to/migrations postgres://host/database • rake タスクは自分で用意する... ◦
http://steamcode.blogspot.com/2010/09/sequel-and- heroku.html ◦ 自分で用意しなくてよかった ◦ ほかにも探せばけっこうあります
Sequel for ActiveRecord Users • ActiveRecord っぽい Model が欲しい方に •
けっこう多機能 (association, validation, callback, etc.) ◦ ActiveRecord でよいのでは... ◦ dataset スタイルとコードが違いすぎる ◦ Sinatra の Classic Style と Modular Style に似ている ◦ 最初から AR っぽく書くなら AR を選べばいい ◦ 途中から変えるくらいなら最初から AR で書けばいい ◦ 「大きく育てる気がないコード」用と割り切る
他にもいろいろあるけど 調べきれませんでした
Sequel まとめ • プロトタイピングのお供に最適 ◦ せっかく WAF はミニマルなのに DB 使うととたんにヘヴィに
なるのはだるい • dataset は小さいコード向き、と割り切る • Model を使うくらいなら他の O/R マッパでいいんじゃない?
まとめ Ramaze も Sequel も使い始めに覚えなきゃいkこと・知ってないと使 えないことが少ないので、思いついたものをさっと書いて動かしてみ るのにオススメです
おわり ありがとうございました