Slide 1

Slide 1 text

Mobile First Development at COOKPAD Bakusoku Iterations Tokyo #Deploygate 2014/5/29 by FUJI Goro

Slide 2

Slide 2 text

ࣗݾ঺հ - FUJI Goro (gfx) • Software Engineer at COOKPAD • iOS/Android྆ํ΍Δ • ϞόΠϧΞϓϦͷ։ൃޮ཰Λ্͛Δͷ͕ओͳ࢓ࣄ • ௚ۙͩͱϥΠϒϥϦͷ։ൃ͕ϝΠϯ • ੜ࢈ੑ͋͛ͯ͜ˢˢ

Slide 3

Slide 3 text

No content

Slide 4

Slide 4 text

COOKPADͷϞόΠϧΞϓϦ

Slide 5

Slide 5 text

No content

Slide 6

Slide 6 text

ͦͷଞ • μΠΤοτࢧԉΞϓϦ͕͍͔ͭ͘ • μΠΤοτ 80 / μΠΤοτͻͱΓͿΜ • ݕࡧʹಛԽͨ͠ΞϓϦ͕͍͔ͭ͘ • ುύου / Ωϟϕπύου • ͞Βʹଟ͘ͷΞϓϦΛϦϦʔε༧ఆ

Slide 7

Slide 7 text

Mobile First Development

Slide 8

Slide 8 text

ϢʔβʔϑΝʔετͳ։ൃ • ϢʔβʔʹͱͬͯͷՁ஋Λ࠷େʹ͍ͨ͠ • ΞϓϦͷվળΛߴ଎ʹਐΊΔ • ػೳΛ࢖͑ͳ͍࣌ؒΛݮΒ͢ • ҆ఆͨ͠։ൃαΠΫϧͷཱ͕֬ෆՄܽ

Slide 9

Slide 9 text

։ൃମ੍

Slide 10

Slide 10 text

։ൃମ੍ɿશମߏ੒ • COOKPADΞϓϦ • iOS: 3ਓ • Android: 4~6ਓ • ͦͷଞͷΞϓϦ • جຊ1ਓʴඞཁʹԠͯ͡αϙʔτ

Slide 11

Slide 11 text

։ൃମ੍ɿνʔϜମ੍ • ϞόΠϧϑΝʔετࣨɿίΞνʔϜ਺ਓ • ֤αʔϏεͷ෦ॺͰ৽ػೳͷ࣮૷ɿ1ਓ~ • e.g. ϓϨϛΞϜαʔϏε, ಛച৘ใ • ҰͭͷΞϓϦΛෳ਺ͷ෦ॺͰڠௐͯ͠։ൃ

Slide 12

Slide 12 text

։ൃ؀ڥ • Android • Android Studio & Gradle • iOS • Xcode • AppCode (3.0 supports Storyboard!)

Slide 13

Slide 13 text

Mobile Apps vs. Web Apps • cookpad.com͸΢ΣϒΞϓϦ • Ұ೔ʹ਺ճσϓϩΠΛߦ͏ • සൟʹσϓϩΠ͠໰୊͕͋Ε͹ϩʔϧόοΫ͢Δ • master͸ৗʹdeployՄೳͳঢ়ଶʹ͓ͯ͘͠ • ҰํMobile App͸ؾܰʹϩʔϧόοΫͰ͖ͳ͍

Slide 14

Slide 14 text

Mobile AppsͷϦϦʔεαΠΫϧ • ϩʔϧόοΫͰ͖ͳ͍ͷͰ৻ॏʹ͍ͯ͠Δ • ϦϦʔε͝ͱͷ։ൃظؒ͸໿2~3िؒ • ৽ػೳ͸Ϛʔδલʹಈ࡞֬ೝ͢Δ • QAظؒ͸3೔ؒ

Slide 15

Slide 15 text

VCSͱͷ෇͖߹͍ํ

Slide 16

Slide 16 text

VCSͱͷ෇͖߹͍ํ • GitHub EnterpriseΛར༻ • masterʹೖΕΔίʔυ͸ඞͣPull RequestΛ ͠ɺνʔϜϝϯόʔʹΑΔϨϏϡʔΛඞਢʹ ͍ͯ͠Δ • UIʹؔΘΔมߋ͸σβΠφʔʹΑΔϨϏϡʔ ΋ඞਢʹ͍ͯ͠Δ

Slide 17

Slide 17 text

gitͷϒϥϯνϯάϞσϧ • ࠷ॳ͸webͱಉ͡ελΠϧͰӡ༻͍ͯͨ͠ • ͍ΘΏΔgithub flow • P-RΛϚʔδ͢Δ·͑ʹݕূΛ͢·ͤΔ • ඞཁͳػೳΛ࣮૷͓͑ͨ͠ΒϦϦʔε

Slide 18

Slide 18 text

೔ࠒ͔Β։ൃ൛Λ࢖͍ͬͯΔ͠ɺϚʔδલ ʹݕূ͸͍ͯ͠Δ͔Β͜ΕͰେৎ෉…ʂ

Slide 19

Slide 19 text

ʊਓਓਓਓਓਓਓʊ ʼɹಥવͷো֐ɹʻ ʉY^Y^Y^Y^Y^Yʉ

Slide 20

Slide 20 text

ͦͯ࣌͠͸ྲྀΕ…

Slide 21

Slide 21 text

ݱࡏͷϒϥϯνϯάεϞσϧ • ίʔυϑϦʔζˍQAظؒΛઃ͚ͨ • “A successful git branching model” (git-flow) ʹ͍ۙϒϥϯνϯάϞσϧʹͳͬͨ • ͨͩ͠git-flowͱҟͳΓdevelop͸࢖Θͳ͍

Slide 22

Slide 22 text

$PEF 'SFF[F 3$ 'FBUVSF GPS NBTUFS GFBUVSF SFMFBTF

Slide 23

Slide 23 text

ݱࡏͷworkflow • ඞཁͳػೳΛ࣮૷͓͑ͨ͠ΒίʔυϑϦʔζʢCFʣͱ͢Δ • CFͨ͠ΒϦϦʔεީิʢRCʣϒϥϯνΛͭ͘Δ • RC͕ผΕͨΒmaster͸ߋʹ࣍ͷόʔδϣϯͷͨΊͷम ਖ਼͕Ϛʔδ͞Ε͏Δ • RCϒϥϯνʹ͸ඞཁͳόάमਖ਼ΛೖΕΔ • ϦϦʔεͨ͠ΒRCϒϥϯνΛmasterʹϚʔδ͢Δ

Slide 24

Slide 24 text

՝୊ • iOS/AndroidνʔϜ֎ͱͷڠௐ͕೉͍͠ • ϒϥϯνϯάϞσϧͷڞ༗΋ෆे෼

Slide 25

Slide 25 text

։ൃ൛ΞϓϦͷ഑෍ TestFlight

Slide 26

Slide 26 text

جຊతʹJenkinsͰࣗಈԽ

Slide 27

Slide 27 text

TestFlight for iOS • AutoFlight ʹΑΔࣗಈ഑෇Λߦ͍ͬͯΔ • GitHub͔ΒͷWebHook௨஌ΛAutoFlightProxy͕ड͚ Δ • AutoFlightProxy͕JenkinsΛΩοΫ • Jenkins͕Ϗϧυͯ͠TestFlightʹΞοϓϩʔυ • ϒϥϯνʹΑͬͯ഑෇ઌͷνʔϜΛࣗಈతʹબͿ

Slide 28

Slide 28 text

deploygate for Android • masterʹίϛοτ͕͋ͬͨΒJenkinsΛΩοΫ • Ϗϧυˍςετ • ςετ͸GenyMotionͰߦ͍ͬͯΔ • deploygateʹ഑৴͢Δ • deploygateΞΧ΢ϯτ͸GoogleεϓϨουγʔ

Slide 29

Slide 29 text

-PDBM.BDIJOF QVTI LJDL UFTU CVJME VQMPBE

Slide 30

Slide 30 text

iOS/Androidڞ௨ • masterʹ͋ΔίϛοτΛࣗಈ഑৴ • ։ൃ൛ΞΠίϯΛϦϦʔε൛ͱม͑ͯΘ͔Γ΍͘͢ • ։ൃ൛͸ID(bundle id / package name)Λม͑ͯϦ Ϧʔε൛ͱڞଘͰ͖ΔΑ͏ʹ • ഑৴͞ΕΔ։ൃ൛͸production serverʹͭͳ͕Δ ͷͰνʔϜϝϯόʔҎ֎΋ීஈ࢖͍Ͱ͖Δ

Slide 31

Slide 31 text

՝୊ • υοάϑʔσΟϯά͸Ή͔͍ͣ͠ • ։ൃ൛Λ࠷৽ʹอͭͷ͸໘౗͍͘͞ • ։ൃ൛ݻ༗ͷ໰୊͕Ͳ͏ͯ͠΋ଘࡏ͢Δ • ContentProvider/AccountManager·ΘΓͰτϥϒ ϧ͕͓͖͕ͪʢAndroidʣ • Push௨஌͕࢖͑ͳ͍ʢiOSʣ

Slide 32

Slide 32 text

՝୊ • ։ൃ൛ͷϑΟʔυόοΫ͕೉͍͠ • εΫϦʔϯΩϟϓνϟΛࣾ಺νϟοτͳͲʹ؆୯ ʹΞοϓϩʔυ͢Δ࢓૊Έͱ͔ʁ • ࣮ݧతػೳΛϢʔβʔʹ࢖ͬͯ΋Β͍͍ͨ • PlayͷβػೳͰ഑෇͢Δʁ • Chrome CanaryΈ͍ͨʹผΞϓϦʹ͢Δʁ

Slide 33

Slide 33 text

ࠓ೔࿩ͨ͜͠ͱ ! • ։ൃମ੍ • git workflowͷ࿩ • ։ൃ൛Λࣾ಺Ͱ഑෇͢Δ࢓૊Έ

Slide 34

Slide 34 text

͝੩ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠