@DroidKaigi2017 Day.1 by Ryo Sakaguchi (wakwa3125)
ϦϦʔεࣗಈԽͷಋೖͱޮͷΑ͍ϦϦʔεϑϩʔΛٻΊͯby Ryo Sakaguchi@Droidkaigi2017 Day.1
View Slide
About me• Θ͘Θ͘͞Μͱ͔ݺΕͯ·͢ɻ(ձࣾͰͷڭʹࣦഊͨ͠)• Wantedly! ͱ͍͏ձࣾͰWantedly Peopleͷ։ൃΛ͍ͯ͠·͢ɻ• ݩ͓ͶͩΜҎ্ͳՈ۩͞ΜͰൢചһΛ͍ͯ͠·ͨ͠ɻ
Agenda
Agenda• ࣗಈԽͷงғؾ• తϞνϕʔγϣϯɺͰ͖Δ͜ͱɺϝϦοτͳͲ• ϦϦʔεࣗಈԽʹؔ࿈͢Δπʔϧͷհ• AndroidΞϓϦͷϦϦʔεͷࣗಈԽʹʹཱͭπʔϧ܈Λհ͠·͢ɻ• Ͳ͏ͬͯΔͷ͔ʁʢಋೖ४උʣ• ͍͔ͭ͘ͷϓϩδΣΫτΛྫʹɺࣗಈԽͨ͠ϦϦʔεϑϩʔΛಋೖ͢Δ͜ͱΛߟ͑ͯΈ·͢ɻ• Ͳ͏ͬͯΔͷ͔ʁʢಋೖʣ• ࣮ࡍʹಋೖ͢Δࡍʹඞཁͳ࡞ۀΛνΣοΫ͍͖ͯ͠·͢ɻ• ࣦഊ͕ͪ͠ͳέʔεͱҙ• ·ͱΊతͳ• ࣭ٙԠ
ࠓҰ൪͍͑ͨ͜ͱ• ࣗಈԽͷৄࡉͳಋೖखॱͳͲͰͳ͘ɺͳΜͰΔͷ͔ɺϞνϕʔγϣϯΛϝΠϯʹ͍͖͍͑ͯͨͱࢥ͍·͢ɻ• ಋೖࣗମରͯ͘͠͠ͳ͍ɻ• ඞཁͳͷ͍ͬͯ͘ؾ࣋ͪ
ͦͦࣗಈԽͷతͬͯʁ
ࣗಈԽͷత• ϧʔνϯϫʔΫɺఆܕ࡞ۀͷΑ͏ͳͷͳͷͰɺࣗಈԽ͢Δ͜ͱʹΑͬͯɺຊ࣭తͳۀʹूதͰ͖ΔΑ͏ʹ͍ͨ͠ɻ• ཧ͍ͯ͠ΔΞϓϦ͕ଟ͘ͳ͖ͬͯͨΓɺετΞܝࡌจͷଟݴޠରԠͳͲΛ͍ͯ͠Δ߹ɺߋ৽खॱ͕ࡶʹͳΔɻ• ͦͷϛεΛݮΒ͍ͨ͠ɻ• ϦϦʔε࡞ۀΛଐਓԽͤͨ͘͞ͳ͍ɻ
͜Μͳ͜ͱ͕Ͱ͖·͢
͜Μͳ͜ͱ͕Մೳʹ• Google Play Developer ConsoleͷAPKΞοϓϩʔυ(ෳAPKͷҰׅΞοϓϩʔυOKʂ)• ετΞใͷߋ৽• Change log• Long description• Short description• ScreenShots• ࢹπʔϧ(CrashlyticsFirebase Crash Reporting,Bugsnag…) ͷmapping.txtϑΝΠϧͷΞοϓϩʔυ
ͬͱ͍Ζ͍ΖͰ͖ΔΑ͏ʹͳΔ͚ͲΓա͗ྑ͘ͳ͍͔Βҙɻ (ޙड़)
ࣗಈԽͨ͠ΒԿ͕͏Ε͘͠ͳΔ͔!
࡞ۀ͕γϯϓϧʹͳͬͯ͏Ε͍͠ʂ
ࣗಈԽ͍ͯ͠ͳ͍ϦϦʔε࡞ۀΦϖϨʔγϣϯϛεΛੜΈ͕ͪ
ࠓ·ͰͷϦϦʔε࡞ۀ• ॺ໊ϑΝΠϧΛ͍࣋ͬͯΔϦϦʔεϚωδϟʔతͳਓʹϦϦʔεΛ͓ئ͍͢Δɻ• ProductionAPKΛ༻ҙ͢Δɻ• ΞοϓσʔτจΛ༻ҙ͢Δɻ• ConsoleʹΞΫηεͯ͠ɺWEBΠϯλʔϑΣΠεͰΞοϓϩʔυ͢Δ• ΞοϓϩʔυΛࣾʹप• ߋ৽Λࣾʹ௨Λશ෦ख࡞ۀ
͜Ε͔ΒͷϦϦʔε࡞ۀ
git push origin master
͍
͍͍ͩͨ͜ΕͰ͍͚Δɻ͜ΕͳΒ…
ϛεͳ͘οʂεϐʔσΟʹοʂϦϦʔεΛճͤΔοʂ
ͰϦϦʔε࡞ۀͬͯͦΜͳʹճଟ͘ͳ͍Μ͡Ό...
ͦΕ͕ɺΞϓϦͷվળαΠΫϧΛि1Ͱճ͢ͱ݁ߏେมͰ͢
ͳͥେม͔• ϦϦʔεΛߴͰճ͍ͯ͘͠ͱͲ͏ͯ͠όά͕૿͍͑ͯ͘ɻ• ࠜຊతͳղܾࡦͱͯ͠ɺ͖ͪΜͱςετΛॻ͍ͯͦͦόάΛੜΈʹ͍͘ڥΛ͑Δ͜ͱ͕ඞཁɻ• Ͱɺى͖Δͱ͖ى͖Δɻ• ݁ՌతʹhotfixΛ͢Δ͜ͱ͋Δ• ͦͷhotfixΛؚΊΔͱिʹ1ճ͡Ό͢·ͳ͍• ͦΜͳ࣌ɺϦϦʔε͕Ͱ͖Δ࡞ۀऀ͕1ਓͩͬͨΒʁͱ͔ͬͯΔͱ࣮֬ʹϛε͕૿͍͑ͯ͘
࣮ࡍʹ͕ࣗͬͯ͠·ͬͨ͜ͱҰཡ• ετΞͷChangelogͷຊޠʹӳޠΛӳޠʹຊޠΛೖΕͯ͠·ͬͨ• APKΛsplit͍ͯͨ͠ͷͰɺԿճ͔͢ͰʹΞοϓϩʔυࡁΈͷAPKϑΝΠϧΛΞοϓϩʔυͯ͠͠·ͬͨ(͔ΕΔͷͰ࣮ͳ͍)ΫϦςΟΧϧ͗͢Δϛε൜ͯ͠ͳ͍͚Ͳɺ͏Ұؔ࿈࡞ۀ͠ͳ͚Ε͍͚ͳ͍ετϨε݁ߏ͋ͬͨɻ
ͦΜͳ࣌ʹग़ձͬͨͷ͕ࣗಈԽͰͨ͠ɻ
ࣗಈԽʹඞཁͳπʔϧ܈
ఆڥ• GitFlowΛ͍ͬͯΔ• master(ϦϦʔεϒϥϯν)• develop• feature• hotfix• release• ݸਓɾνʔϜΘͳ͍
CI
Wercker͔Bitrise͕Φεεϝ
CI• Wercker1. DockerͰίϯςφΛ͖ʹ࡞ͬͯϏϧυڥΛ͔ͳΓࣗ༝ʹΈཱͯΔ͜ͱ͕Ͱ͖Δ• Dockerfile͕ॻ͚Ε͖ʹ࡞ΕΔ2. ଞʹ͢Ͱʹग़དྷ্͕͍ͬͯΔίϯςφΛ͏͜ͱͰ͖Δɻ3. ͍4. αϙʔτ͕ϑϥϯΫͳؾ͕͢Δɻ5. ͍͍ͩͨແྉ
CI• Bitrise1. ͳΜͱͳ͘iOSͷΠϝʔδ͕ڧ͍͔͠Εͳ͍͚ͲɺandroidͷαϙʔτεΰΠ͔ͬ͠Γ͍ͯ͠Δɻ2. ͍͍ͩͨجຊతʹGUIͰ݁Ͱ͖ΔͷͰɺͪΐͬͱमਖ਼͍ͨ͠ͱ͖ͱ͔ศར3. WEBͷίϯιʔϧ͔ΒϏϧυΛεέδϡʔϧͯ͠ୟ͘͜ͱͰ͖Δɻ4. ͔ͬ͠Γ͏ͳΒ༗ྉ͚ͩͲɺ੍ݶ͖ͷແྉϓϥϯ͋Δɻ5. ໘ͳॺ໊ϑΝΠϧͷཧΛखॿ͚ͯ͘͠ΕΔ
CIͲ͕͍͍ͬͪͷʁ• ڥߏஙͱϏϧυϑϩʔͷߏஙͷ͢͠͞ͰBitriseʹ܉্͕͕Γ·͢ɻ• ॊೈੑͱݴ͏؍ͰWercker͔ͳ͊ͱࢥ͍ͬͯΔɻ
APKͷΞοϓϩʔυ
APKͷΞοϓϩʔυ• ༗໊ॴ͕2ͭ͋Γ·͢ɻ1. Triple-T/gradle-play-publisher2. fastlane/fastlane
ࡶʹൺֱͯ͠Έ·ͨ͠
ൺֱ͠·͚ͨ͠ͲΈͳ͞Μ͕͓ؾ͖ͮͷΑ͏ʹେࠩ͋Γ·ͤΜɻͲͪΒͰ͖ͳํΛ͍͍͑ͱࢥ͍·͢ɻకΓͷѱ͍ൺֱʹͳͬͯ͠·͍·ͨ͠…
Ͱ͕͢
fastlaneͱ͍͑fablicfablicͱ͍͑
Fabric is JoiningGoogle— January 18, 2017
Ͱ͢ΑͶʁ
fastlane is JoiningGoogle— January 23, 2017
ࠓޙʹظʂ
ͦͷଞͷπʔϧ
ͦͷଞͷπʔϧ• Tonkotsu• GooglePlayͷߋ৽ΛSlackʹ௨ʂ• PlayConsoleΞϓϦΛೖΕͯͳ͍ਓࣾʹ௨͢Δͱ͖ͱ͔ʹͱཱͯͪ·͢ɻ
͍͍ͩͨ͜ͷπʔϧ͚ͩͰࣗಈԽΛ࣮ફ͢Δ͜ͱ͕Ͱ͖·͢ɻ
ಋೖ४උฤ
ͦͷࣗಈԽ΄Μͱ͏ʹඞཁͰ͔͢ʁ
ຊʹඞཁͰ͔͢ʁ• ͳͥࣗಈԽ͢Δͷ͔• ͜Εʹ͍ͭͯಥ͖٧Ίͯߟ͍͑ͯ͘ͱ࣮ࡍ͠ͳ͍͍ͯ͘έʔεଘࡏ͠·͢ɻ• ԿΛͲ͏ࣗಈԽ͢Δ͔͕ࣗͣͱݟ͖͑ͯ·͢ɻ• ͦΕ͕Ͱ͖ͨΒಋೖ४උ͕ऴͬͨΈ͍ͨͳΜͰ͢ɻ• ࣗಈԽ͢ΔϝϦοτ͕͋Δͳɺͱײͨ͡Β࣮ࡍʹ࡞ۀʹͱΓ͔͔Γ·͠ΐ͏ɻ• ϝϦοτ͕ײ͡ΒΕͨΒɺʮfoobar͔ͩΒࣗಈԽ͍ͨ͠ɻ͔ͩΒগ࣌ؒ͘͠Εʯతͳ͓ΛνʔϜͰ͢Δͱྑ͍ͱࢥ͍·͢ɻ• ݸਓͳΒؾʹͤͣͬͯ͠·͍·͠ΐ͏ɻ
Case.1
Case.1શʹࠃ͚ͷέʔε
Case.1શʹࠃ͚ͷέʔε→ ߹ʹΑͬͯࣗಈԽ͠ͳͯ͘ྑ͍
Case.1ͳ͔ͥʁ• ϦϦʔεʹ͔͔Δෛ୲͕ͦ͜·Ͱେ͖͘ͳ͍ͱఆͰ͖ΔͨΊɻ• ଟݴޠରԠ࣌ʹଟ͘ͷΞοϓσʔτจΛॻ͘ඞཁ͕͋Δ͕ɺશࠃ͚ͷ߹ͦͷ͕͔͔Βͳ͍ɻ
Case.2
Case.2άϩʔόϧʹల։͍ͯͯ͠ϩʔΧϥΠζ๛ͳΞϓϦ
Case.2άϩʔόϧʹల։͍ͯͯ͠ϩʔΧϥΠζ๛ͳΞϓϦ→ ͥͻࣗಈԽ͍ͨ͠
Case.2ͳ͔ͥʁ• ΞοϓσʔτจΛԹ͔Έͷ͋Δख࡞ۀͰ܁Γฦ͍ͯ͘͠ඞཁ͕͋Δɻ• ਖ਼͔ͳΓͭΒ͍ɻ• APKͷΞοϓϩʔυ͚ͩͰͳ͘ετΞใͷߋ৽ຊʹԯ߷ʹͳΔɻ• 14ݴޠ x 5ຕͷεΫϦʔϯγϣοτΛΞοϓϩʔυ͢Δ͜ͱ͕͋ͬͨΒͲ͏͠Α͏ɻ
Case.3
Case.3ओʹࠃ͚ɺ͚ͩͲNDKΛͬͨΓɺRealmΛͬͨΓ͍ͯ͠Δ߹
Case.3ओʹࠃ͚ɺ͚ͩͲNDKΛͬͨΓɺRealmΛͬͨΓ͍ͯ͠Δ߹→ APK SplitΛͯ͠ɺΞϓϦαΠζΛݮ͍ͯ͠Δ߹ͱͬͯޮՌతͰ͢
APK Splitʁ
APK Splitʁsplits {abi {enable truereset()include 'x86', 'armeabi', 'armeabi-v7a'universalApk false// trueʹ͢Δͱղͨ͠APKͷଞʹ// ࠓ·ͰϏϧυ͍ͯͨ͠APKग़ྗ͞Ε·͢ɻ// fablicDeployGateʹΞοϓϩʔυ͢ΔࡍʹޮՌత}}
Case.3ͳͥSplit͍ͯ͠Δͱ͖ޮՌత͔ʁ
Case.3ͳͥSplit͍ͯ͠Δͱ͖ޮՌత͔ʁ→ ΞϓϦ͕ෳʹ͔Ε·͢ɻ্هͷྫͩͱuniversalAPKΛআ͍ͯ3ͭͷAPK͕ग़དྷ্͕Γ·͢ɻ͜ΜͳΜ͍͍ͪͪखͰϙνϙνͬͯΒΕ·ͤΜɻͳͷͰࣗಈͰΞοϓϩʔυָͯ͠Λ͍ͯ͜͠͏ͱݴ͏ελΠϧͰ͢ɻΞϓϦͷαΠζࠃͩͱͦ͏Ͱແ͍͔͠Ε·ͤΜ͕ɺւ֎ͩͱܧଓʹӨڹ͠·͢ɻͳͷͰ֘͠͞ΕΔਓ͕͍Βͬ͠ΌͬͨΒͥͻಋೖͯ͠Έ͍ͯͩ͘͞ʂ
ಋೖฤ
࣮ࡍʹखॱͱίʔυͰಋೖ͔Β৴·ͰΛ͍͖ͬͯ·͠ΐ͏ʂ
ࠓճͷཁ݅(͋͘·ͰఆͰ͢)• ঢ়گ• ͋ͳͨ5ਓͰߏ͞Εͨ։ൃνʔϜͷAndroidΤϯδχΞͰ͢ɻ• ΞϓϦࠃࡍల։͓ͯ͠Γɺ༁֎෦ʹґཔ͍ͯͨ͠Γ͠·͢ɻ• ͜ͷ1ϲ݄ɺαʔϏεάϩʔεͷͨΊʹɺ1िؒʹ1ճͷϦϦʔεαΠΫϧΛճ͍ͯ͘͠ࣄʹͳΓ·ͨ͠ɻ• νʔϜʹϏδωεαΠυͷਓډ·͢ɻ·ͨɺCSνʔϜ͔ΒϦϦʔε͕͞ΕͨΒ͍ͪૣ͘ڭ͑ͯ΄͍͠ͱݴΘΕ͍ͯ·͢ɻ• ΞϓϦͷDBʹRealmΛ༻͍ͯ͠·͢ɻ
Թ͔Έͷ͋Δख࡞ۀ(1/3)• ϦϦʔεલʹͳΓɺࠓճͷΞοϓσʔτจΛߟ͑ɺ10ݴޠͷ༁ґཔΛग़͠·ͨ͠ɻ• ༁Λͭؒɺ࠷ऴ֬ೝͷςετΛߦ͍·ͨ͠ɻ• ςετྃޙɺAPKΛϏϧυ͠·ͨ͠ɻ• ༁͕͞ΕͨΞοϓσʔτจ͕ͯ͢खݩʹἧ͍·ͨ͠ɻ• ͍͟ΞοϓϩʔυͰ͢ɻ• ΞϓϦαΠζͷංେԽΛ੍͢ΔͨΊʹɺAPK splitΛ͏͜ͱʹͨ͠ͷͰɺશ෦Ͱ5ͭͷAPKΛΞοϓϩʔυ͢Δ͜ͱʹͳΓ·ͨ͠ɻ
Թ͔Έͷ͋Δख࡞ۀ(2/3)• GooglePlay Developer ConsoleΞΫηε͠·͢ɻ• APKΛΞοϓϩʔυ͠(x5)ɺ֤ݴޠ͝ͱʹΞοϓσʔτจΛίϐϖ͍͖ͯ͠·͢(x10)ɻ• ͍͟ެ։ϘλϯΛԡ͠·͢ʂ
• GooglePlay Developer ConsoleΞΫηε͠·͢ɻ• APKΛΞοϓϩʔυ͠(x5)ɺ֤ݴޠ͝ͱʹΞοϓσʔτจΛίϐϖ͍͖ͯ͠·͢(x10)ɻ• ͍͟ެ։ϘλϯΛԡ͠·͢ʂ
APKΛΞοϓϩʔυ͠(x5)ΞοϓσʔτจΛೖྗ͠·͢(x10)
Թ͔Έͷ͋Δख࡞ۀ(3/3)• APKΛΞοϓϩʔυޙɺCSνʔϜͱ։ൃνʔϜʹʮΞοϓϩʔυ͕ྃ͠·ͨ͠ʯͱप͠·͢ɻ• ετΞͷߋ৽ΛPlayConsoleΞϓϦͷ௨Ͱ֬ೝͰ͖ͨͷͰɺCSνʔϜʹ͏Ұ࿈ܞ͠·͢ɻ
݁ߏେมײ͋Δɻ
ͰࣗಈԽ͢ΔͱͲ͏ͳΔ͔
ࠓճαΫοͱͰ͖ΔࣗಈԽͰߟ͍͑ͨͱࢥ͍·͢ɻ1. GooglePlay Developer ConsoleΞΫηε͠·͢ɻ→ ͯ͢ϩʔΧϧͰ४උ&݁͠·͠ΐ͏ byfastlane
ࠓճαΫοͱͰ͖ΔࣗಈԽͰߟ͍͑ͨͱࢥ͍·͢ɻ1. GooglePlay Developer ConsoleΞΫηε͠·͢ɻ→ ͯ͢ϩʔΧϧͰ४උ&݁͠·͠ΐ͏ byfastlane2. APKΛΞοϓϩʔυ͠(x5)ɺ֤ݴޠ͝ͱʹΞοϓσʔτจΛίϐϖ͍͖ͯ͠·͢(x10)ɻ→ ϓϩάϥϜʹͤ·͠ΐ͏ by fastlane && CI
ࠓճαΫοͱͰ͖ΔࣗಈԽͰߟ͍͑ͨͱࢥ͍·͢ɻ1. GooglePlay Developer ConsoleΞΫηε͠·͢ɻ→ ͯ͢ϩʔΧϧͰ४උ&݁͠·͠ΐ͏ by fastlane2. APKΛΞοϓϩʔυ͠(x5)ɺ֤ݴޠ͝ͱʹΞοϓσʔτจΛίϐϖ͍͖ͯ͠·͢(x10)ɻ→ ϓϩάϥϜʹͤ·͠ΐ͏ by fastlane && CI3. APKΛΞοϓϩʔυޙɺCSνʔϜͱ։ൃνʔϜʹʮΞοϓϩʔυ͕ྃ͠·ͨ͠ʯͱप͠·͢ɻ→ SlackͰࣗಈతʹ௨͢ΔΈΛ࡞Γ·͠ΐ͏ by Slack& CI
ࠓճαΫοͱͰ͖ΔࣗಈԽͰߟ͍͑ͨͱࢥ͍·͢ɻ1. GooglePlay Developer ConsoleΞΫηε͠·͢ɻ→ ͯ͢ϩʔΧϧͰ४උ&݁͠·͠ΐ͏ by fastlane2. APKΛΞοϓϩʔυ͠(x5)ɺ֤ݴޠ͝ͱʹΞοϓσʔτจΛίϐϖ͍͖ͯ͠·͢(x10)ɻ→ ϓϩάϥϜʹͤ·͠ΐ͏ by fastlane && CI3. APKΛΞοϓϩʔυޙɺCSνʔϜͱ։ൃνʔϜʹʮΞοϓϩʔυ͕ྃ͠·ͨ͠ʯͱप͠·͢ɻ→ SlackͰࣗಈతʹ௨͢ΔΈΛ࡞Γ·͠ΐ͏ by Slack & CI4. ετΞͷߋ৽ΛPlayConsoleΞϓϦͷ௨Ͱ֬ೝͰ͖ͨͷͰɺCSνʔϜʹ͏Ұ࿈ܞ͠·͢ɻ→ ͪ͜ΒSlackͰࣗಈతʹ௨͢ΔΈΛ࡞Γ·͠ΐ͏ by tonkotsu
͜Ε͚ͩͰ͍ͩͿָʹͳΓ·͢ΑʂͰ࣮ݱ͍͖ͯ͠·͠ΐ͏ɻ
Step.1(1/2)·ͣfastlaneͷ४උ͔Β• fastlane͕GooglePlay Developer ConsoleʹΞΫηε͢ΔͨΊͷService AccountΛ࡞Γɺੜ͞ΕΔjsonϑΝΠϧΛ༻ҙ͠·͢ɻ• ࣍ʹfastlaneͷΠϯετʔϧΛߦ͍·͢ɻgem install fastlane
Step.1(2/3)• fastlaneΛͬͯGoogelPlay͔Βݱࡏͷ࠷৽ͷετΞܝࡌใΛऔಘ͠ɺgitཧԼʹ͓͖·͠ΐ͏ɻ− ͜ͷ࣌ҙ͍ͨ͠ͷ͕ɺઌఔμϯϩʔυͨ͠jsonϑΝΠϧgitͷϦϙδτϦʹೖΕͳ͍Α͏ʹ͍ͯͩ͘͠͞ɻ> cd your_project_folder> fastlane supply init -j /path/to/json> git add .> git push
Step.1(3/3)͜Μͳײ͡ͰΞοϓσʔτจ͕͍ͬͨσΟϨΫτϦ͕ϓϩδΣΫτϑΥϧμʹੜ͞Ε·͢ɻΞοϓσʔτΛ৴͢ΔࡍςΩετϑΝΠϧʹόʔδϣϯίʔυͷ໊લΛ͚ͭͯɺΞοϓϩʔυ͢Δ͜ͱͰετΞʹߋ৽͕͔͔Γ·͢ɻmetadata└── android├── en-US│ └── changelogs│ ├── 100000.txt // όʔδϣϯίʔυ͕ϑΝΠϧ໊ʹͳΔ│ └── 100100.txt└── ja-JP└── changelogs└── 100100.txtfastlaneͷ४උҎ্Ͱ͢ɻ
Step.2(1/2)• CI͕masterϓογϡʹԠͯ͠ɺϦϦʔεϏϧυΛ࡞͠ɺfastlaneΛୟ͘༻ʹઃఆ͠·͠ΐ͏ɻrelease:steps:- script:name: Upload to GooglePlay.code: |ls -la $WERCKER_REPORT_ARTIFACTS_DIR./script/deploy/deploy2googleplay.sh
Step.2(2/2)• /deploy2googleplay.shͷதfastlane supply run -p com.wakwak.awsomeglobalapp \-j ./app/signingConfigs/json_key.json \-u \"./app/build/outputs/apk/app-production-arm64-v8a-release.apk",\"./app/build/outputs/apk/app-production-armeabi-release.apk",\"./app/build/outputs/apk/app-production-armeabi-v7a-release.apk",\"./app/build/outputs/apk/app-production-mips-release.apk",\"./app/build/outputs/apk/app-production-x86-release.apk",\"./app/build/outputs/apk/app-production-x86_64-release.apk" \--verbose --skip_upload_images --skip_upload_screenshots͜͜·ͰΕͱΓ͋͑ͣϏϧυˠϦϦʔε͠·͢
Q.ͳΜ͔ΊΜͲͦ͘͞͏ʁ
A.͍ɻΘΓͱఔ͍Ͱ͢ɻ͜ΕͰΊͬͪΌল͍ͯ·͢ɻ
ҙ֎ʹ໘• ࣗಈԽͷϑϩʔΛΈཱͯΔͷͱָ͍ͯ͠Ͱ͕͢ɺ࠷ॳ͜·͝·ͨ͠࡞ۀ͕ଟ͍ͷͰͪΐͬͱ໘ʹײ͡Δ͔͠Ε·ͤΜɻ• Թ͔Έͷ͋Δख࡞ۀϦϦʔεΛΊΔʹԹ͔Έͷ͋Δ࡞ۀʹΑͬͯҙ֎ͳ͑͠·ͤΜɻ• ϕετͳͷϦϙδτϦͷΦʔφʔ͕࠷ॳʹΨοʂͬͱ࡞ۀͯ͠͠·͏͜ͱɻ
Step.3(1/2)• ΞοϓϩʔυྃΛ௨͠·͠ΐ͏releaseͱ͍͏channelʹϏϧυྃΛ௨͢ΔstepΛՃ͠·͢ɻafter-steps:- slack-notifier:url: $SLACK_URL_RELEASEchannel: releaseusername: wercker
Step.3(2/2)• શମͰ͜Μͳײ͡ʹͳΔ͔ͱࢥ͍·͢ɻrelease:steps:- script:name: Upload to GooglePlay.code: |ls -la $WERCKER_REPORT_ARTIFACTS_DIR./script/deploy/deploy2googleplay.shafter-steps:- slack-notifier:url: $SLACK_URL_RELEASEchannel: releaseusername: wercker
Step.4 (1/1)• ετΞͷߋ৽Λ௨͠·͠ΐ͏tonkotsuΛ͍·͢ઃఆํ๏ϦϙδτϦʹৄ͘͠ॻ͍ͯ͋Γ·͢ɻ> go run tonkotsu.go config.go -c config.toml• ͜ΕͰɺετΞ͕ߋ৽͞Εͨ࣌ʹSlackͷ௨ΛૹΔ͜ͱ͕Ͱ͖ΔͷͰɺىಈ͚͓͚ͩͯ͠ଞͷ࡞ۀʹूதͰ͖·͢
͜Ε͚ͩ४උ͓͚ͯ͠ޙ
(͍͍ͩͨ) git push origin master
ͰOKͰ͢
ࣦഊ͕ͪ͠ͳέʔεͱҙ
Case.1ԿͰ͔ΜͰࣗಈԽ͠Α͏ͱ͢Δ
ԿͰ͔ΜͰࣗಈԽ͠Α͏ͱ͢Δ• લड़͠·͕ͨ͠ɺࣗಈԽͷ࡞ۀࣗମ໘Ͱ৭ʑΒͳ͖Ό͍͚ͳ͍Ͱ͢ɻ• ͳͷͰɺϦϦʔεαΠΫϧͷதͰϘτϧωοΫʹͳ͍ͬͯΔͱ͜Ζʹݶఆͯࣗ͠ಈԽΛద༻͢Δ͜ͱͰޮՌ͕࠷େԽ͞Ε·͢ɻ
ͨͱ͑• ϦϦʔε௨ͷTwitterࣾͷใڞ༗πʔϧʹߋ৽༰Λߘ͠Α͏ʂ• ૉΒ͍͠ͱࢥ͍·͕͢ɺຊདྷ֤πʔϧʹॻ͍͍ͯ͘΄͏͕ॊೈੑ͕ߴ͍ͷΛ͍͍ͪͪࣗಈԽ͢ΔͱΦϨΦϨߋ৽खॱ͕ൃੜ͠·͢ɻ• աͳࣗಈԽଐਓੑΛߴΊͯ͠·͏ͱࢥ͍ͬͯ·͢ɻ
Case.2͕ࣗϦϙδτϦΦʔφʔͰͳ͍
͕ࣗϦϙδτϦΦʔφʔͰͳ͍• ࣗಈԽ͢Δʹ͋ͨͬͯηϯγςΟϒͳϑΝΠϧใΛѻ͏͜ͱʹͳΓ·͢ɻ• ͦΜͳ࣌ʹɺͦͷਓʹใͷ֬ೝΛͯࣗ͠ಈԽϑϩʔΛՃ͍ͯ͘͠ͷ͍͠Ͱ͢ɻ• ͳΔࣗ͘ಈԽϦϙδτϦΦʔφʔʹ͍ۙঢ়ଶͰ࣮ࢪ͢Δ͜ͱͰಋೖͷ͕͔͢͠͞ΘΓ·͢ɻ• ϨʔϧΛෑ͍ͯ͋͛Δͱޙଓͷ։ൃऀͦ͜ʹͷ͔͍͖ͬͬͯ·͢ɻ
·ͱΊͯΈ·͢
·ͱΊ• ࣗಈԽ͕͔͔ΔͷͰɺಋೖ͢ΔݸॴΛܾఆ͔ͯ͠Β͚ͦͩ͜ΛΔ͜ͱɻ• ʮ͜͜·Ͱ͍Δ͔ͳ...ʁʯͬͯҰճͰࢥͬͨΒͦͷ෦ʹؔͯ͠Βͳ͍ɻ• ͦͦࣗಈԽͷඞཁͳ͍ϓϩδΣΫτ͋Δɻ• νʔϜͰ͠߹ͬͯΈΔͱྑ͍͔͠Εͳ͍ɻ• ࣗಈԽ͢ΔͱϝϦοτ͋ΔɻͳͷͰɺੵۃతʹݕ౼͍ͯͬͯ͠΄͍͠ʂ
Ҏ্Ͱ͢ʂ͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠ʂ