$30 off During Our Annual Pro Sale. View Details »

クラウドを使った ユーザ向けサービス開発の面白さ

Yuichi Tateno
November 29, 2013

クラウドを使った ユーザ向けサービス開発の面白さ

情報処理学会 2013年度短期集中セミナー「Exiciting Coding! 2013~ITスペシャリストが語るクラウドシステム/アプリ開発の面白さ~」での発表資料

http://www.ipsj.or.jp/event/s-seminar/2013/Exciting_Coding/program.html

Yuichi Tateno

November 29, 2013
Tweet

More Decks by Yuichi Tateno

Other Decks in Programming

Transcript

  1. Ϋϥ΢υΛ࢖ͬͨ
    Ϣʔβ޲͚αʔϏε։ൃͷ໘ന͞
    ΫοΫύου

    ؘ໺༞Ұ

    2013/11/29

    View Slide

  2. ఏڙ

    View Slide

  3. id:secondlife

    @hotchpotch

    ؘ໺༞Ұ / Yuichi Tateno

    VP of Enginnering at Cookpad
    —Ruby

    View Slide

  4. COOKPAD

    View Slide

  5. ຖ೔ͷྉཧΛָ͠Έʹ͢Δ͜ͱͰ
    ৺͔ΒͷসإΛ૿΍͢

    View Slide

  6. PC

    View Slide

  7. εϚʔτϑΥϯϒϥ΢βɾΞϓϦ

    View Slide

  8. View Slide

  9. ϑΟʔνϟʔϑΥϯ޲͚

    View Slide

  10. ϢχʔΫϒϥ΢β 3300ສҎ্
    ݄ؒར༻ऀ 2000ສਓҎ্
    Ϩγϐ਺ 150ສ඼Ҏ্

    View Slide

  11. View Slide

  12. View Slide

  13. View Slide

  14. View Slide

  15. View Slide

  16. View Slide

  17. ΤϯδχΞ60ਓ+
    αʔϏε։ൃ

    40ਓ+
    ٕज़෦

    10ਓ+
    Πϯϑϥ෦

    5ਓ

    View Slide

  18. Ϋϥ΢υͷಋೖɾݕ౼

    View Slide

  19. Ϋϥ΢υಋೖݕ౼
    2010೥಄͔ΒɺΫϥ΢υಋೖݕ౼

    όϨϯλΠϯෛՙ໰୊

    2011೥8݄ɺΫϥ΢υ΁Ҡߦ(AWS)

    View Slide

  20. όϨϯλΠϯͷෛՙ
    ฏৗ࣌ͷ໿ೋഒҎ্

    View Slide

  21. Ҏલ͸ɺόϨϯλΠϯʹ͋Θͤͯ
    ෺ཧαʔόΛ૿΍͢

    View Slide

  22. Ϋϥ΢υҠߦޙ͸
    ඞཁʹԠͯ͡ॊೈͳ૿ݮ

    View Slide

  23. ݱࡏɾಠࣗͷ AUTO SCALING Ͱ
    ΞΫηε਺ʹԠࣗ͡ಈ૿Ճ

    View Slide

  24. ݱࡏɾಠࣗͷ AUTO SCALING Ͱ
    ΞΫηε਺ʹԠࣗ͡ಈ૿Ճ
    ຊ൪αʔόʹ৽͍͠ίʔυɾػೳΛσϓϩΠ

    ͦͷঢ়ଶͷεφοϓγϣοτΛ࡞੒

    εφοϓγϣοτ͔ΒɺࣗಈͰαʔόΛ૿΍͠
    ىಈ

    αʔό૿Ճޙ΋ଞαʔόͱಉ͡؀ڥ͕อͯΔ

    View Slide

  25. ࣄྫɿ
    ϛυϧ΢ΣΞͷόʔδϣϯΞοϓ

    View Slide

  26. ϛυϧ΢ΣΞɾ
    ϑϨʔϜϫʔΫͷόʔδϣϯΞοϓ
    Ruby, Rails Λར༻

    ఆظతʹόʔδϣϯΞοϓ͢Δඞཁ


    ݕূΛॏͶͯ΋ʮ΋͔ͨ͠͠Β໰୊
    ൃੜʯͷՄೳੑ

    View Slide

  27. ϛυϧ΢ΣΞɾ
    ϑϨʔϜϫʔΫͷόʔδϣϯΞοϓ
    Ϣʔβ
    Rails 2.3
    proxy

    View Slide

  28. ϛυϧ΢ΣΞɾ
    ϑϨʔϜϫʔΫͷόʔδϣϯΞοϓ
    Ϣʔβ
    Rails 2.3
    Rails 3.0
    proxy
    ৽͍͠αʔό܈Λ࡞੒

    View Slide

  29. ϛυϧ΢ΣΞɾ
    ϑϨʔϜϫʔΫͷόʔδϣϯΞοϓ
    Ϣʔβ
    Rails 2.3
    Rails 3.0
    proxy

    View Slide

  30. ϛυϧ΢ΣΞɾ
    ϑϨʔϜϫʔΫͷόʔδϣϯΞοϓ
    Ϣʔβ
    Rails 3.0
    proxy
    Rails 2.3
    ҆ఆӡ༻ޙ

    ࡟আ

    View Slide

  31. ςετ࣮ߦ଎౓໰୊

    View Slide

  32. ςετ࣮ߦ଎౓໰୊
    ػೳ͕૿͑Δͱɺ෇ਵ͢Δςετίʔ
    υ΋૿͑Δ

    ੲ͸3෼ͰऴΘͬͨςετ΋ɺࠓ΍40෼

    View Slide

  33. ςετ࣮ߦ଎౓໰୊
    ػೳ͕૿͑Δͱɺ෇ਵ͢Δςετ΋૿
    ͑Δ

    ੲ͸3෼ͰऴΘͬͨςετ΋ɺࠓ΍40෼

    View Slide

  34. ςετ࣮ߦ଎౓໰୊
    Ұ೔10ճͷσϓϩΠͰػೳ൓ө

    ʮςετ͕஗ͯ͘σϓϩΠ͕஗ΕΔʂʯ
    Λ๷͕ͳ͍ͱ͍͚ͳ͍

    View Slide

  35. ෼ࢄςετ؀ڥͷߏங
    αʔόͰฒྻ෼ࢄςετ
    Sync & test

    View Slide

  36. ෼ࢄςετ؀ڥͷߏங
    αʔόͰฒྻ෼ࢄςετ
    Sync & test
    10ഒ଎

    View Slide

  37. ςετ࣮ߦ଎౓໰୊
    ςετͷฒྻ࣮ߦ

    ʮ஗ͯ͘ࠔΒͳ͍ʯ࣌͸஗͘

    ʮ଎͘ऴΘͬͯཉ͍͠ʯ࣌͸଎͘

    View Slide

  38. ܧଓతΠϯςάϨʔγϣϯ
    αʔόͷࣗಈ૿ݮ

    View Slide

  39. Bனؒ
    ։ൃ͕੝ΜͳͨΊɺαʔόଟ͘
    σϓϩΠՄೳ

    View Slide

  40. Bனؒ
    ։ൃ͕੝ΜͳͨΊɺαʔόଟ͘
    σϓϩΠՄೳ
    C໷ؒ
    ։ൃ͕੝ΜͰͳ͍ɺαʔόݮΒ͢
    σϓϩΠෆՄ

    View Slide

  41. ։ൃऀ؀ڥͰͷ෼ࢄฒྻςετ
    ։ൃऀϚγϯ αʔόͰฒྻ෼ࢄςετ
    Sync & test

    View Slide

  42. ։ൃऀ؀ڥͰͷ෼ࢄฒྻςετ

    View Slide

  43. ։ൃऀ؀ڥͰͷ෼ࢄฒྻςετ
    Ұਓ͋ͨΓͷ

    Ϧιʔε͕…

    View Slide

  44. ։ൃऀ؀ڥͰͷ෼ࢄฒྻςετ
    ͍ͨͣΒʹ૿΍͢ͱ

    ίετ͕…

    View Slide

  45. ։ൃऀ؀ڥͰͷ෼ࢄฒྻςετ
    ίετ͸Ͱ͖Δ͚ͩ཈͍͑ͨ

    ΋్͠தͰதஅ͞Εͯ΋ɺ͋·Γ໰୊
    ͕ى͜Βͳ͍

    View Slide

  46. View Slide

  47. ”࣌ؒͷ੍໿͕ͳ͘ɺதஅͯ͠΋͔·
    Θͳ͍λεΫͷܭࢉίετΛେ෯ʹ
    ࡟ݮͰ͖·͢”
    ”εϙοτՁ֨͸ଟ͘ͷ৔߹ɺಉ͡
    EC2 ΠϯελϯελΠϓͷΦϯσϚ
    ϯυՁ֨Λେ෯ʹԼճΓ·͢”

    View Slide

  48. ։ൃऀ؀ڥͰͷ෼ࢄฒྻςετ
    ௨ৗ

    Πϯελϯε

    View Slide

  49. ։ൃऀ؀ڥͰͷ෼ࢄฒྻςετ
    ௨ৗ

    Πϯελϯε
    εϙοτ

    Πϯελϯε
    (ςετத)

    View Slide

  50. ༷ʑͳϓϩδΣΫτͰͷςετ

    View Slide

  51. View Slide

  52. ϓϩδΣΫτ͝ͱʹ…
    ࢖ͬͯΔ Ruby, Rails, MySQL ౳ͷࡉ͔͍
    όʔδϣϯࠩҟ

    ϛυϧ΢ΣΞΛ࢖͏ɾ࢖Θͳ͍

    qt-webkit, memcached, redis, solr,
    elasticsearch…

    View Slide

  53. CI αʔόʹʮϥϕϧʯΛ͚ͭΔ

    ϥϕϧʹϚονͨ͠ CI Ͱ࣮ߦ͞ΕΔ

    mysql55 ͷΈඞཁͳΒɺͦͷϥϕϧ
    ͕͍͍ͭͯΔ CI ʹׂΓৼΒΕ࣮ͯ
    ߦ͞ΕΔ

    View Slide

  54. WHITESNAKE
    https://github.com/mrkn/whitesnake

    λάʹԠͨ͡ CI ͷׂΓৼΓ

    Rails ͷςετʹඞཁͳઃఆΛ؆ܿʹ

    View Slide

  55. WHITESNAKE
    https://github.com/mrkn/whitesnake

    λάʹԠͨ͡ CI ͷׂΓৼΓ

    Rails ͷςετʹඞཁͳઃఆΛ؆ܿʹ

    View Slide

  56. ৽نࣄۀల։

    View Slide

  57. ৽نࣄۀల։
    طଘͷࢿ࢈Λੜ͔͢

    ٕज़

    cookpad ͷϢʔβɾσʔλ

    طଘࣄۀͱ৽نࣄۀͷσʔλͷͭͳ͗ࠐΈ

    ૉૣ͍ࣄۀ্ཱͪ͛

    View Slide

  58. Ͳ͏΍ͬͯʁ
    αʔϏεͷ SOA Խ

    ԣల։Ͱ͖Δ൚༻తͳ࢓૊Έ

    View Slide

  59. αʔϏεͷSOAԽ
    Service Oriented Architecture

    αʔϏεࢦ޲ΞʔΩςΫνϟ

    αʔϏε͝ͱʹඞཁͳσʔλΛ API Λ౳ͯ͠΍ΓͱΓ

    OAuth2 + RESTful ͳ API

    Cookpad ID Ͱͷݖݶ؅ཧɾγϯάϧαΠϯΦϯ

    View Slide

  60. ϩάΠϯ
    σʔλऔಘ
    ݕࡧ
    ܾࡁ

    View Slide

  61. COOKPAD ͷσʔλΛଞαʔϏεͰ

    View Slide

  62. ଞαʔϏεͷσʔλΛCOOKPADͰ

    View Slide

  63. αʔϏεࢦ޲ΞʔΩςΫνϟ
    ʮϨʔϧʹࡌͬͨʯந৅Խ

    API ͷ࡞Γํ͸͍͘ΒͰ΋

    ͲͷαʔϏεͰ΋ɺͰ͖Δ͚ͩ؆୯
    ʹɺಉ͡ํ๏Ͱ

    View Slide

  64. Ϩʔϧʹࡌͬͨ SOA Խ
    Garage
    OAuth2 ೝূɾೝՄͷ࣮૷

    ΠϯλʔϑΣΠεΛ࣮૷͢Δ͚ͩͰOK

    ಛఆͷσʔλߏ଄Λग़ྗ

    Pantry
    Garage ͷ API ΫϥΠΞϯτ

    View Slide

  65. Ϩʔϧʹࡌͬͨ SOA Խ
    Garage
    ࣮૷ऀ͸ɺGarage Λ࢖ͬͯ API Λ࣮૷͢Δ͚ͩ

    ଞαʔϏεͰ΋ར༻͞ΕΔ෺͸ͲΜͲΜ API Խ

    Pantry
    ར༻ऀ͸ Pantry Ͱ API Λୟ͚ͩ͘

    View Slide

  66. ࢖͏ٕज़ͷ౷Ұ
    Ruby, Rails, HAML, MySQL, memcached, redis,
    solr …

    Ͱ͖Δ͚ͩ߹ΘͤΔ͜ͱͰɺਂ͍ཧղʹͭ
    ͳ͕Δ & ଞαʔϏεͷཧղ͕ૉૣ͘

    ΋ͪΖΜඞཁʹԠͯ͡৽نٕज़ͷݕূɾಋ
    ೖ͸ߦ͏

    View Slide

  67. ࢖͏ٕज़ͷ౷Ұ
    CPAD
    ΫοΫύου։ൃऀ༻ͷϓϩϏδϣχϯάπʔϧ

    Mac ্ͰඞཁͳҰࣜɺ؀ڥߏங

    $ cpad rails new

    ৽ن Web αʔϏεʹඞཁͳ෺Ұ͕ࣜೖΔ

    Garage, Pantry, ͦͷଞ SSO / ܾࡁͷϥΠϒϥϦ΋

    View Slide

  68. ࢖͏ٕज़ͷ౷Ұ
    OZEN

    Rails ΞϓϦαʔό/DBαʔό౳Λࣗಈߏங

    COOKPAD ͷΞϓϦ։ൃͳඞཁͳ؀ڥ
    ॾʑͷߏங

    “͓હཱͯ” ͯ͘͠ΕΔπʔϧ

    View Slide

  69. ৽نαʔϏεߏஙͷྲྀΕ
    $ cpad rails new

    Pantry, Garage Λ༻͍ͯ։ൃ

    ܧଓతΠϯςάϨʔγϣϯ

    whitesnake ͰαΫͬͱ

    $ ozen create

    ඞཁͳαʔόΛ࡞੒ɻσϓϩΠͯ͠ݕূ

    View Slide

  70. ৽نࣄۀల։
    طଘͷࢿ࢈Λੜ͔͢

    ٕज़

    cookpad ͷϢʔβɾσʔλ

    طଘࣄۀͱ৽نࣄۀͷσʔλͷͭͳ͗ࠐΈ

    ૉૣ͍ࣄۀ্ཱͪ͛

    View Slide

  71. ৽نࣄۀల։
    طଘͷࢿ࢈Λੜ͔͢

    ٕज़

    cookpad ͷϢʔβɾσʔλ

    طଘࣄۀͱ৽نࣄۀͷσʔλͷͭͳ͗ࠐΈ

    ૉૣ͍ࣄۀ্ཱͪ͛
    Pantry, Garage Ͱ

    SOA ద༻
    cpad, ozen Ͱ

    ؀ڥߏங

    View Slide

  72. αʔόͷ؀ڥߏங

    View Slide

  73. αʔό؀ڥͷมߋ
    Puppet ͰαʔόΛઃఆ

    EC2 ͷλάͰద༻͢ΔઃఆΛมߋ

    λάྫ: app-cookpad-rails

    cookpad ༻ͷ rails ΞϓϦέʔγϣϯ

    View Slide

  74. ։ൃऀʹΑΔαʔόઃఆมߋ
    GitHub ʹΑΔίʔυϨϏϡʔ

    ͢΂ͯͷίʔυΛίʔυϨϏϡʔ

    αʔό؀ڥ΋ίʔυϨϏϡʔ

    View Slide

  75. ։ൃऀʹΑΔมߋ
    GitHub ʹΑΔίʔυϨϏϡʔ

    ͢΂ͯͷίʔυΛίʔυϨϏϡʔ

    αʔό؀ڥ΋ίʔυϨϏϡʔ

    View Slide

  76. ։ൃऀʹΑΔมߋ
    GitHub ʹΑΔίʔυϨϏϡʔ

    ͢΂ͯͷίʔυΛίʔυϨϏϡʔ

    αʔό؀ڥ΋ίʔυϨϏϡʔ

    View Slide

  77. αʔό؀ڥ΋ίʔυϨϏϡʔ
    ։ൃऀ͸ࣗ༝ʹ؀ڥߏஙͰ͖Δ

    puppet Λ༻͍ͯઃఆ

    ΠϯϑϥνʔϜ͸มߋ఺Λ͔ͬ͠Γͱཧղ͠ڐՄ
    Ͱ͖Δ

    ໰୊఺ɾݒ೦఺͕͋Ε͹։ൃऀʹϑΟʔυόοΫ

    View Slide

  78. αʔό؀ڥ΋ίʔυϨϏϡʔ
    ։ൃऀ͸ࣗ༝ʹ؀ڥߏஙͰ͖Δ

    puppet Λ༻͍ͯઃఆ

    ΠϯϑϥνʔϜ͸มߋ఺Λ͔ͬ͠Γͱཧղ͠ OK
    Ͱ͖Δ

    ໰୊఺ɾݒ೦఺͕͋Ε͹։ൃऀʹϑΟʔυόοΫ
    DevOps

    View Slide

  79. Ϋϥ΢υΛ࢖ͬͨ
    Ϣʔβ޲͚αʔϏε։ൃͷ໘ന͞
    ?

    View Slide

  80. ΞΫηεʹԠͨ͡αʔό୆਺ͷ
    ௐ੔

    CI ͷঢ়ଶʹԠͨ͡αʔόͷௐ
    ੔ɾαʔόͷ࡞੒

    εϙοτΠϯελϯεΛ࢖ͬͨɺ
    ҆Ձͳςετ؀ڥͷߏங

    cpad / ozen Λ࢖ͬͨ SOA Ͱͷ
    αʔϏεల։

    View Slide

  81. ΞΫηεʹԠͨ͡αʔό୆਺ͷ
    ௐ੔

    CI ͷঢ়ଶʹԠͨ͡αʔόͷௐ
    ੔ɾαʔόͷ࡞੒

    εϙοτΠϯελϯεΛ࢖ͬͨɺ
    ҆Ձͳςετ؀ڥͷߏங

    cpad / ozen Λ࢖ͬͨ SOA Ͱͷ
    αʔϏεల։
    ͢΂ͯιϑτ΢ΣΞͰ

    هड़Ͱ͖Δ

    View Slide

  82. ΞΫηεʹԠͨ͡αʔό୆਺ͷ
    ௐ੔

    CI ͷঢ়ଶʹԠͨ͡αʔόͷௐ
    ੔ɾαʔόͷ࡞੒

    εϙοτΠϯελϯεΛ࢖ͬͨɺ
    ҆Ձͳςετ؀ڥͷߏங

    cpad / ozen Λ࢖ͬͨ SOA Ͱͷ
    αʔϏεల։
    ✓ αʔόͷىಈɾ࡟আ

    ✓ αʔό؀ڥͷઃఆ

    ✓ ͦͷଞɺAPI Λ௨ͯ͡΄
    ͱΜͲ͔࣮ߦՄೳ

    View Slide

  83. ΞΫηεʹԠͨ͡αʔό୆਺ͷ
    ௐ੔

    CI ͷঢ়ଶʹԠͨ͡αʔόͷௐ
    ੔ɾαʔόͷ࡞੒

    εϙοτΠϯελϯεΛ࢖ͬͨɺ
    ҆Ձͳςετ؀ڥͷߏங

    cpad / ozen Λ࢖ͬͨ SOA Ͱͷ
    αʔϏεల։
    ✓ʮίʔυʯͷ࠶ར༻

    ɹ㾎 αʔό؀ڥɾઃఆͷهड़

    ɹ㾎 εϙοτΠϯελϯε࢖ͬͨ෼ࢄαʔό
    ΛɺCI ͔Β΋ར༻

    View Slide

  84. ΞΫηεʹԠͨ͡αʔό୆਺ͷ
    ௐ੔

    CI ͷঢ়ଶʹԠͨ͡αʔόͷௐ
    ੔ɾαʔόͷ࡞੒

    εϙοτΠϯελϯεΛ࢖ͬͨɺ
    ҆Ձͳςετ؀ڥͷߏங

    cpad / ozen Λ࢖ͬͨ SOA Ͱͷ
    αʔϏεల։
    ։ൃऀ͕

    ΑΓ༷ʑͳ͜ͱ͕

    Ͱ͖ΔΑ͏ʹʂʂʂ

    View Slide

  85. ΞΫηεʹԠͨ͡αʔό୆਺ͷ
    ௐ੔

    CI ͷঢ়ଶʹԠͨ͡αʔόͷௐ
    ੔ɾαʔόͷ࡞੒

    εϙοτΠϯελϯεΛ࢖ͬͨɺ
    ҆Ձͳςετ؀ڥͷߏங

    cpad / ozen Λ࢖ͬͨ SOA Ͱͷ
    αʔϏεల։
    DevOps

    View Slide

  86. ͓ΘΓʹ
    Ϋϥ΢υ͕ιϑτ΢ΣΞͷߟ͑ํ

    ͍··Ͱ೉͔ͬͨ͠ɺΠϯϑϥͷ੍ޚ΋ιϑτ΢Σ
    Ξͱͯ͠هड़Ͱ͖Δ

    ϢʔβʹՁ஋Λಧ͚ΔͨΊͷબ୒ࢶ͕૿͑ͨ

    Ϋϥ΢υΛར༻ͨ͠ɺ༷ʑͳ͜ͱʹ௅ઓͰ͖ɺ։
    ൃ͕ΑΓ໘ന͘!!

    View Slide

  87. ఏڙ

    View Slide