Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

ఏڙ

Slide 3

Slide 3 text

id:secondlife @hotchpotch ؘ໺༞Ұ / Yuichi Tateno VP of Enginnering at Cookpad —Ruby

Slide 4

Slide 4 text

COOKPAD

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

PC

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

No content

Slide 9

Slide 9 text

ϑΟʔνϟʔϑΥϯ޲͚

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

No content

Slide 12

Slide 12 text

No content

Slide 13

Slide 13 text

No content

Slide 14

Slide 14 text

No content

Slide 15

Slide 15 text

No content

Slide 16

Slide 16 text

No content

Slide 17

Slide 17 text

ΤϯδχΞ60ਓ+ αʔϏε։ൃ 40ਓ+ ٕज़෦ 10ਓ+ Πϯϑϥ෦ 5ਓ

Slide 18

Slide 18 text

Ϋϥ΢υͷಋೖɾݕ౼

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

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

Slide 26

Slide 26 text

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

Slide 27

Slide 27 text

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

Slide 28

Slide 28 text

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

Slide 29

Slide 29 text

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

Slide 30

Slide 30 text

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

Slide 31

Slide 31 text

ςετ࣮ߦ଎౓໰୊

Slide 32

Slide 32 text

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

Slide 33

Slide 33 text

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

Slide 34

Slide 34 text

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

Slide 35

Slide 35 text

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

Slide 36

Slide 36 text

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

Slide 37

Slide 37 text

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

Slide 38

Slide 38 text

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

Slide 39

Slide 39 text

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

Slide 40

Slide 40 text

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

Slide 41

Slide 41 text

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

Slide 42

Slide 42 text

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

Slide 43

Slide 43 text

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

Slide 44

Slide 44 text

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

Slide 45

Slide 45 text

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

Slide 46

Slide 46 text

No content

Slide 47

Slide 47 text

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

Slide 48

Slide 48 text

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

Slide 49

Slide 49 text

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

Slide 50

Slide 50 text

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

Slide 51

Slide 51 text

No content

Slide 52

Slide 52 text

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

Slide 53

Slide 53 text

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

Slide 54

Slide 54 text

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

Slide 55

Slide 55 text

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

Slide 56

Slide 56 text

৽نࣄۀల։

Slide 57

Slide 57 text

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

Slide 58

Slide 58 text

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

Slide 59

Slide 59 text

αʔϏεͷSOAԽ Service Oriented Architecture αʔϏεࢦ޲ΞʔΩςΫνϟ αʔϏε͝ͱʹඞཁͳσʔλΛ API Λ౳ͯ͠΍ΓͱΓ OAuth2 + RESTful ͳ API Cookpad ID Ͱͷݖݶ؅ཧɾγϯάϧαΠϯΦϯ

Slide 60

Slide 60 text

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

Slide 61

Slide 61 text

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

Slide 62

Slide 62 text

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

Slide 63

Slide 63 text

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

Slide 64

Slide 64 text

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

Slide 65

Slide 65 text

Ϩʔϧʹࡌͬͨ SOA Խ Garage ࣮૷ऀ͸ɺGarage Λ࢖ͬͯ API Λ࣮૷͢Δ͚ͩ ଞαʔϏεͰ΋ར༻͞ΕΔ෺͸ͲΜͲΜ API Խ Pantry ར༻ऀ͸ Pantry Ͱ API Λୟ͚ͩ͘

Slide 66

Slide 66 text

࢖͏ٕज़ͷ౷Ұ Ruby, Rails, HAML, MySQL, memcached, redis, solr … Ͱ͖Δ͚ͩ߹ΘͤΔ͜ͱͰɺਂ͍ཧղʹͭ ͳ͕Δ & ଞαʔϏεͷཧղ͕ૉૣ͘ ΋ͪΖΜඞཁʹԠͯ͡৽نٕज़ͷݕূɾಋ ೖ͸ߦ͏

Slide 67

Slide 67 text

࢖͏ٕज़ͷ౷Ұ CPAD ΫοΫύου։ൃऀ༻ͷϓϩϏδϣχϯάπʔϧ Mac ্ͰඞཁͳҰࣜɺ؀ڥߏங $ cpad rails new ৽ن Web αʔϏεʹඞཁͳ෺Ұ͕ࣜೖΔ Garage, Pantry, ͦͷଞ SSO / ܾࡁͷϥΠϒϥϦ΋

Slide 68

Slide 68 text

࢖͏ٕज़ͷ౷Ұ OZEN Rails ΞϓϦαʔό/DBαʔό౳Λࣗಈߏங COOKPAD ͷΞϓϦ։ൃͳඞཁͳ؀ڥ ॾʑͷߏங “͓હཱͯ” ͯ͘͠ΕΔπʔϧ

Slide 69

Slide 69 text

৽نαʔϏεߏஙͷྲྀΕ $ cpad rails new Pantry, Garage Λ༻͍ͯ։ൃ ܧଓతΠϯςάϨʔγϣϯ whitesnake ͰαΫͬͱ $ ozen create ඞཁͳαʔόΛ࡞੒ɻσϓϩΠͯ͠ݕূ

Slide 70

Slide 70 text

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

Slide 71

Slide 71 text

৽نࣄۀల։ طଘͷࢿ࢈Λੜ͔͢ ٕज़ cookpad ͷϢʔβɾσʔλ طଘࣄۀͱ৽نࣄۀͷσʔλͷͭͳ͗ࠐΈ ૉૣ͍ࣄۀ্ཱͪ͛ Pantry, Garage Ͱ SOA ద༻ cpad, ozen Ͱ ؀ڥߏங

Slide 72

Slide 72 text

αʔόͷ؀ڥߏங

Slide 73

Slide 73 text

αʔό؀ڥͷมߋ Puppet ͰαʔόΛઃఆ EC2 ͷλάͰద༻͢ΔઃఆΛมߋ λάྫ: app-cookpad-rails cookpad ༻ͷ rails ΞϓϦέʔγϣϯ

Slide 74

Slide 74 text

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

Slide 75

Slide 75 text

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

Slide 76

Slide 76 text

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

Slide 77

Slide 77 text

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

Slide 78

Slide 78 text

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

Slide 79

Slide 79 text

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

Slide 80

Slide 80 text

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

Slide 81

Slide 81 text

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

Slide 82

Slide 82 text

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

Slide 83

Slide 83 text

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

Slide 84

Slide 84 text

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

Slide 85

Slide 85 text

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

Slide 86

Slide 86 text

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

Slide 87

Slide 87 text

ఏڙ