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
130
2
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
そうだ Rack 作ろう。
社内勉強会でRackについて説明した際の資料です。
rince
July 30, 2014
More Decks by rince
See All by rince
toCプロダクトにおけるAI機能開発のしくじりと学び / ai-product-failures-and-learnings
rince
8
6.7k
エンジニアが加速させるプロダクトディスカバリー 〜最速で価値ある機能を見つける方法〜 / product discovery accelerated by engineers
rince
3
1.3k
あらゆる商品を扱う商品データベースを再設計した話 / product db re-architecture
rince
11
6.8k
Elasticsearch入門 〜前編〜
rince
0
380
Railsで海外9ヵ国にサービス展開している話 / Rails i18n
rince
2
2k
ActiveSupport::Concern で学ぶRuby
rince
1
360
Railsを6年間やってきたぼくが最近Railsでハマったこと
rince
3
620
プロジェクトをまたいだIssue管理
rince
0
2.3k
Lean Startup
rince
0
240
Other Decks in Programming
See All in Programming
jQueryをバージョンアップする前に使いたいjQuery Migrate
matsuo_atsushi
0
500
dRuby over BLE
makicamel
2
340
さぁV100、メモリをお食べ・・・
nilpe
0
140
New "Type" system on PicoRuby
pocke
1
930
不変条件と整合性境界—ビジネスが決める設計判断と実現パターン / Invariants and Consistency Boundaries
nrslib
13
4.7k
決定論的オーケストレーションの設計と実装 / Design and Implementation of Deterministic Orchestration
nrslib
4
1.4k
Spec Driven Development | AI Summit Lisbon
danielsogl
PRO
0
190
Semantic Version 単位で戦略を柔軟に変えて、パッケージアップデートを自動化する
daitasu
1
240
Javaの型とAI時代に型が大事な理由 / java types and type in AI era
kishida
2
140
ふつうのFeature Flag実践入門
irof
7
4k
PHPで使える日時の表現と、その知り方 #frontend_phpcon_do
o0h
PRO
0
240
コンテキストの使い捨てをやめる — ビジネスルール駆動開発と miko —
ioki
0
200
Featured
See All Featured
We Have a Design System, Now What?
morganepeng
55
8.2k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
How to build a perfect <img>
jonoalderson
1
5.7k
Building a Scalable Design System with Sketch
lauravandoore
463
34k
My Coaching Mixtape
mlcsv
0
150
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
10
1.2k
RailsConf 2023
tenderlove
30
1.5k
Ruling the World: When Life Gets Gamed
codingconduct
0
250
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
62k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
49
10k
Navigating the moral maze — ethical principles for Al-driven product design
skipperchong
2
390
Leveraging LLMs for student feedback in introductory data science courses - posit::conf(2025)
minecr
1
280
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