Bakusoku Iterations Tokyo at mixi (2014/5/29) の発表資料です
http://deploygate.doorkeeper.jp/events/11579
Mobile First Developmentat COOKPADBakusoku Iterations Tokyo#Deploygate2014/5/29by FUJI Goro
View Slide
ࣗݾհ - FUJI Goro (gfx)• Software Engineer at COOKPAD• iOS/Android྆ํΔ• ϞόΠϧΞϓϦͷ։ൃޮΛ্͛Δͷ͕ओͳࣄ• ۙͩͱϥΠϒϥϦͷ։ൃ͕ϝΠϯ• ੜ࢈ੑ͋͛ͯ͜ˢˢ
COOKPADͷϞόΠϧΞϓϦ
ͦͷଞ• μΠΤοτࢧԉΞϓϦ͕͍͔ͭ͘• μΠΤοτ 80 / μΠΤοτͻͱΓͿΜ• ݕࡧʹಛԽͨ͠ΞϓϦ͕͍͔ͭ͘• ುύου / Ωϟϕπύου• ͞Βʹଟ͘ͷΞϓϦΛϦϦʔε༧ఆ
Mobile First Development
ϢʔβʔϑΝʔετͳ։ൃ• ϢʔβʔʹͱͬͯͷՁΛ࠷େʹ͍ͨ͠• ΞϓϦͷվળΛߴʹਐΊΔ• ػೳΛ͑ͳ͍࣌ؒΛݮΒ͢• ҆ఆͨ͠։ൃαΠΫϧͷཱ͕֬ෆՄܽ
։ൃମ੍
։ൃମ੍ɿશମߏ• COOKPADΞϓϦ• iOS: 3ਓ• Android: 4~6ਓ• ͦͷଞͷΞϓϦ• جຊ1ਓʴඞཁʹԠͯ͡αϙʔτ
։ൃମ੍ɿνʔϜମ੍• ϞόΠϧϑΝʔετࣨɿίΞνʔϜਓ• ֤αʔϏεͷ෦ॺͰ৽ػೳͷ࣮ɿ1ਓ~• e.g. ϓϨϛΞϜαʔϏε, ಛചใ• ҰͭͷΞϓϦΛෳͷ෦ॺͰڠௐͯ͠։ൃ
։ൃڥ• Android• Android Studio & Gradle• iOS• Xcode• AppCode (3.0 supports Storyboard!)
Mobile Apps vs. Web Apps• cookpad.comΣϒΞϓϦ• ҰʹճσϓϩΠΛߦ͏• සൟʹσϓϩΠ͕͋͠ΕϩʔϧόοΫ͢Δ• masterৗʹdeployՄೳͳঢ়ଶʹ͓ͯ͘͠• ҰํMobile AppؾܰʹϩʔϧόοΫͰ͖ͳ͍
Mobile AppsͷϦϦʔεαΠΫϧ• ϩʔϧόοΫͰ͖ͳ͍ͷͰ৻ॏʹ͍ͯ͠Δ• ϦϦʔε͝ͱͷ։ൃظؒ2~3िؒ• ৽ػೳϚʔδલʹಈ࡞֬ೝ͢Δ• QAظؒ3ؒ
VCSͱͷ͖߹͍ํ
VCSͱͷ͖߹͍ํ• GitHub EnterpriseΛར༻• masterʹೖΕΔίʔυඞͣPull RequestΛ͠ɺνʔϜϝϯόʔʹΑΔϨϏϡʔΛඞਢʹ͍ͯ͠Δ• UIʹؔΘΔมߋσβΠφʔʹΑΔϨϏϡʔඞਢʹ͍ͯ͠Δ
gitͷϒϥϯνϯάϞσϧ• ࠷ॳwebͱಉ͡ελΠϧͰӡ༻͍ͯͨ͠• ͍ΘΏΔgithub flow• P-RΛϚʔδ͢Δ·͑ʹݕূΛ͢·ͤΔ• ඞཁͳػೳΛ࣮͓͑ͨ͠ΒϦϦʔε
ࠒ͔Β։ൃ൛Λ͍ͬͯΔ͠ɺϚʔδલʹݕূ͍ͯ͠Δ͔Β͜ΕͰେৎ…ʂ
ʊਓਓਓਓਓਓਓʊʼɹಥવͷোɹʻʉY^Y^Y^Y^Y^Yʉ
ͦͯ࣌͠ྲྀΕ…
ݱࡏͷϒϥϯνϯάεϞσϧ• ίʔυϑϦʔζˍQAظؒΛઃ͚ͨ• “A successful git branching model” (git-flow)ʹ͍ۙϒϥϯνϯάϞσϧʹͳͬͨ• ͨͩ͠git-flowͱҟͳΓdevelopΘͳ͍
$PEF'SFF[F3$'FBUVSFGPSNBTUFSGFBUVSFSFMFBTF
ݱࡏͷworkflow• ඞཁͳػೳΛ࣮͓͑ͨ͠ΒίʔυϑϦʔζʢCFʣͱ͢Δ• CFͨ͠ΒϦϦʔεީิʢRCʣϒϥϯνΛͭ͘Δ• RC͕ผΕͨΒmasterߋʹ࣍ͷόʔδϣϯͷͨΊͷमਖ਼͕Ϛʔδ͞Ε͏Δ• RCϒϥϯνʹඞཁͳόάमਖ਼ΛೖΕΔ• ϦϦʔεͨ͠ΒRCϒϥϯνΛmasterʹϚʔδ͢Δ
՝• iOS/AndroidνʔϜ֎ͱͷڠௐ͕͍͠• ϒϥϯνϯάϞσϧͷڞ༗ෆे
։ൃ൛ΞϓϦͷTestFlight
جຊతʹJenkinsͰࣗಈԽ
TestFlight for iOS• AutoFlight ʹΑΔࣗಈΛߦ͍ͬͯΔ• GitHub͔ΒͷWebHook௨ΛAutoFlightProxy͕ड͚Δ• AutoFlightProxy͕JenkinsΛΩοΫ• Jenkins͕Ϗϧυͯ͠TestFlightʹΞοϓϩʔυ• ϒϥϯνʹΑͬͯઌͷνʔϜΛࣗಈతʹબͿ
deploygate for Android• masterʹίϛοτ͕͋ͬͨΒJenkinsΛΩοΫ• Ϗϧυˍςετ• ςετGenyMotionͰߦ͍ͬͯΔ• deploygateʹ৴͢Δ• deploygateΞΧϯτGoogleεϓϨουγʔ
-PDBM.BDIJOFQVTILJDLUFTUCVJMEVQMPBE
iOS/Androidڞ௨• masterʹ͋ΔίϛοτΛࣗಈ৴• ։ൃ൛ΞΠίϯΛϦϦʔε൛ͱม͑ͯΘ͔Γ͘͢• ։ൃ൛ID(bundle id / package name)Λม͑ͯϦϦʔε൛ͱڞଘͰ͖ΔΑ͏ʹ• ৴͞ΕΔ։ൃ൛production serverʹͭͳ͕ΔͷͰνʔϜϝϯόʔҎ֎ීஈ͍Ͱ͖Δ
՝• υοάϑʔσΟϯάΉ͔͍ͣ͠• ։ൃ൛Λ࠷৽ʹอͭͷ໘͍͘͞• ։ൃ൛ݻ༗ͷ͕Ͳ͏ͯ͠ଘࡏ͢Δ• ContentProvider/AccountManager·ΘΓͰτϥϒϧ͕͓͖͕ͪʢAndroidʣ• Push௨͕͑ͳ͍ʢiOSʣ
՝• ։ൃ൛ͷϑΟʔυόοΫ͕͍͠• εΫϦʔϯΩϟϓνϟΛࣾνϟοτͳͲʹ؆୯ʹΞοϓϩʔυ͢ΔΈͱ͔ʁ• ࣮ݧతػೳΛϢʔβʔʹͬͯΒ͍͍ͨ• PlayͷβػೳͰ͢Δʁ• Chrome CanaryΈ͍ͨʹผΞϓϦʹ͢Δʁ
ࠓͨ͜͠ͱ!• ։ൃମ੍• git workflowͷ• ։ൃ൛ΛࣾͰ͢ΔΈ
͝੩ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠