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
そうだ Rack 作ろう。
Search
rince
July 30, 2014
Programming
2
110
そうだ Rack 作ろう。
社内勉強会でRackについて説明した際の資料です。
rince
July 30, 2014
Tweet
Share
More Decks by rince
See All by rince
エンジニアが加速させるプロダクトディスカバリー 〜最速で価値ある機能を見つける方法〜 / product discovery accelerated by engineers
rince
3
910
あらゆる商品を扱う商品データベースを再設計した話 / product db re-architecture
rince
11
6.5k
Elasticsearch入門 〜前編〜
rince
0
320
Railsで海外9ヵ国にサービス展開している話 / Rails i18n
rince
2
1.9k
ActiveSupport::Concern で学ぶRuby
rince
1
320
Railsを6年間やってきたぼくが最近Railsでハマったこと
rince
3
580
プロジェクトをまたいだIssue管理
rince
0
2.3k
Lean Startup
rince
0
200
Yahoo!主催のOpenHackDayJapanに参加してJAXA賞をいただきました
rince
0
160
Other Decks in Programming
See All in Programming
HTMLの品質ってなんだっけ? “HTMLクライテリア”の設計と実践
unachang113
4
2.8k
AIコーディングAgentとの向き合い方
eycjur
0
270
MCPでVibe Working。そして、結局はContext Eng(略)/ Working with Vibe on MCP And Context Eng
rkaga
5
2.3k
ユーザーも開発者も悩ませない TV アプリ開発 ~Compose の内部実装から学ぶフォーカス制御~
taked137
0
170
Azure SRE Agentで運用は楽になるのか?
kkamegawa
0
2.2k
プロポーザル駆動学習 / Proposal-Driven Learning
mackey0225
2
1.3k
Improving my own Ruby thereafter
sisshiki1969
1
160
FindyにおけるTakumi活用と脆弱性管理のこれから
rvirus0817
0
510
旅行プランAIエージェント開発の裏側
ippo012
2
910
Navigation 2 を 3 に移行する(予定)ためにやったこと
yokomii
0
230
Introducing ReActionView: A new ActionView-compatible ERB Engine @ Rails World 2025, Amsterdam
marcoroth
0
690
Android端末で実現するオンデバイスLLM 2025
masayukisuda
1
150
Featured
See All Featured
Optimizing for Happiness
mojombo
379
70k
The Cost Of JavaScript in 2023
addyosmani
53
8.9k
Visualization
eitanlees
148
16k
How to train your dragon (web standard)
notwaldorf
96
6.2k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
29
1.9k
Unsuck your backbone
ammeep
671
58k
Build The Right Thing And Hit Your Dates
maggiecrowley
37
2.9k
Statistics for Hackers
jakevdp
799
220k
The Art of Programming - Codeland 2020
erikaheidi
56
13k
Why Our Code Smells
bkeepers
PRO
339
57k
Optimising Largest Contentful Paint
csswizardry
37
3.4k
GraphQLとの向き合い方2022年版
quramy
49
14k
Transcript
ͦ ͏ ͩ R a c k ࡞ Ζ ͏
ɻ
5PEBZ`T(PBM w 3BDLͱԿ͔ཧղ͢Δ w 3BDLΞϓϦϛυϧΣΞΛ࡞ΕΔΑ͏ʹͳΔ
"HFOEB 3BDLͱ 3BDLΞϓϦΛ࡞ͬͯΈΑ͏ 3BDLϛυϧΣΞΛ࡞ͬͯΈΑ͏ (FNʹͯ͠ΈΑ͏ʢ͓·͚ʣ
6OJDPSOͰಈ͔ͯ͠ΈΑ͏ʢ͓·͚ʣ
3BDLͱ
3BDLͱ 3VCZΛαϙʔτ͢Δ8FC "1 αʔόͱ 3VCZϑϨʔϜϫʔΫͱΛͭͳ͙ن 1ZUIPOͷ84(*ΛݩʹఏҊ͞Εͨ
3BDLͷׂ Passenger Unicorn Thin Mongrel Rails Sinatra Ramaze Merb Application
Server Framework ΠϯλʔϑΣʔεͷ౷ҰʹΑΓɺ ϑϨʔϜϫʔΫʗAPαʔόؒͷΈ߹ΘͤΛࣗ༝ʹ͢Δ
3BDLΞϓϦΛ࡞ͬͯΈΑ͏
! wDBMMͱ͍͏ϝιουΛ͍࣋ͬͯΔ͜ͱ wDBMMϝιουͷҾͱͯ͠8FCαʔό͔ΒͷϦΫΤετ Λड͚Δ͜ͱ wDBMMϝιουҎԼͷཁૉΛؚΉϨεϙϯεΛฦ͢͜ͱ εςʔλείʔυ Ϩεϙϯεϔομʢ)BTIʣ
ϨεϙϯεϘσΟʢ"SSBZʣ 3BDLΞϓϦέʔγϣϯ
3BDLΞϓϦΛ࡞ͬͯΈΑ͏ class RackApp def call(env) [200, {'Content-Type' => 'text/html'}, ["Hello,
Rack world!"]] end end run RackApp.new DPOpHSV ! $ rackup config.ru
3BDLϛυϧΣΞΛ ࡞ͬͯΈΑ͏
3BDLϛυϧΣΞ 3BDLʹରԠͨ͠ΞϓϦέʔγϣϯʹ ػೳΛՃ͢ΔͨΊͷϛυϧΣΞ ! w3BDLΞϓϦέʔγϣϯͷ༷Λຬ͍ͨͯ͠Δ͜ͱ wOFXͷୈҰҾʹଞͷ3BDLΞϓϦέʔγϣϯΛऔΔ͜ͱ
3BDLϛυϧΣΞΛ࡞ͬͯΈΑ͏ 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 DPOpHSV
3BDLϛυϧΣΞͷೖΕࢠߏ
Α͘͏3BDLϥΠϒϥϦ w3BDL3FRVFTU ϦΫΤετΛѻ͍ͯ͘͘͢͠ΕΔϥούʔ w3BDL3FTQPOTF ϨεϙϯεΛѻ͍ͯ͘͘͢͠ΕΔϥούʔ w3BDL63-.BQ ύεʹԠͯ͡ϦΫΤετΛৼΓ͚ͯ͘ΕΔΞϓϦέʔγϣϯ ! ‣ࢀߟɿIUUQSPVUFOFUX3BDL3FGFSFODF+BIUNM
ʲԋशʳ ! ͜Ε·ͰֶΜͩ͜ͱΛ౿·͑ͯɺ ΦϦδφϧͷ3BDLϛυϧΣΞΛ࡞ͬͯΈΑ͏
(FNʹͯ͠ΈΑ͏
(FNͷ࡞Γํ require "my_first_gem/version" module MyFirstGem class UpcaseAll #... end end
$ bundle gem my_first_gem (FNͷܗΛ࡞Δ ֓ཁΛHFNTQFDʹॻ͘ ϥΠϒϥϦΛॻ͘ (FNΛϏϧυ͢Δ $ rake build
ʲԋशʳ ! ࣗ࡞ͨ͠(FNΛHFNJOBCPYʹΞοϓͯ͠ɺ ଞਓ͕࡞ͬͨ(FNΠϯετʔϧͯ͠ΈΑ͏
6OJDPSOͰಈ͔ͯ͠ΈΑ͏
6OJDPSOͷ͍ํ 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 6OJDPSOΛΠϯετʔϧ ઃఆϑΝΠϧʢVOJDPSODPOGʣΛ༻ҙ͢Δ 6OJDPSOΛىಈ͢Δ 6OJDPSOΛఀࢭ͢Δ $ kill -QUIT `cat unicorn.pid` $ unicorn -c unicorn.conf -D