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

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

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

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

2997ec7879942bd0415690c85731e328?s=128

Yuichi Tateno

November 29, 2013
Tweet

Transcript

  1. Ϋϥ΢υΛ࢖ͬͨ Ϣʔβ޲͚αʔϏε։ൃͷ໘ന͞ ΫοΫύου ؘ໺༞Ұ 2013/11/29

  2. ఏڙ

  3. id:secondlife @hotchpotch ؘ໺༞Ұ / Yuichi Tateno VP of Enginnering at

    Cookpad —Ruby
  4. COOKPAD

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

  6. PC

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

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

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

  11. None
  12. None
  13. None
  14. None
  15. None
  16. None
  17. ΤϯδχΞ60ਓ+ αʔϏε։ൃ 40ਓ+ ٕज़෦ 10ਓ+ Πϯϑϥ෦ 5ਓ

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

  19. Ϋϥ΢υಋೖݕ౼ 2010೥಄͔ΒɺΫϥ΢υಋೖݕ౼ όϨϯλΠϯෛՙ໰୊ 2011೥8݄ɺΫϥ΢υ΁Ҡߦ(AWS)

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

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

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

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

  24. ݱࡏɾಠࣗͷ AUTO SCALING Ͱ ΞΫηε਺ʹԠࣗ͡ಈ૿Ճ ຊ൪αʔόʹ৽͍͠ίʔυɾػೳΛσϓϩΠ ͦͷঢ়ଶͷεφοϓγϣοτΛ࡞੒ εφοϓγϣοτ͔ΒɺࣗಈͰαʔόΛ૿΍͠ ىಈ αʔό૿Ճޙ΋ଞαʔόͱಉ͡؀ڥ͕อͯΔ

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

  26. ϛυϧ΢ΣΞɾ ϑϨʔϜϫʔΫͷόʔδϣϯΞοϓ Ruby, Rails Λར༻ ఆظతʹόʔδϣϯΞοϓ͢Δඞཁ ੑ ݕূΛॏͶͯ΋ʮ΋͔ͨ͠͠Β໰୊ ൃੜʯͷՄೳੑ

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

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

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

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

  31. ςετ࣮ߦ଎౓໰୊

  32. ςετ࣮ߦ଎౓໰୊ ػೳ͕૿͑Δͱɺ෇ਵ͢Δςετίʔ υ΋૿͑Δ ੲ͸3෼ͰऴΘͬͨςετ΋ɺࠓ΍40෼ …

  33. ςετ࣮ߦ଎౓໰୊ ػೳ͕૿͑Δͱɺ෇ਵ͢Δςετ΋૿ ͑Δ ੲ͸3෼ͰऴΘͬͨςετ΋ɺࠓ΍40෼ …

  34. ςετ࣮ߦ଎౓໰୊ Ұ೔10ճͷσϓϩΠͰػೳ൓ө ʮςετ͕஗ͯ͘σϓϩΠ͕஗ΕΔʂʯ Λ๷͕ͳ͍ͱ͍͚ͳ͍

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

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

  37. ςετ࣮ߦ଎౓໰୊ ςετͷฒྻ࣮ߦ ʮ஗ͯ͘ࠔΒͳ͍ʯ࣌͸஗͘ ʮ଎͘ऴΘͬͯཉ͍͠ʯ࣌͸଎͘

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

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

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

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

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

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

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

  45. ։ൃऀ؀ڥͰͷ෼ࢄฒྻςετ ίετ͸Ͱ͖Δ͚ͩ཈͍͑ͨ ΋్͠தͰதஅ͞Εͯ΋ɺ͋·Γ໰୊ ͕ى͜Βͳ͍

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

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

  49. ։ൃऀ؀ڥͰͷ෼ࢄฒྻςετ ௨ৗ Πϯελϯε εϙοτ Πϯελϯε (ςετத)

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

  51. None
  52. ϓϩδΣΫτ͝ͱʹ… ࢖ͬͯΔ Ruby, Rails, MySQL ౳ͷࡉ͔͍ όʔδϣϯࠩҟ ϛυϧ΢ΣΞΛ࢖͏ɾ࢖Θͳ͍ qt-webkit, memcached,

    redis, solr, elasticsearch…
  53. CI αʔόʹʮϥϕϧʯΛ͚ͭΔ ϥϕϧʹϚονͨ͠ CI Ͱ࣮ߦ͞ΕΔ mysql55 ͷΈඞཁͳΒɺͦͷϥϕϧ ͕͍͍ͭͯΔ CI ʹׂΓৼΒΕ࣮ͯ

    ߦ͞ΕΔ
  54. WHITESNAKE https://github.com/mrkn/whitesnake λάʹԠͨ͡ CI ͷׂΓৼΓ Rails ͷςετʹඞཁͳઃఆΛ؆ܿʹ

  55. WHITESNAKE https://github.com/mrkn/whitesnake λάʹԠͨ͡ CI ͷׂΓৼΓ Rails ͷςετʹඞཁͳઃఆΛ؆ܿʹ

  56. ৽نࣄۀల։

  57. ৽نࣄۀల։ طଘͷࢿ࢈Λੜ͔͢ ٕज़ cookpad ͷϢʔβɾσʔλ طଘࣄۀͱ৽نࣄۀͷσʔλͷͭͳ͗ࠐΈ ૉૣ͍ࣄۀ্ཱͪ͛

  58. Ͳ͏΍ͬͯʁ αʔϏεͷ SOA Խ ԣల։Ͱ͖Δ൚༻తͳ࢓૊Έ

  59. αʔϏεͷSOAԽ Service Oriented Architecture αʔϏεࢦ޲ΞʔΩςΫνϟ αʔϏε͝ͱʹඞཁͳσʔλΛ API Λ౳ͯ͠΍ΓͱΓ OAuth2 +

    RESTful ͳ API Cookpad ID Ͱͷݖݶ؅ཧɾγϯάϧαΠϯΦϯ
  60. ϩάΠϯ σʔλऔಘ ݕࡧ ܾࡁ

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

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

  63. αʔϏεࢦ޲ΞʔΩςΫνϟ ʮϨʔϧʹࡌͬͨʯந৅Խ API ͷ࡞Γํ͸͍͘ΒͰ΋ ͲͷαʔϏεͰ΋ɺͰ͖Δ͚ͩ؆୯ ʹɺಉ͡ํ๏Ͱ

  64. Ϩʔϧʹࡌͬͨ SOA Խ Garage OAuth2 ೝূɾೝՄͷ࣮૷ ΠϯλʔϑΣΠεΛ࣮૷͢Δ͚ͩͰOK ಛఆͷσʔλߏ଄Λग़ྗ Pantry Garage

    ͷ API ΫϥΠΞϯτ
  65. Ϩʔϧʹࡌͬͨ SOA Խ Garage ࣮૷ऀ͸ɺGarage Λ࢖ͬͯ API Λ࣮૷͢Δ͚ͩ ଞαʔϏεͰ΋ར༻͞ΕΔ෺͸ͲΜͲΜ API

    Խ Pantry ར༻ऀ͸ Pantry Ͱ API Λୟ͚ͩ͘
  66. ࢖͏ٕज़ͷ౷Ұ Ruby, Rails, HAML, MySQL, memcached, redis, solr … Ͱ͖Δ͚ͩ߹ΘͤΔ͜ͱͰɺਂ͍ཧղʹͭ

    ͳ͕Δ & ଞαʔϏεͷཧղ͕ૉૣ͘ ΋ͪΖΜඞཁʹԠͯ͡৽نٕज़ͷݕূɾಋ ೖ͸ߦ͏
  67. ࢖͏ٕज़ͷ౷Ұ CPAD ΫοΫύου։ൃऀ༻ͷϓϩϏδϣχϯάπʔϧ Mac ্ͰඞཁͳҰࣜɺ؀ڥߏங $ cpad rails new ৽ن

    Web αʔϏεʹඞཁͳ෺Ұ͕ࣜೖΔ Garage, Pantry, ͦͷଞ SSO / ܾࡁͷϥΠϒϥϦ΋
  68. ࢖͏ٕज़ͷ౷Ұ OZEN Rails ΞϓϦαʔό/DBαʔό౳Λࣗಈߏங COOKPAD ͷΞϓϦ։ൃͳඞཁͳ؀ڥ ॾʑͷߏங “͓હཱͯ” ͯ͘͠ΕΔπʔϧ

  69. ৽نαʔϏεߏஙͷྲྀΕ $ cpad rails new Pantry, Garage Λ༻͍ͯ։ൃ ܧଓతΠϯςάϨʔγϣϯ whitesnake

    ͰαΫͬͱ $ ozen create ඞཁͳαʔόΛ࡞੒ɻσϓϩΠͯ͠ݕূ
  70. ৽نࣄۀల։ طଘͷࢿ࢈Λੜ͔͢ ٕज़ cookpad ͷϢʔβɾσʔλ طଘࣄۀͱ৽نࣄۀͷσʔλͷͭͳ͗ࠐΈ ૉૣ͍ࣄۀ্ཱͪ͛

  71. ৽نࣄۀల։ طଘͷࢿ࢈Λੜ͔͢ ٕज़ cookpad ͷϢʔβɾσʔλ طଘࣄۀͱ৽نࣄۀͷσʔλͷͭͳ͗ࠐΈ ૉૣ͍ࣄۀ্ཱͪ͛ Pantry, Garage Ͱ

    SOA ద༻ cpad, ozen Ͱ ؀ڥߏங
  72. αʔόͷ؀ڥߏங

  73. αʔό؀ڥͷมߋ Puppet ͰαʔόΛઃఆ EC2 ͷλάͰద༻͢ΔઃఆΛมߋ λάྫ: app-cookpad-rails cookpad ༻ͷ rails

    ΞϓϦέʔγϣϯ
  74. ։ൃऀʹΑΔαʔόઃఆมߋ GitHub ʹΑΔίʔυϨϏϡʔ ͢΂ͯͷίʔυΛίʔυϨϏϡʔ αʔό؀ڥ΋ίʔυϨϏϡʔ

  75. ։ൃऀʹΑΔมߋ GitHub ʹΑΔίʔυϨϏϡʔ ͢΂ͯͷίʔυΛίʔυϨϏϡʔ αʔό؀ڥ΋ίʔυϨϏϡʔ

  76. ։ൃऀʹΑΔมߋ GitHub ʹΑΔίʔυϨϏϡʔ ͢΂ͯͷίʔυΛίʔυϨϏϡʔ αʔό؀ڥ΋ίʔυϨϏϡʔ

  77. αʔό؀ڥ΋ίʔυϨϏϡʔ ։ൃऀ͸ࣗ༝ʹ؀ڥߏஙͰ͖Δ puppet Λ༻͍ͯઃఆ ΠϯϑϥνʔϜ͸มߋ఺Λ͔ͬ͠Γͱཧղ͠ڐՄ Ͱ͖Δ ໰୊఺ɾݒ೦఺͕͋Ε͹։ൃऀʹϑΟʔυόοΫ

  78. αʔό؀ڥ΋ίʔυϨϏϡʔ ։ൃऀ͸ࣗ༝ʹ؀ڥߏஙͰ͖Δ puppet Λ༻͍ͯઃఆ ΠϯϑϥνʔϜ͸มߋ఺Λ͔ͬ͠Γͱཧղ͠ OK Ͱ͖Δ ໰୊఺ɾݒ೦఺͕͋Ε͹։ൃऀʹϑΟʔυόοΫ DevOps

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

  80. ΞΫηεʹԠͨ͡αʔό୆਺ͷ ௐ੔ CI ͷঢ়ଶʹԠͨ͡αʔόͷௐ ੔ɾαʔόͷ࡞੒ εϙοτΠϯελϯεΛ࢖ͬͨɺ ҆Ձͳςετ؀ڥͷߏங cpad / ozen

    Λ࢖ͬͨ SOA Ͱͷ αʔϏεల։
  81. ΞΫηεʹԠͨ͡αʔό୆਺ͷ ௐ੔ CI ͷঢ়ଶʹԠͨ͡αʔόͷௐ ੔ɾαʔόͷ࡞੒ εϙοτΠϯελϯεΛ࢖ͬͨɺ ҆Ձͳςετ؀ڥͷߏங cpad / ozen

    Λ࢖ͬͨ SOA Ͱͷ αʔϏεల։ ͢΂ͯιϑτ΢ΣΞͰ هड़Ͱ͖Δ
  82. ΞΫηεʹԠͨ͡αʔό୆਺ͷ ௐ੔ CI ͷঢ়ଶʹԠͨ͡αʔόͷௐ ੔ɾαʔόͷ࡞੒ εϙοτΠϯελϯεΛ࢖ͬͨɺ ҆Ձͳςετ؀ڥͷߏங cpad / ozen

    Λ࢖ͬͨ SOA Ͱͷ αʔϏεల։ ✓ αʔόͷىಈɾ࡟আ ✓ αʔό؀ڥͷઃఆ ✓ ͦͷଞɺAPI Λ௨ͯ͡΄ ͱΜͲ͔࣮ߦՄೳ
  83. ΞΫηεʹԠͨ͡αʔό୆਺ͷ ௐ੔ CI ͷঢ়ଶʹԠͨ͡αʔόͷௐ ੔ɾαʔόͷ࡞੒ εϙοτΠϯελϯεΛ࢖ͬͨɺ ҆Ձͳςετ؀ڥͷߏங cpad / ozen

    Λ࢖ͬͨ SOA Ͱͷ αʔϏεల։ ✓ʮίʔυʯͷ࠶ར༻ ɹ㾎 αʔό؀ڥɾઃఆͷهड़ ɹ㾎 εϙοτΠϯελϯε࢖ͬͨ෼ࢄαʔό ΛɺCI ͔Β΋ར༻
  84. ΞΫηεʹԠͨ͡αʔό୆਺ͷ ௐ੔ CI ͷঢ়ଶʹԠͨ͡αʔόͷௐ ੔ɾαʔόͷ࡞੒ εϙοτΠϯελϯεΛ࢖ͬͨɺ ҆Ձͳςετ؀ڥͷߏங cpad / ozen

    Λ࢖ͬͨ SOA Ͱͷ αʔϏεల։ ։ൃऀ͕ ΑΓ༷ʑͳ͜ͱ͕ Ͱ͖ΔΑ͏ʹʂʂʂ
  85. ΞΫηεʹԠͨ͡αʔό୆਺ͷ ௐ੔ CI ͷঢ়ଶʹԠͨ͡αʔόͷௐ ੔ɾαʔόͷ࡞੒ εϙοτΠϯελϯεΛ࢖ͬͨɺ ҆Ձͳςετ؀ڥͷߏங cpad / ozen

    Λ࢖ͬͨ SOA Ͱͷ αʔϏεల։ DevOps
  86. ͓ΘΓʹ Ϋϥ΢υ͕ιϑτ΢ΣΞͷߟ͑ํ ͍··Ͱ೉͔ͬͨ͠ɺΠϯϑϥͷ੍ޚ΋ιϑτ΢Σ Ξͱͯ͠هड़Ͱ͖Δ ϢʔβʹՁ஋Λಧ͚ΔͨΊͷબ୒ࢶ͕૿͑ͨ Ϋϥ΢υΛར༻ͨ͠ɺ༷ʑͳ͜ͱʹ௅ઓͰ͖ɺ։ ൃ͕ΑΓ໘ന͘!!

  87. ఏڙ