Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Speaker Deck
PRO
Sign in
Sign up for free
料理を支える技術2012
Yuichi Tateno
September 18, 2012
10
10k
料理を支える技術2012
Yuichi Tateno
September 18, 2012
Tweet
Share
More Decks by Yuichi Tateno
See All by Yuichi Tateno
react-navigation について
hotchpotch
3
1.7k
ユーザのために技術をどう活かすか
hotchpotch
27
19k
GlitchKit
hotchpotch
1
3.1k
クラウドを使った ユーザ向けサービス開発の面白さ
hotchpotch
3
1k
pull request を利用した開発ワークフロー
hotchpotch
141
50k
Featured
See All Featured
Statistics for Hackers
jakevdp
781
210k
The Invisible Customer
myddelton
110
11k
4 Signs Your Business is Dying
shpigford
169
20k
The Straight Up "How To Draw Better" Workshop
denniskardys
225
120k
10 Git Anti Patterns You Should be Aware of
lemiorhan
638
52k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
37
3.2k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
4
450
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
151
12k
The Pragmatic Product Professional
lauravandoore
19
2.9k
How New CSS Is Changing Everything About Graphic Design on the Web
jensimmons
212
11k
A Modern Web Designer's Workflow
chriscoyier
689
180k
Ruby is Unlike a Banana
tanoku
91
9.2k
Transcript
ྉཧΛࢧ͑Δ ٕज़ ؘ༞Ұ
ఏڙ
JETFDPOEMJGF ؘ༞Ұ :VJDIJ5BUFOP
@hotchpotch
Shibuya.js
༓ྶ෦һ
None
ྉཧΛࢧ͑Δ ٕज़
2011 ↓ 2012
2011 http://techlife.cookpad.com/2011/07/19/rubykaigi2011/
2012
- Rails 2.3 + Rails 3.0 2012
3BJMT ͷಓ http://www.flickr.com/photos/skreuzer/4285271145/
݄ؒར༻ऀ ສҎ্ ϨγϐສҎ্ Ͳ͏ͬͯ େن3BJMTΞϓϦΛ όʔδϣϯΞοϓͨ͠ͷ͔
ͳͥ3BJMTͷόʔδϣϯΛ ্͛Δඞཁ͕͋Δͷ͔
✓3BJMTʹू͞Ε͍ͯΔɺ ༷ʑͳϥΠϒϥϦΛ ར༻Ͱ͖ͳ͘ͳΔ
http://www.flickr.com/photos/dskley/4669454041/ ৽͍͠3BJMʹ ✓Δ Βͳ͍
)PXUP Ͳ͏Δͷʁ
Rails 2.3 -> 3.0 RSpec 1.3 -> 2.2
$ bundle exec rake cookpad:spec
$ bundle exec rake cookpad:spec F
$ bundle exec rake cookpad:spec FFFF
$ bundle exec rake cookpad:spec FFFFFFFFFFFFFFFFFFFFFFFFFFFFF
$ bundle exec rake cookpad:spec FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF...F....F.FFFFFFFFF FFFFFF.FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFF...FFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF.FFFFFFFFFFFFFFF..FFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFF...FFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFF..F.FFFFFFFF.FFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF....F...FFFFF
$ bundle exec rake cookpad:spec FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF...F....F.FFFFFFFFF FFFFFF.FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFF...FFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF.FFFFFFFFFFFFFFF..FFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFF...FFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFF..F.FFFFFFFF.FFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF....F...FFFFF ʗ ?P? ʘ
http://www.flickr.com/photos/aizaz/3512778599/ ಓʹ ͭͿ͍ͯ͘͠࡞ۀ
http://www.flickr.com/photos/aizaz/3512778599/ ✓Կ͔Λ͢ͱҰؾʹݮΔ ✓ϘεతͳϠπ͍Δ ✓͢ͱผͷϠπ͕෮׆͢Δ ׂͱήʔϜͬΆ͍
http://www.flickr.com/photos/aizaz/3512778599/ ✓Կ͔Λ͢ͱҰؾʹݮΔ ✓ϘεతͳϠπ͍Δ ׂͱήʔϜͬΆ͍ ࢲ ͬͯͳ͍Μ Ͱ͚͢ͲͶ ʢʍТɾʣ
Team 34QFD !TIJOHP<Խ> !B@NBUTVEB<༭ฌ> ͦͷଞ !IPUDIQPUDI
ࣗಈ IUNMFTDBQF ରԠ
<%= "<hello>" %>
<%= "<hello>" %> Rails 2.3 #=> <hello>
<%= "<hello>" %> Rails 3.0 #=> <hello> Rails 2.3 #=>
<hello>
ඪ४ͰϏϡʔ͕ IUNMFTDBQF͞ΕΔ ˺ IUNMFTDBQFલఏͱ ͯ͢ͷίʔυΛॻ͖͢
rails_xss plugin https://github.com/nzkoz/rails_xss ✓3BJMTڥʹಋೖՄೳ
<%= "<hello>" %> Rails 3.0 #=> <hello> Rails 2.3 #=>
<hello>
rails_xss plugin https://github.com/nzkoz/rails_xss ✓3BJMTڥʹಋೖՄೳ ✓3BJMTͰSBJMT@YTT༗ޮͰͳ ͍˺SBJMTͰͳ͍
http://www.flickr.com/photos/htakashi/5696799508/
ર
spec ↓ html
✓ functional test 34QFD $POUSPMMFS ✓ integration test $BQZCBSB 8FCSBU
3300+ examples
RSpec Capybara, Webrat dirty hack !
$ spec -‐l 139 spec/controller/ recipe_spec.rb write: normal/spec/controller/ recipe_spec.rb:139.html $
RAILS_XSS=1 spec -‐l 139 spec/ controller/recipe_spec.rb write: htmlsafe/spec/controller/ recipe_spec.rb:139.html
None
IUNMFTDBQFͷ lࠩҧ͚ͩz Γ͍ͨ
IUNMFTDBQFͷ lࠩҧ͚ͩz Γ͍ͨ git diff -‐-‐word-‐diff-‐regex
$ git diff -‐-‐word-‐diff-‐regex= '(<)|(&)|(>)|(")|(')' -‐-‐color -‐-‐ignore-‐all-‐space
-‐-‐word-‐diff=plain -‐-‐no-‐index -‐-‐ #{normal} #{htmlsafe}
None
None
http://www.flickr.com/photos/aizaz/3512778599/ $ ./script/escape_spec spec/**/*
$ bundle exec rake cookpad:spec
$ bundle exec rake cookpad:spec ......FFF...................... ...............F...FFF......... ............................... ............................... ....FFF........................
............................... ..............................F ..............................F ............................... ..............FF............... ............................... ...............F.F............. ....FFFFFF..................... ......................F..F.....
$ bundle exec rake cookpad:spec ......FFF...................... ...............F...FFF......... ............................... ............................... ....FFF........................
............................... ..............................F ..............................F ............................... ..............FF............... ............................... ...............F.F............. ....FFFFFF..................... ......................F..F..... $ RAILS_ENV=production bundle exec rails server
http://www.flickr.com/photos/naotakem/3524078643/ performance performance
http://www.flickr.com/photos/naotakem/3524078643/ performance performance performance
✓BC BQBDIFCFODI ✓+.FUFS http://www.flickr.com/photos/wwarby/3296379139/ #FODINBSL
݁Ռ 3VCZ ˣ 3&& UDNBMMPDແޮ ˣ 3&& UDNBMMPD ˣ
݁Ռ 3VCZ ˣ 3&& UDNBMMPDແޮ ˣ 3&& UDNBMMPD ˣ
͍
͕͞Γͳ͍ʂʂ
ʮͦΜͳ࣌ϓϩϑΝΠϦϯάͷ࣌ؒͰ͢Ͷɻʯ
None
Α͘Θ͔Βͳ͍
ຖճωοΫͱͳΔ ॴ͕มΘΔ ($
Passenger ↓ Unicorn
Unicorn module Unicorn::OobGC
GC timing request GC
GC timing request GC.start GC.disable
GC timing
GC timing FAST
disabled = GC.enable GC.start GC.disable if disabled
after_fork do |server, worker| GC.disable if RAILS_ENV=='production'
None
None
None
150% fast !
http://www.flickr.com/photos/adamkr/4650637393/ ύϑΥʔϚϯε ղܾʂʂ
!NJSBLVJ ✓3BJMTߴԽ ✓ϓϩϑΝΠϥ ✓6OJDPSO ✓Ωϟογϡ ✓ύϯμ
$ bundle exec rake cookpad:spec ............................... .....................F......... ............................... ............................... .....F.........................
............................... ............................... ............................... ............................... ............................... ............................... ............................... ............................... .........................F.....
࠷ऴ ֬ೝ ✓
ςετͰ ൃݟͰ͖ͳ͍Λ Ͳ͏ղܾ͢Δ͔
✓ຊ൪ϦΫΤετΛ ࣮ࡍʹྲྀ͢
em-proxy https://github.com/igrigorik/em-proxy EventMachine Proxy DSL for writing high-performance transparent /
intercepting proxies in Ruby.
em-proxy app Rails 2.3 app Rails 3.0 (readonly) proxy request
only https://github.com/igrigorik/em-proxy/blob/master/examples/duplex.rb dup request
[app-‐rails-‐3.0] $ tail -‐f produciton.log | grep 500
$ bundle exec rake cookpad:spec ............................... ............................... ............................... ............................... ...............................
............................... ............................... ............................... ............................... ............................... ............................... ............................... ............................... ...............................
/FYU 4UFQ ࣍ͷ ֬ೝεςοϓ
Ұ෦Ϣʔβʹ ࣮ࡍʹϦϦʔε͢Δ
ͳ͠ʁ 3BJMT ✓ςετ ✓ύϑΥʔϚϯε ✓ෳϦΫΤετ
Cookie: r3balance=xxx YYY͕ಛఆͷ ϢʔβΛ3BJMT ʹྲྀ͢
✓4FTTJPO4UPSF$BDIF γϦΞϥΠζܗࣜͷҧ͍ ✓.Z42-ͷ ͓͔͠ͳNBTUFSͷΫΤϦ ✓+BWB4DSJQUΤϥʔ ൃݟ
✓ςετ ✓ύϑΥʔϚϯε ✓ෳϦΫΤετ ✓࣮ΞΫηε
ϦϦʔε࡞ۀ ✓ςετ ✓ύϑΥʔϚϯε ✓ෳϦΫΤετ ✓࣮ΞΫηε
AWS EC2 app Rails 2.3 app Rails 2.3 app Rails
2.3 app Rails 2.3 x50 proxy app Rails 3.0 app Rails 3.0 app Rails 3.0 app Rails 3.0 x50
AWS EC2 app Rails 2.3 app Rails 2.3 app Rails
2.3 app Rails 2.3 x50 proxy app Rails 3.0 app Rails 3.0 app Rails 3.0 app Rails 3.0 x50
http://www.flickr.com/photos/skreuzer/4285271145/ ݄ 3BJMT ϦϦʔεʂʂ
http://www.flickr.com/photos/skreuzer/4285271145/ ݄ 3BJMT ϦϦʔεʂʂ େ͖ͳ ͳ͠ʂ
http://www.flickr.com/photos/skreuzer/4285271145/ ݄ 3BJMT ϦϦʔεʂʂ ࡀͷ ੜ ʘ ?P? ʗ
2012
+ Sara Framework 2012
http://www.flickr.com/photos/norio_nomura/4713348873/ ࡼ ϑϨʔϜϫʔΫ
2TBSBGSBNFXPSLͬͯ "5XJUUFS#PPUTUSBQ Έ͍ͨͳͷ$00,1"%൛
ͳͥ 5XJUUFS#PPUTUSBQ Ͱͳ͍ͷʁ ͳͥ ಠࣗʹ࡞Δͷʁ
l$00,1"%z σβΠϯͷநԽ
l$00,1"%z Ͱ͜͏͋Δ͖ 6*69ͷநԽ
l$00,1"%σβΠϯz ͷநԽ 㾎σβΠϯͷࣝ 㾎6*69ͷࣝ 㾎͜͏͋Δ͖ͱ͍͏ߟ͑ 㾎$44 4BTT ͷ࣮ྗ
None
!UJLFEB
http://www.flickr.com/photos/norio_nomura/4713348873/ ࡼ ϑϨʔϜϫʔΫ
ࡼ
ࡼ
ࡼ
ࡼ
σβΠϯΛͯΔ ෛ୲͕ݮগ ΑΓۀ͘͢͠
2012
2012 Android App + html5 (webview) - native
2012 2011 native html5
2012 2011 㾎3BJMT্Ͱͷػೳ։ൃɾΤϯδ χΞ୭Ͱ͍͡ΕΔ 㾎εϚʔτϑΥϯ͚IUNMͱಉ ࣌։ൃՄೳ 㾎OBUJWFͷػೳΛ͏߹ɺ+4 Ͱ௨৴
2012 2011 㾎3BJMT্ͷ࣮Ͱػೳ։ൃɾΤ ϯδχΞ୭Ͱ͍͡ΕΔ 㾎εϚʔτϑΥϯϒϥβͱಉ࣌ ։ൃՄೳ 㾎OBUJWFͷػೳΛ͏߹ɺ+4 Ͱ௨৴ )5.-ʹౌ͚ͨͷ ࣦഊͩͬͨ
ϚʔΫ
2012 2011 㾎3BJMT্Ͱػೳ։ൃɾΤϯδχ Ξ୭Ͱ͍͡ΕΔ 㾎εϚʔτϑΥϯ͚IUNMͱಉ ࣌։ൃՄೳ 㾎OBUJWFͷػೳΛ͏߹ɺ+4 Ͱ௨৴
2012 + fluentd
2012 + fluentd 㾎3BJMTΞϓϦέʔγϣϯαʔόͰͷ ϩάू 㾎ඦͰՔಇ 㾎3VCZͰ࣮͞Ε͍ͯΔ 㾎3VCZͰϓϥάΠϯهड़
2012 + fluentd 㾎ඦͷ3BJMTΞϓϦέʔγϣϯ αʔόͰͷϩάू 㾎3VCZͰ࣮ 㾎3VCZͰϓϥάΠϯهड़ http://www.slideshare.net/hotchpotch/20120204fluent-logging
2012 + fluentd 㾎ඦͷ3BJMTΞϓϦέʔγϣϯ αʔόͰͷϩάू 㾎3VCZͰ࣮ 㾎3VCZͰϓϥάΠϯهड़
2012 + Code Review w/GHE
2012 + Code Review w/GHE 㾎ຖ݄ݸͷQVMMSFRVFTU
2012 + Code Review w/GHE 㾎ຖ݄ݸͷQVMMSFRVFTU 㾎৺Թ·Δ΄ͬ͜ΓϨϏϡʔ͔Β
2012 + Code Review w/GHE 㾎ຖ݄ݸͷQVMMSFRVFTU 㾎৺Թ·Δ΄ͬ͜ΓϨϏϡʔ͔Β 㾎ϞώΧϯͷි͛·Ͱ
2012 + Code Review w/GHE 㾎ຖ݄ݸͷQVMMSFRVFTU 㾎৺Թ·Δ΄ͬ͜ΓϨϏϡʔ͔Β 㾎ϞώΧϯͷි͛·Ͱ ˡ3VCZίϛολ ˡ3VCZίϛολ
2012 + Code Review w/GHE 㾎ຖ݄ݸͷQVMMSFRVFTU 㾎৺Թ·Δ΄ͬ͜ΓϨϏϡʔ͔Β 㾎ϞώΧϯͷි͛·Ͱ
2012 + Code Review w/GHE 9/15 (sat) LT @takai Code
Review in Action
2012 + Code Review w/GHE 9/15 (sat) LT @takai Code
Review in Action
2012 + Distributed CI
2012 + Distributed CI
2012 + Distributed CI
2012 + Distributed CI 㾎૿͑ଓ͚Δςετ 㾎ऴΘΒͳ͍ܧଓతΠϯςάϨʔγϣϯ 㾎Ͳ͏ͬͯࢄ34QFDΛ҆ఆͤ͞Δ͔ 㾎"84&$Λར༻ͨ͠αʔόͷࣗಈॖୀ
2012 + Distributed CI 9/16 (sun) 10:30 @mrkn Distributed RSpec
+ AWS + Chanko (open source) + kuroko (new batch
system) + IMon (new monitoring system) etcetc...
2011 ↓ 2012
ఏڙ
͝ਗ਼ௌ ͋Γ͕ͱ͏͍͟͝·ͨ͠ Thank You