Upgrade to Pro — share decks privately, control downloads, hide ads and more …

料理を支える技術2012

Yuichi Tateno
September 18, 2012
10k

 料理を支える技術2012

Yuichi Tateno

September 18, 2012
Tweet

Transcript

  1. ྉཧΛࢧ͑Δ
    ٕज़

    ؘ໺༞Ұ

    View Slide

  2. ఏڙ

    View Slide

  3. JETFDPOEMJGF
    ؘ໺༞Ұ
    :VJDIJ5BUFOP

    View Slide

  4. @hotchpotch

    View Slide

  5. Shibuya.js

    View Slide

  6. ༓ྶ෦һ

    View Slide

  7. View Slide

  8. ྉཧΛࢧ͑Δ
    ٕज़

    View Slide

  9. 2011

    2012

    View Slide

  10. 2011
    http://techlife.cookpad.com/2011/07/19/rubykaigi2011/

    View Slide

  11. 2012

    View Slide

  12. - Rails 2.3
    + Rails 3.0
    2012

    View Slide

  13. 3BJMT
    ΁ͷಓ
    http://www.flickr.com/photos/skreuzer/4285271145/

    View Slide

  14. ݄ؒར༻ऀ
    ສҎ্
    Ϩγϐ਺ສҎ্
    Ͳ͏΍ͬͯ
    େن໛3BJMTΞϓϦΛ
    όʔδϣϯΞοϓͨ͠ͷ͔

    View Slide

  15. ͳͥ3BJMTͷόʔδϣϯΛ
    ্͛Δඞཁ͕͋Δͷ͔

    View Slide

  16. ✓3BJMTʹू໿͞Ε͍ͯΔɺ
    ༷ʑͳϥΠϒϥϦΛ
    ར༻Ͱ͖ͳ͘ͳΔ

    View Slide

  17. http://www.flickr.com/photos/dskley/4669454041/
    ৽͍͠3BJMʹ
    ✓৐Δ
    ৐Βͳ͍

    View Slide

  18. )PXUP
    Ͳ͏΍Δͷʁ

    View Slide

  19. Rails 2.3 -> 3.0
    RSpec 1.3 -> 2.2

    View Slide

  20. $  bundle  exec  rake  cookpad:spec

    View Slide

  21. $  bundle  exec  rake  cookpad:spec
    F

    View Slide

  22. $  bundle  exec  rake  cookpad:spec
    FFFF

    View Slide

  23. $  bundle  exec  rake  cookpad:spec
    FFFFFFFFFFFFFFFFFFFFFFFFFFFFF

    View Slide

  24. $  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

    View Slide

  25. $  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?
    ʘ

    View Slide

  26. http://www.flickr.com/photos/aizaz/3512778599/
    ஍ಓʹ
    ͭͿ͍ͯ͘͠࡞ۀ

    View Slide

  27. http://www.flickr.com/photos/aizaz/3512778599/
    ✓Կ͔Λ౗͢ͱҰؾʹݮΔ
    ✓ϘεతͳϠπ΋͍Δ
    ✓౗͢ͱผͷϠπ͕෮׆͢Δ
    ׂͱήʔϜͬΆ͍

    View Slide

  28. http://www.flickr.com/photos/aizaz/3512778599/
    ✓Կ͔Λ౗͢ͱҰؾʹݮΔ
    ✓ϘεతͳϠπ΋͍Δ
    ׂͱήʔϜͬΆ͍
    ࢲ͸
    ΍ͬͯͳ͍Μ
    Ͱ͚͢ͲͶ
    ʢʍТɾʣ

    View Slide

  29. Team
    34QFD૊
    !TIJOHPԽ>
    [email protected]
    ͦͷଞ
    !IPUDIQPUDI

    View Slide

  30. ࣗಈ
    IUNMFTDBQF
    ରԠ

    View Slide

  31. "  %>

    View Slide

  32. "  %>
    Rails  2.3
    #=>  

    View Slide

  33. "  %>
    Rails  3.0
    #=>  <hello>
    Rails  2.3
    #=>  

    View Slide

  34. ඪ४ͰϏϡʔ͕
    IUNMFTDBQF͞ΕΔ
    ˺
    IUNMFTDBQFલఏ΁ͱ
    ͢΂ͯͷίʔυΛॻ͖௚͢

    View Slide

  35. rails_xss plugin
    https://github.com/nzkoz/rails_xss
    ✓3BJMT؀ڥʹಋೖՄೳ

    View Slide

  36. "  %>
    Rails  3.0
    #=>  <hello>
    Rails  2.3
    #=>  <hello>

    View Slide

  37. rails_xss plugin
    https://github.com/nzkoz/rails_xss
    ✓3BJMT؀ڥʹಋೖՄೳ
    ✓3BJMTͰ[email protected]༗ޮͰ໰୊ͳ
    ͍˺SBJMTͰ΋໰୊ͳ͍

    View Slide

  38. ࢗ਎
    http://www.flickr.com/photos/htakashi/5696799508/

    View Slide


  39. View Slide

  40. spec

    html

    View Slide

  41. ✓ functional test
    34QFD$POUSPMMFS

    ✓ integration test
    $BQZCBSB 8FCSBU

    3300+ examples

    View Slide

  42. RSpec
    Capybara, Webrat
    dirty hack !

    View Slide

  43. $  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

    View Slide

  44. View Slide

  45. IUNMFTDBQFͷ
    lࠩҧ͚ͩz
    ஌Γ͍ͨ

    View Slide

  46. IUNMFTDBQFͷ
    lࠩҧ͚ͩz
    ஌Γ͍ͨ
    git  diff
    -­‐-­‐word-­‐diff-­‐regex

    View Slide

  47. $  git  diff  -­‐-­‐word-­‐diff-­‐regex=
       '(<)|(&)|(>)|(")|(')'
       -­‐-­‐color  -­‐-­‐ignore-­‐all-­‐space
       -­‐-­‐word-­‐diff=plain
       -­‐-­‐no-­‐index  -­‐-­‐
       #{normal}  #{htmlsafe}

    View Slide

  48. View Slide

  49. View Slide

  50. http://www.flickr.com/photos/aizaz/3512778599/
    $  ./script/escape_spec
           spec/**/*

    View Slide

  51. $  bundle  exec  rake  cookpad:spec

    View Slide

  52. $  bundle  exec  rake  cookpad:spec
    ......FFF......................
    ...............F...FFF.........
    ...............................
    ...............................
    ....FFF........................
    ...............................
    ..............................F
    ..............................F
    ...............................
    ..............FF...............
    ...............................
    ...............F.F.............
    ....FFFFFF.....................
    ......................F..F.....

    View Slide

  53. $  bundle  exec  rake  cookpad:spec
    ......FFF......................
    ...............F...FFF.........
    ...............................
    ...............................
    ....FFF........................
    ...............................
    ..............................F
    ..............................F
    ...............................
    ..............FF...............
    ...............................
    ...............F.F.............
    ....FFFFFF.....................
    ......................F..F.....
    $  RAILS_ENV=production
    bundle  exec  rails  server

    View Slide

  54. http://www.flickr.com/photos/naotakem/3524078643/
    performance
    performance

    View Slide

  55. http://www.flickr.com/photos/naotakem/3524078643/
    performance
    performance
    performance

    View Slide

  56. ✓BC BQBDIFCFODI

    ✓+.FUFS
    http://www.flickr.com/photos/wwarby/3296379139/
    #FODINBSL

    View Slide

  57. ݁Ռ
    3VCZ
    ˣ
    3&& UDNBMMPDແޮ

    ˣ
    3&& UDNBMMPD

    ˣ

    View Slide

  58. ݁Ռ
    3VCZ
    ˣ
    3&& UDNBMMPDແޮ

    ˣ
    3&& UDNBMMPD

    ˣ
    ஗͍

    View Slide

  59. ଎͕͞଍Γͳ͍ʂʂ

    View Slide

  60. ʮͦΜͳ࣌͸ϓϩϑΝΠϦϯάͷ࣌ؒͰ͢Ͷɻʯ

    View Slide

  61. View Slide

  62. Α͘Θ͔Βͳ͍

    View Slide

  63. ຖճωοΫͱͳΔ
    ৔ॴ͕มΘΔ
    ($

    View Slide

  64. Passenger

    Unicorn

    View Slide

  65. Unicorn
    module  
    Unicorn::OobGC

    View Slide

  66. GC timing
    request
    GC

    View Slide

  67. GC timing
    request
    GC.start
    GC.disable

    View Slide

  68. GC timing

    View Slide

  69. GC timing
    FAST

    View Slide

  70.    disabled  =  GC.enable
       GC.start
       GC.disable  if  disabled
    after_fork  do  |server,  worker|
       GC.disable  if  RAILS_ENV=='production'

    View Slide

  71. View Slide

  72. View Slide

  73. View Slide

  74. 150%
    fast !

    View Slide

  75. http://www.flickr.com/photos/adamkr/4650637393/
    ύϑΥʔϚϯε
    ղܾʂʂ

    View Slide

  76. !NJSBLVJ
    ✓3BJMTߴ଎Խ
    ✓ϓϩϑΝΠϥ
    ✓6OJDPSO
    ✓Ωϟογϡ
    ✓ύϯμ

    View Slide

  77. $  bundle  exec  rake  cookpad:spec
    ...............................
    .....................F.........
    ...............................
    ...............................
    .....F.........................
    ...............................
    ...............................
    ...............................
    ...............................
    ...............................
    ...............................
    ...............................
    ...............................
    .........................F.....

    View Slide

  78. ࠷ऴ
    ֬ೝ

    View Slide

  79. ςετͰ
    ൃݟͰ͖ͳ͍໰୊Λ
    Ͳ͏ղܾ͢Δ͔

    View Slide

  80. ✓ຊ൪ϦΫΤετΛ
    ࣮ࡍʹྲྀ͢

    View Slide

  81. em-proxy
    https://github.com/igrigorik/em-proxy
    EventMachine Proxy DSL for writing
    high-performance transparent /
    intercepting proxies in Ruby.

    View Slide

  82. 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

    View Slide

  83. [app-­‐rails-­‐3.0]
    $  tail  -­‐f  produciton.log  |  grep  500

    View Slide

  84. $  bundle  exec  rake  cookpad:spec
    ...............................
    ...............................
    ...............................
    ...............................
    ...............................
    ...............................
    ...............................
    ...............................
    ...............................
    ...............................
    ...............................
    ...............................
    ...............................
    ...............................

    View Slide

  85. /FYU
    4UFQ
    ࣍ͷ
    ֬ೝεςοϓ

    View Slide

  86. Ұ෦Ϣʔβʹ
    ࣮ࡍʹϦϦʔε͢Δ

    View Slide

  87. ໰୊
    ͳ͠ʁ
    3BJMT
    ✓ςετ
    ✓ύϑΥʔϚϯε
    ✓ෳ੡ϦΫΤετ

    View Slide

  88. Cookie:  
    r3balance=xxx
    YYY͕ಛఆ஋ͷ
    ϢʔβΛ3BJMT
    ʹྲྀ͢

    View Slide

  89. ✓4FTTJPO4UPSF$BDIF
    γϦΞϥΠζܗࣜͷҧ͍
    ✓.Z42-΁ͷ
    ͓͔͠ͳNBTUFS΁ͷΫΤϦ
    ✓+BWB4DSJQUΤϥʔ
    ൃݟ

    View Slide

  90. ✓ςετ
    ✓ύϑΥʔϚϯε
    ✓ෳ੡ϦΫΤετ
    ✓࣮ΞΫηε

    View Slide

  91. ϦϦʔε࡞ۀ
    ✓ςετ
    ✓ύϑΥʔϚϯε
    ✓ෳ੡ϦΫΤετ
    ✓࣮ΞΫηε

    View Slide

  92. 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

    View Slide

  93. 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

    View Slide

  94. http://www.flickr.com/photos/skreuzer/4285271145/
    ೥݄೔
    3BJMT
    ϦϦʔεʂʂ

    View Slide

  95. http://www.flickr.com/photos/skreuzer/4285271145/
    ೥݄೔
    3BJMT
    ϦϦʔεʂʂ
    େ͖ͳ
    ໰୊ͳ͠ʂ

    View Slide

  96. http://www.flickr.com/photos/skreuzer/4285271145/
    ೥݄೔
    3BJMT
    ϦϦʔεʂʂ
    ࡀͷ
    ஀ੜ೔
    ʘ ?P?
    ʗ

    View Slide

  97. 2012

    View Slide

  98. + Sara Framework
    2012

    View Slide

  99. http://www.flickr.com/photos/norio_nomura/4713348873/

    ϑϨʔϜϫʔΫ

    View Slide

  100. 2TBSBGSBNFXPSLͬͯ
    "5XJUUFS#PPUTUSBQ
    Έ͍ͨͳ෺ͷ$00,1"%൛

    View Slide

  101. ͳͥ
    5XJUUFS#PPUTUSBQ
    Ͱ͸ͳ͍ͷʁ
    ͳͥ
    ಠࣗʹ࡞Δͷʁ

    View Slide

  102. l$00,1"%z
    σβΠϯͷந৅Խ

    View Slide

  103. l$00,1"%z
    Ͱ͸͜͏͋Δ΂͖
    6*69ͷந৅Խ

    View Slide

  104. l$00,1"%σβΠϯz
    ͷந৅Խ
    㾎σβΠϯͷ஌ࣝ
    㾎6*69ͷ஌ࣝ
    㾎͜͏͋Δ΂͖ͱ͍͏ߟ͑
    㾎$44 4BTT
    ͷ࣮૷ྗ

    View Slide

  105. View Slide

  106. !UJLFEB

    View Slide

  107. http://www.flickr.com/photos/norio_nomura/4713348873/

    ϑϨʔϜϫʔΫ

    View Slide


  108. View Slide


  109. View Slide


  110. View Slide


  111. View Slide

  112. σβΠϯΛ౰ͯΔ
    ෛ୲͕ݮগ
    ΑΓ෼ۀ͠΍͘͢

    View Slide

  113. 2012

    View Slide

  114. 2012
    Android App
    + html5 (webview)
    - native

    View Slide

  115. 2012
    2011
    native html5

    View Slide

  116. 2012
    2011
    㾎3BJMT্Ͱͷػೳ։ൃɾΤϯδ
    χΞ୭Ͱ΋͍͡ΕΔ
    㾎εϚʔτϑΥϯ޲͚IUNMͱಉ
    ࣌։ൃՄೳ
    㾎OBUJWFͷػೳΛ࢖͏৔߹ɺ+4
    Ͱ௨৴

    View Slide

  117. 2012
    2011
    㾎3BJMT্ͷ࣮૷Ͱػೳ։ൃɾΤ
    ϯδχΞ୭Ͱ΋͍͡ΕΔ
    㾎εϚʔτϑΥϯϒϥ΢βͱಉ࣌
    ։ൃՄೳ
    㾎OBUJWFͷػೳΛ࢖͏৔߹ɺ+4
    Ͱ௨৴
    )5.-ʹౌ͚ͨͷ͸
    ࣦഊͩͬͨ ϚʔΫ

    View Slide

  118. 2012
    2011
    㾎3BJMT্Ͱػೳ։ൃɾΤϯδχ
    Ξ୭Ͱ΋͍͡ΕΔ
    㾎εϚʔτϑΥϯ޲͚IUNMͱಉ
    ࣌։ൃՄೳ
    㾎OBUJWFͷػೳΛ࢖͏৔߹ɺ+4
    Ͱ௨৴

    View Slide

  119. 2012
    + fluentd

    View Slide

  120. 2012
    + fluentd
    㾎3BJMTΞϓϦέʔγϣϯαʔόͰͷ
    ϩάू໿
    㾎਺ඦ୆ͰՔಇ
    㾎3VCZͰ࣮૷͞Ε͍ͯΔ
    㾎3VCZͰϓϥάΠϯهड़

    View Slide

  121. 2012
    + fluentd
    㾎਺ඦ୆ͷ3BJMTΞϓϦέʔγϣϯ
    αʔόͰͷϩάू໿
    㾎3VCZͰ࣮૷
    㾎3VCZͰϓϥάΠϯهड़
    http://www.slideshare.net/hotchpotch/20120204fluent-logging

    View Slide

  122. 2012
    + fluentd
    㾎਺ඦ୆ͷ3BJMTΞϓϦέʔγϣϯ
    αʔόͰͷϩάू໿
    㾎3VCZͰ࣮૷
    㾎3VCZͰϓϥάΠϯهड़

    View Slide

  123. 2012
    + Code Review w/GHE

    View Slide

  124. 2012
    + Code Review w/GHE
    㾎ຖ݄໿ݸͷQVMMSFRVFTU


    View Slide

  125. 2012
    + Code Review w/GHE
    㾎ຖ݄໿ݸͷQVMMSFRVFTU
    㾎৺Թ·Δ΄ͬ͜ΓϨϏϡʔ͔Β

    View Slide

  126. 2012
    + Code Review w/GHE
    㾎ຖ݄໿ݸͷQVMMSFRVFTU
    㾎৺Թ·Δ΄ͬ͜ΓϨϏϡʔ͔Β
    㾎ϞώΧϯͷි౤͛·Ͱ

    View Slide

  127. 2012
    + Code Review w/GHE
    㾎ຖ݄ݸͷQVMMSFRVFTU
    㾎৺Թ·Δ΄ͬ͜ΓϨϏϡʔ͔Β
    㾎ϞώΧϯͷි౤͛·Ͱ
    ˡ3VCZίϛολ
    ˡ3VCZίϛολ

    View Slide

  128. 2012
    + Code Review w/GHE
    㾎ຖ݄ݸͷQVMMSFRVFTU
    㾎৺Թ·Δ΄ͬ͜ΓϨϏϡʔ͔Β
    㾎ϞώΧϯͷි౤͛·Ͱ

    View Slide

  129. 2012
    + Code Review w/GHE
    9/15 (sat) LT
    @takai
    Code Review in Action

    View Slide

  130. 2012
    + Code Review w/GHE
    9/15 (sat) LT
    @takai
    Code Review in Action

    View Slide

  131. 2012
    + Distributed CI

    View Slide

  132. 2012
    + Distributed CI

    View Slide

  133. 2012
    + Distributed CI

    View Slide

  134. 2012
    + Distributed CI
    㾎૿͑ଓ͚Δςετ
    㾎ऴΘΒͳ͍ܧଓతΠϯςάϨʔγϣϯ
    㾎Ͳ͏΍ͬͯ෼ࢄ34QFDΛ҆ఆͤ͞Δ͔
    㾎"84&$Λར༻ͨ͠αʔόͷࣗಈॖୀ

    View Slide

  135. 2012
    + Distributed CI
    9/16 (sun) 10:30
    @mrkn
    Distributed RSpec

    View Slide

  136. + AWS
    + Chanko (open source)
    + kuroko (new batch system)
    + IMon (new monitoring system)
    etcetc...

    View Slide

  137. 2011

    2012

    View Slide

  138. ఏڙ

    View Slide

  139. ͝ਗ਼ௌ
    ͋Γ͕ͱ͏͍͟͝·ͨ͠
    Thank You

    View Slide