Upgrade to Pro — share decks privately, control downloads, hide ads and more …

中規模以上のアプリ開発におけるCIレシピとリリースフロー戦略

kazakago
February 08, 2019

 中規模以上のアプリ開発におけるCIレシピとリリースフロー戦略

DroidKaigi 2019登壇資料
2019/02/08 10:30-11:00 Room 2

スライド内で紹介したリンク

- git-flow cheatsheet
Git-Flowの解説をしている代表的なサイト
https://danielkummer.github.io/git-flow-cheatsheet

- bitrise.yml
スライド内で紹介したBitrise用の汎用yamlファイル
https://gist.github.com/KazaKago/7d91f3740345889e9812e6aecd9d98a4

- StepReleaseDispatcher
スライド内で紹介したPlayストアにおける自動的な「段階的な公開」を行うためのKtor製サーバープログラム
https://github.com/KazaKago/StepReleaseDispatcher

kazakago

February 08, 2019
Tweet

More Decks by kazakago

Other Decks in Programming

Transcript

  1. தن໛Ҏ্ͷ
    ΞϓϦ։ൃʹ͓͚Δ
    $*ϨγϐͱϦϦʔεϑϩʔઓུ
    ాଜ ݠհ !,B[B,BHP
    XJUI *(/*4 -5%
    JMMVTUFE CZ ஛ݪ
    %SPJE,BJHJ

    View full-size slide

  2. ాଜ ݠհ !,B[B,BHP

    גࣜձࣾΠάχε
    ࿀ѪϚονϯάαʔϏε ʠXJUIʡ
    "OESPJE։ൃྺ͸೥͘Β͍
    J04΋΍ͬͯ·͢
    ࣗݾ঺հ

    View full-size slide

  3. ͦ΋ͦ΋ʠதن໛Ҏ্ʡͬͯ
    Ͳ͔͜ΒΛࢦ͢ͷʁ
    લஔ͖

    View full-size slide

  4. ΞϓϦׂͬͯͱҰਓͰ
    ࡞Δ͜ͱ΋ଟ͍ΑͶ
    લஔ͖

    View full-size slide

  5. ͜ͷ৔Ͱ͸
    ෳ਺ਓʢਓҎ্ʣ։ൃΛ
    ࢦ͢͜ͱͱ͠·͢
    લஔ͖

    View full-size slide

  6. XJUIʹ͓͚Δݱঢ়ͱϚΠϧετʔϯ
    (JU'MPXΛ༻͍ͨΞϓϦ։ൃϑϩʔ
    $*πʔϧͱϒϥϯνӡ༻ͷ࿈ܞʹΑΔ࡞ۀࣗಈԽ
    (PPHMF 1MBZ %FWFMPQFS "1*Λ׆༻ͨ҆͠ఆతͳϦϦʔεख๏
    ໨࣍
    ໨࣍

    View full-size slide

  7. ϚΠϧετʔϯ
    XJUIʹ͓͚Δݱঢ়ͱ

    View full-size slide

  8. ʙ
    ϚΠϧετʔϯ
    XJUIʹ͓͚Δݱঢ়ͱ
    ฐࣾ"OESPJEνʔϜʹ͓͚Δݱঢ়

    View full-size slide

  9. ʙ
    ϚΠϧετʔϯ
    XJUIʹ͓͚Δݱঢ়ͱ
    ฐࣾ"OESPJEνʔϜʹ͓͚Δݱঢ়

    View full-size slide

  10. ʙ
    ϚΠϧετʔϯ
    XJUIʹ͓͚Δݱঢ়ͱ
    ฐࣾ"OESPJEνʔϜʹ͓͚Δݱঢ়

    View full-size slide

  11. ʙ
    ฐࣾ"OESPJEνʔϜʹ͓͚Δݱঢ়
    ϚΠϧετʔϯ
    XJUIʹ͓͚Δݱঢ়ͱ

    View full-size slide

  12. ϦϦʔε͸िؒʹҰ౓
    2"ʹΑΔ֬ೝ͸ϦϦʔεʹ͖ͭฏۉ೔
    ਺ϲ݄ʹҰ౓େن໛ϦϦʔε͕͋Δ
    ϦϦʔε͸ि໌͚ʹߦ͏
    ϚΠϧετʔϯ
    XJUIʹ͓͚Δݱঢ়ͱ
    ฐࣾ"OESPJEνʔϜʹ͓͚Δݱঢ়

    View full-size slide

  13. ฐࣾ"OESPJEνʔϜʹ͓͚ΔϚΠϧετʔϯ
    ೔ ݄ Ր ਫ ໦ ۚ ౔
    ։ൃ
    ೔ ݄ Ր ਫ ໦ ۚ ౔
    ։ൃ ։ൃऀνΣοΫ 2"νΣοΫ
    ೔ ݄
    ϦϦʔε
    ϚΠϧετʔϯ
    XJUIʹ͓͚Δݱঢ়ͱ
    ि໨
    ि໨
    ि໨

    View full-size slide

  14. ӡ༻͕ଐਓԽ͍ͯ͠Δͱ
    ਓͷೖΕସΘΓͷͨͼʹ
    ίετ͕͔͔Δ
    ϚΠϧετʔϯ
    XJUIʹ͓͚Δݱঢ়ͱ

    View full-size slide

  15. ҆ఆͯ͠ܧଓతʹ
    ϦϦʔεͰ͖Δ
    ։ൃϑϩʔ͕ٻΊΒΕΔ
    ϚΠϧετʔϯ
    XJUIʹ͓͚Δݱঢ়ͱ

    View full-size slide

  16. ΞϓϦ։ൃϑϩʔ
    (JU'MPXΛ༻͍ͨ

    View full-size slide

  17. ෳ਺ਓͰ։ൃΛߦ͏ͱ
    ϒϥϯνӡ༻ʹ
    ͍Ζ͍ΖͭΒΈ͕ग़ͯ͘Δ
    ϚΠϧετʔϯ
    XJUIʹ͓͚Δݱঢ়ͱ

    View full-size slide

  18. ΞϓϦ։ൃϑϩʔ
    (JU'MPXΛ༻͍ͨ
    ࣍ͷόʔδϣϯʹ
    ͲͷϒϥϯνΛ
    ೖΕΔΜ͚ͩͬʁ
    ͜ͳ͍ͩϦϦʔεͨ࣌͠ͷ
    ίϛοτ͕ߦํෆ໌
    ࣗ෼ͷ࡞ۀϒϥϯνʹ
    ΄͔ͷਓͷͲͷରԠ͕
    ؚ·ΕͯΔ͔Θ͔Βͳ͍
    ʮϦϦʔε͢Δ·Ͱ
    Ϛʔδ଴ͬͯͯʂʯ
    ظ͕ؒසൟʹ͋Δ

    View full-size slide

  19. ΋͏ͩΊͩ
    ΞϓϦ։ൃϑϩʔ
    (JU'MPXΛ༻͍ͨ

    View full-size slide

  20. (JU'MPXΛ
    ಋೖͯ͠Έͳ͍ʁ
    (PPHMF 1MBZ %FWFMPQFS "1*Λ
    ͨ҆͠ఆతͳϦϦʔεख๏

    View full-size slide

  21. (JU'MPXͱ͸ʁ
    ΞϓϦ։ൃϑϩʔ
    (JU'MPXΛ༻͍ͨ

    View full-size slide

  22. HJUGMPX͸HJUͷ֦ுͰ͋Γɺ
    7JODFOU %SJFTTFOͷ
    ఏএ͢ΔϒϥϯνϞσϧΛ࣮ݱ͢ΔͨΊͷ
    ߴ౓ͳϦϙδτϦૢ࡞Λఏڙ͠·͢ɻ
    HJUGMPX DIFBUTIFFU
    IUUQTEBOJFMLVNNFSHJUIVCJPHJUGMPXDIFBUTIFFU
    ΞϓϦ։ൃϑϩʔ
    (JU'MPXΛ༻͍ͨ

    View full-size slide

  23. ΞϓϦ։ൃϑϩʔ
    (JU'MPXΛ༻͍ͨ
    ͦͷఏএ͞ΕͯΔ
    ϒϥϯνϞσϧͬͯ
    ҰମͳΜͳͷʁ

    View full-size slide

  24. .BTUFS
    %FWFMPQ
    )PUGJY
    3FMFBTF
    'FBUVSF
    <- ۓٸόάରԠ༻ϒϥϯν
    <- ϦϦʔε४උ༻ϒϥϯν
    <- ϦϦʔεͨ͠΋ͷ͕ฒͿϒϥϯν
    <- ։ൃ༻ϝΠϯϒϥϯν
    <- ୯Ұͷػೳ։ൃ༻ϒϥϯν
    ΞϓϦ։ൃϑϩʔ
    (JU'MPXΛ༻͍ͨ

    View full-size slide

  25. ΞϓϦ։ൃϑϩʔ
    (JU'MPXΛ༻͍ͨ
    .BTUFS
    %FWFMPQ
    )PUGJY
    3FMFBTF
    'FBUVSF

    View full-size slide

  26. GFBUVSFGVOD
    GFBUVSFGVOD
    ΞϓϦ։ൃϑϩʔ
    (JU'MPXΛ༻͍ͨ
    .BTUFS
    %FWFMPQ
    )PUGJY
    3FMFBTF
    'FBUVSF

    View full-size slide

  27. SFMFBTF
    ΞϓϦ։ൃϑϩʔ
    (JU'MPXΛ༻͍ͨ
    .BTUFS
    %FWFMPQ
    )PUGJY
    3FMFBTF
    'FBUVSF

    View full-size slide

  28. ฐࣾ"OESPJEνʔϜʹ͓͚ΔϚΠϧετʔϯ
    ΞϓϦ։ൃϑϩʔ
    (JU'MPXΛ༻͍ͨ
    ೔ ݄ Ր ਫ ໦ ۚ ౔
    ։ൃ
    ೔ ݄ Ր ਫ ໦ ۚ ౔
    ։ൃ ։ൃऀνΣοΫ 2"νΣοΫ
    ೔ ݄
    ϦϦʔε
    ͜ͷλΠϛϯάͰ

    SFMFBTFϒϥϯν࡞੒
    ि໨
    ि໨
    ि໨

    View full-size slide

  29. GFBUVSFGVOD@GPS@
    UBH


    SFMFBTF
    ΞϓϦ։ൃϑϩʔ
    (JU'MPXΛ༻͍ͨ
    ͰϦϦʔε͢Δ಺༰͸

    SFMFBTFϒϥϯνʹִ཭͞Ε͍ͯΔͷͰ

    ͜ͷ࣌఺Ͱͷ։ൃʹணखͰ͖Δ
    .BTUFS
    %FWFMPQ
    )PUGJY
    3FMFBTF
    'FBUVSF

    View full-size slide

  30. ϦϦʔεͨͧ͠ʔʂʂ
    ΞϓϦ։ൃϑϩʔ
    (JU'MPXΛ༻͍ͨ

    View full-size slide

  31. ϦϦʔεͨ͠ޙʹ
    όά͕ݟ͔ͭͬͨΜ͚ͩͲʜ
    ΞϓϦ։ൃϑϩʔ
    (JU'MPXΛ༻͍ͨ

    View full-size slide

  32. UBH


    NBTUFS͔Β৳͹͢
    ͷ͕ϙΠϯτʂ
    IPUGJY
    ΞϓϦ։ൃϑϩʔ
    (JU'MPXΛ༻͍ͨ
    .BTUFS
    %FWFMPQ
    )PUGJY
    3FMFBTF
    'FBUVSF

    View full-size slide

  33. νʔϜϝϯόʔશһͰ
    పఈ͢Δͷେมͦ͏ͩ͠
    ΋ͬͱ؆୯ʹͰ͖ͳ͍ͷʁ
    ΞϓϦ։ൃϑϩʔ
    (JU'MPXΛ༻͍ͨ

    View full-size slide

  34. (JU'MPX $PNNBOE
    ΞϓϦ։ൃϑϩʔ
    (JU'MPXΛ༻͍ͨ

    View full-size slide

  35. (JU'MPX DPNNBOE
    • Mac (Homebrew)
    $ brew install git-flow
    • Linux (apt-get)
    $ apt-get install git-flow
    • Windows
    $ ͜͜ʹه͢ʹ͸༨ന͕ڱ͗͢Δ
    ΞϓϦ։ൃϑϩʔ
    (JU'MPXΛ༻͍ͨ

    View full-size slide

  36. (JU'MPX DPNNBOE
    $ git flow init
    $ git flow feature start
    $ git flow feature finish
    $ git flow feature publish
    ΞϓϦ։ൃϑϩʔ
    (JU'MPXΛ༻͍ͨ

    View full-size slide

  37. (JU'MPX PO
    ʮπʔϧόʔΛΧελϚΠζʯ
    ͔ΒϘλϯΛදࣔ͢Δ͔
    ʮϝχϡʔʯ͔Βૢ࡞Ͱ͖ΔΑ
    ΞϓϦ։ൃϑϩʔ
    (JU'MPXΛ༻͍ͨ

    View full-size slide

  38. (JU'MPX 5JQT
    ΞϓϦ։ൃϑϩʔ
    (JU'MPXΛ༻͍ͨ

    View full-size slide

  39. 'FBUVSFϒϥϯν͕

    ڊେʹͳͬͪΌ͔ͬͨΒ

    1VMM3FRVFTUΛ۠੾Γ͍ͨΜ͚ͩͲʜ
    ΞϓϦ։ൃϑϩʔ
    (JU'MPXΛ༻͍ͨ

    View full-size slide

  40. GFBUVSFGVOD@CBTF
    GFBUVSFGVOD@ GFBUVSFGVOD@ GFBUVSFGVOD@
    GFBUVSF༻ͷϕʔεϒϥϯν

    Λ༻ҙͯ͜͠·Ίʹ13Λग़͢
    ΞϓϦ։ൃϑϩʔ
    (JU'MPXΛ༻͍ͨ
    %FWFMPQ
    'FBUVSF

    View full-size slide

  41. GFBUVSFGVOD@CBTF
    GFBUVSFGVOD@
    GFBUVSFGVOD@
    GFBUVSFGVOD@
    ϨϏϡʔ͕௥͍͔ͭͳ͍৔߹͸
    ͜Μͳܗ΋͋Γ
    ΞϓϦ։ൃϑϩʔ
    (JU'MPXΛ༻͍ͨ
    %FWFMPQ
    'FBUVSF

    View full-size slide

  42. (JU'MPXʹఆٛ͞Εͯͳ͍͜ͱͰ΋

    ӡ༻ʹ߹ΘͤͯΞϨϯδ͢Δ͜ͱͰ
    ࣮༻ੑ͕૿͠·͢
    ΞϓϦ։ൃϑϩʔ
    (JU'MPXΛ༻͍ͨ

    View full-size slide

  43. ΞϓϦ։ൃϑϩʔ
    (JU'MPXΛ༻͍ͨ

    View full-size slide

  44. ࿈ܞʹΑΔ࡞ۀࣗಈԽ
    $*πʔϧͱϒϥϯνӡ༻ͷ

    View full-size slide

  45. ࿈ܞʹΑΔ࡞ۀࣗಈԽ
    $*πʔϧͱϒϥϯνӡ༻ͷ
    νʔϜن໛ͷ֦େʹ൐ͬͯ
    ૿͑ͯ͘Δͷ͕

    View full-size slide

  46. ϒϥϯν਺΍ίϛοτ਺ɺ
    ͦͯ͠σϓϩΠճ਺
    ࿈ܞʹΑΔ࡞ۀࣗಈԽ
    $*πʔϧͱϒϥϯνӡ༻ͷ

    View full-size slide

  47. ਓ͕ؒ΍Δඞཁͷͳ͍
    ࣗಈԽग़དྷΔ࡞ۀ͸
    $*πʔϧʹ೚ͤΑ͏ʂ
    ࿈ܞʹΑΔ࡞ۀࣗಈԽ
    $*πʔϧͱϒϥϯνӡ༻ͷ

    View full-size slide

  48. $*πʔϧͬͯ
    5SBWJT$*ͱ͔$JSDMF$*ͱ͔
    +FOLJOTͱ͔#JUSJTFͱ͔
    ͨ͘͞Μ͋Δ͚Ͳ
    ͲΕΛ࢖͑͹͍͍ͷʁ
    ࿈ܞʹΑΔ࡞ۀࣗಈԽ
    $*πʔϧͱϒϥϯνӡ༻ͷ

    View full-size slide

  49. ಈ͚͹ͳΜͰ΋͍͍Ͱ͢
    ࿈ܞʹΑΔ࡞ۀࣗಈԽ
    $*πʔϧͱϒϥϯνӡ༻ͷ

    View full-size slide

  50. ͜͜Ͱ͸࠷ۙྲྀߦΓͷ
    Λ࢖ͬͯΈ·͢
    ࿈ܞʹΑΔ࡞ۀࣗಈԽ
    $*πʔϧͱϒϥϯνӡ༻ͷ

    View full-size slide

  51. #JUSJTFͷʢݸਓతʹࢥ͏ʣϝϦοτ
    (6*Ͱࢹ֮తʹ૊ΊΔͨΊෑډ͕௿͍ʢ$6*Ͱ΋૊ΊΔʣ
    :".-ϑΝΠϧΛϦϙδτϦʹؚΊΔඞཁ͕ͳ͘ൿಗ৘ใΛ
    আ֎ͤ͞΍͍͢ʢؚΊΔΑ͏ʹ΋Ͱ͖Δʣ
    ΞϓϦʹಛԽ͓ͯ͠Γɺূ໌ॻपΓͷαϙʔτ͕͋Δ
    ࿈ܞʹΑΔ࡞ۀࣗಈԽ
    $*πʔϧͱϒϥϯνӡ༻ͷ

    View full-size slide

  52. (6*Ͱࢹ֮తʹ૊ΊΔʢ$6*Ͱ΋૊ΊΔʣ
    ΤσΟλ͕
    ྑ͘ग़དྷ͍ͯͯ࣍ʹԿΛ
    ͢Δͷ͔͕௚ײతʹΘ͔Δ
    ࿈ܞʹΑΔ࡞ۀࣗಈԽ
    $*πʔϧͱϒϥϯνӡ༻ͷ

    View full-size slide

  53. (6*Ͱࢹ֮తʹ૊ΊΔʢ$6*Ͱ΋૊ΊΔʣ
    $*πʔϧͷ
    ϝϯςφϯεଐਓԽɾ৬ਓԽ
    Λܰݮग़དྷΔ
    ʂʁ
    ࿈ܞʹΑΔ࡞ۀࣗಈԽ
    $*πʔϧͱϒϥϯνӡ༻ͷ

    View full-size slide

  54. :".-ϑΝΠϧΛϦϙδτϦʹؚΊΔඞཁ͕ͳ͍
    :".-ϑΝΠϧΛ#JUSJTFଆͰ࣋ͪɺ

    ൿಗ৘ใΛѻ͏ઐ༻ྖҬ΋͋ΔͨΊ
    ϦϙδτϦ͔Βػີ৘ใΛআ֎ͤ͞΍͍͢
    ࿈ܞʹΑΔ࡞ۀࣗಈԽ
    $*πʔϧͱϒϥϯνӡ༻ͷ

    View full-size slide

  55. ΞϓϦʹಛԽ͓ͯ͠Γɺূ໌ॻपΓͷαϙʔτ͕͋Δ
    ࿈ܞʹΑΔ࡞ۀࣗಈԽ
    $*πʔϧͱϒϥϯνӡ༻ͷ

    View full-size slide

  56. ͜͜·Ͱ ਪ͠Ͱ͕͢
    ࿈ܞʹΑΔ࡞ۀࣗಈԽ
    $*πʔϧͱϒϥϯνӡ༻ͷ

    View full-size slide

  57. ࿈ܞʹΑΔ࡞ۀࣗಈԽ
    $*πʔϧͱϒϥϯνӡ༻ͷ
    ಈ͚͹ͳΜͰ΋͍͍Ͱ͢

    View full-size slide

  58. $*πʔϧͱ(JU'MPXͱͷ࿈ܞ
    ࿈ܞʹΑΔ࡞ۀࣗಈԽ
    $*πʔϧͱϒϥϯνӡ༻ͷ

    View full-size slide

  59. ࿈ܞʹΑΔ࡞ۀࣗಈԽ
    $*πʔϧͱϒϥϯνӡ༻ͷ
    ຊ൪؀ڥ εςʔδϯά؀ڥ
    withͷProductFlaverύλʔϯ

    View full-size slide

  60. (JU'MPXͱטΈ߹͏Α͏ʹ
    ϫʔΫϑϩʔΛ࡞ͬͯΈ·͢ʂ
    ͜͜Ͱ͸εςʔδϯά؀ڥϏϧυͱ
    ຊ൪؀ڥϏϧυ͕͋Δલఏͱ͠·͢
    ࿈ܞʹΑΔ࡞ۀࣗಈԽ
    $*πʔϧͱϒϥϯνӡ༻ͷ
    .BTUFS
    %FWFMPQ
    )PUGJY
    3FMFBTF
    'FBUVSF

    View full-size slide

  61. GFBUVSFGVOD
    1VMM3FRVFTUΛ
    ࡞ͬͨͱ͖ʹ5FTUΛ૸ΒͤΔΑ͏ʹ
    ϫʔΫϑϩʔΛ૊Έ·͢
    ࿈ܞʹΑΔ࡞ۀࣗಈԽ
    $*πʔϧͱϒϥϯνӡ༻ͷ
    .BTUFS
    %FWFMPQ
    )PUGJY
    3FMFBTF
    'FBUVSF

    View full-size slide

  62. Activate SSH Key
    Git Clone Repository
    Install missing Android SDK
    components
    Android Unit Test
    Danger
    6OJU 5FTU ϑϩʔ
    τϦΨʔ 16-- 3&26&45
    4PVSDF CSBODI
    5BSHFU CSBODI
    ࿈ܞʹΑΔ࡞ۀࣗಈԽ
    $*πʔϧͱϒϥϯνӡ༻ͷ
    #JUSJTFͰ͸Ұ࿈ͷॲཧΛ
    ·ͱΊͨ΋ͷΛʮϫʔΫϑϩʔʯ
    ͱݺͼ·͢

    View full-size slide

  63. GFBUVSFGVOD
    %FWFMPQʹ1VTIͨ͠ͱ͖͸
    ػೳ࣮૷ͷ۠੾ΓͳͷͰ
    εςʔδϯά༻"1,ΛσϓϩΠΛ͠·͢
    ࿈ܞʹΑΔ࡞ۀࣗಈԽ
    $*πʔϧͱϒϥϯνӡ༻ͷ
    .BTUFS
    %FWFMPQ
    )PUGJY
    3FMFBTF
    'FBUVSF

    View full-size slide

  64. Activate SSH Key
    Git Clone Repository
    Install missing Android SDK
    components
    Android Build
    APK Info
    Sign APK
    DeployGate Upload
    Send a Slack
    *OUFSOBM %FQMPZ ϑϩʔ
    τϦΨʔ 164)
    #SBODI EFWFMPQ SFMFBTF IPUGJY
    ࿈ܞʹΑΔ࡞ۀࣗಈԽ
    $*πʔϧͱϒϥϯνӡ༻ͷ

    View full-size slide

  65. GFBUVSFGVOD
    ࿈ܞʹΑΔ࡞ۀࣗಈԽ
    $*πʔϧͱϒϥϯνӡ༻ͷ
    .BTUFS
    %FWFMPQ
    )PUGJY
    3FMFBTF
    'FBUVSF

    View full-size slide

  66. SFMFBTF
    ϦϦʔε४උʹೖΔͨΊ
    όάमਖ਼౳ͷίϛοτ͕͋Γ࣍ୈ
    εςʔδϯά༻ͱຊ൪༻ͲͪΒ΋
    σϓϩΠΛߦ͍ݕূ͠·͢
    ࿈ܞʹΑΔ࡞ۀࣗಈԽ
    $*πʔϧͱϒϥϯνӡ༻ͷ
    .BTUFS
    %FWFMPQ
    )PUGJY
    3FMFBTF
    'FBUVSF

    View full-size slide

  67. UBH


    SFMFBTF
    UBH͕͚ͭΒΕͨ͜ͱΛτϦΨʔʹ
    1MBZ4UPSF΁ຊ൪༻"1,ͷΞοϓϩʔυΛ
    ߦ͍·͢
    ࿈ܞʹΑΔ࡞ۀࣗಈԽ
    $*πʔϧͱϒϥϯνӡ༻ͷ
    .BTUFS
    %FWFMPQ
    )PUGJY
    3FMFBTF
    'FBUVSF

    View full-size slide

  68. Activate SSH Key
    Git Clone Repository
    Install missing Android SDK
    components
    Android Build
    APK Info
    Sign APK
    Google Play Deploy
    Send a Slack
    4UPSF VQMPBE ϑϩʔ
    τϦΨʔ 5"(
    5BH OBNF
    ࿈ܞʹΑΔ࡞ۀࣗಈԽ
    $*πʔϧͱϒϥϯνӡ༻ͷ

    View full-size slide

  69. UBH


    SFMFBTF
    ࿈ܞʹΑΔ࡞ۀࣗಈԽ
    $*πʔϧͱϒϥϯνӡ༻ͷ
    .BTUFS
    %FWFMPQ
    )PUGJY
    3FMFBTF
    'FBUVSF

    View full-size slide

  70. UBH


    IPUGJY
    ۓٸ౓ͷߴ͍ରԠதͳͷͰ
    3FMFBTFϒϥϯνͱಉ༷ʹίϛοτ࣌ʹ
    εςʔδϯά༻ͱຊ൪༻ͲͪΒ΋
    σϓϩΠΛߦ͍ݕূ͠·͢
    ࿈ܞʹΑΔ࡞ۀࣗಈԽ
    $*πʔϧͱϒϥϯνӡ༻ͷ
    .BTUFS
    %FWFMPQ
    )PUGJY
    3FMFBTF
    'FBUVSF

    View full-size slide

  71. ͝঺հͨ͠ͷ͸͋͘·Ͱ

    ฐࣾͷνʔϜͰͷద༻ྫͳͷͰɺ
    νʔϜʹ߹Θͤͯ࠷దͳϑϩʔΛ

    ݟ͚͍ͭͯͩ͘͞ʂ
    ࿈ܞʹΑΔ࡞ۀࣗಈԽ
    $*πʔϧͱϒϥϯνӡ༻ͷ

    View full-size slide

  72. $* 5JQT
    ࿈ܞʹΑΔ࡞ۀࣗಈԽ
    $*πʔϧͱϒϥϯνӡ༻ͷ

    View full-size slide

  73. GFBUVSFGVOD@CBTF
    GFBUVSFGVOD@ GFBUVSFGVOD@ GFBUVSFGVOD@
    ن໛ͷେ͖͍GFBUVSFͷ৔߹

    ϕʔεGFBUVSFϒϥϯν໊ʹϧʔϧΛઃ͚ͯ

    ͦ͜ʹରͯ͠$*Λ૊Ήͷ͕ΦεεϝͰ͢

    ʮτϦΨʔྫɿGFBUVSF@CBTFʯ
    ΞϓϦ։ൃϑϩʔ
    (JU'MPXΛ༻͍ͨ
    %FWFMPQ
    'FBUVSF

    View full-size slide

  74. ॊೈͳϫʔΫϑϩʔΛ૊Ή
    ϫʔΫϑϩʔͷ࠶ར༻ՄೳΛҙࣝ͢Δ
    ճಉ͜͡ͱΛॻ͔ͳ͍
    ϓϩδΣΫτʹґଘ͢Δ৘ใ͸ม਺Խͯ͠੾Γग़͢
    ࿈ܞʹΑΔ࡞ۀࣗಈԽ
    $*πʔϧͱϒϥϯνӡ༻ͷ

    View full-size slide

  75. Activate SSH Key
    Git Clone Repository
    Install missing Android SDK
    components
    Android Build
    APK Info
    Sign APK
    DeployGate Upload
    Send a Slack
    TFUVQ CVJME EFQMPZ
    OPUJGZ
    ϫʔΫϑϩʔΛখ෼͚ʹ͢Δ
    ࿈ܞʹΑΔ࡞ۀࣗಈԽ
    $*πʔϧͱϒϥϯνӡ༻ͷ

    View full-size slide

  76. ͪͳΈʹ#JUSJTFͰ͸
    ϫʔΫϑϩʔ໊ͷઌ಄ʹΞϯμʔόʔΛ͚ͭΔ͜ͱͰ

    ୯ମͰ͸࣮ߦͰ͖ͳ͍ʮϢʔςΟϦςΟʔϑϩʔʯ

    ͱͯ͠ఆٛ͢Δ͜ͱ͕ՄೳͰ͢
    @CVJMEͱ͍͏໊લʹ͓ͯ͘͜͠ͱͰ
    ૊Έ߹Θͤͯ࢖͏͜ͱΛ໌ࣔͰ͖·͢ʂ
    ࿈ܞʹΑΔ࡞ۀࣗಈԽ
    $*πʔϧͱϒϥϯνӡ༻ͷ

    View full-size slide

  77. Android Build
    APK Info
    Sign APK
    CVJME
    • ModuleName
    • ex) app
    • VariantName
    • ex) stagingRelease
    ϓϩδΣΫτ͝ͱʹมΘΔ৘ใ
    ؀ڥม਺ͱͯ͠ఆٛ͢Δ
    ˣ
    ࿈ܞʹΑΔ࡞ۀࣗಈԽ
    $*πʔϧͱϒϥϯνӡ༻ͷ

    View full-size slide

  78. ͜ΕΒΛҙ͓ࣝͯ͘͠ͱ
    ৽͍͠ϫʔΫϑϩʔͷ࡞੒΍
    ผϓϩδΣΫτ΁ͷద༻ͳͲ͕
    ॊೈʹߦͳ͑·͢
    ࿈ܞʹΑΔ࡞ۀࣗಈԽ
    $*πʔϧͱϒϥϯνӡ༻ͷ

    View full-size slide

  79. ͜͜·Ͱͷ಺༰Λԡ͑ͨ͞#JUSJTF༻ͷ

    ZBNMϑΝΠϧΛ(JTUʹΞοϓͯ͋͠ΔͷͰɺ

    Α͚Ε͹͓࢖͍͍ͩ͘͞
    IUUQTHJTUHJUIVCDPN,B[B,BHPEGFFBFDEEB
    CJUSJTFͷZBNMλϒʹίϐϖͯ͠

    ϓϩδΣΫτʹ߹Θͤͯ؀ڥม਺ &OW 7FST 4FDSFUT
    Λ

    ηοτ͢Ε͹࢖͑·͢
    ࿈ܞʹΑΔ࡞ۀࣗಈԽ
    $*πʔϧͱϒϥϯνӡ༻ͷ

    View full-size slide

  80. ׆༻ͨ҆͠ఆతͳϦϦʔεख๏
    (PPHMF 1MBZ %FWFMPQFS "1*Λ

    View full-size slide

  81. (PPHMF 1MBZ %FWFMPQFS "1*Λ
    ͨ҆͠ఆతͳϦϦʔεख๏
    (PPHMF1MBZ4UPSFͰͷ

    ϦϦʔεࢧԉػೳͷҰͭ
    ʮஈ֊తͳެ։ʯ

    View full-size slide

  82. ετΞͰͷஈ֊తެ։ͷྫ











    ೔໨ ೔໨ ೔໨ ೔໨
    (PPHMF 1MBZ %FWFMPQFS "1*Λ
    ͨ҆͠ఆతͳϦϦʔεख๏

    View full-size slide

  83. "QQ4UPSF

    J04

    (PPHMF1MBZ

    "OESPJE

    ެ։ׂ߹ ݻఆׂ߹ ୯ҐͰࢦఆՄೳ
    શެ։·Ͱͷ೔਺
    ೔ݻఆ

    ్தͰશެ։΁੾Γସ͑Մೳ

    ʹͨ࣌͠
    ߋ৽ํ๏
    ࣗಈͷΈ

    ೔͝ͱʹ֦େ

    खಈͷΈ

    ೚ҙͷλΠϛϯά

    (PPHMF 1MBZ %FWFMPQFS "1*Λ
    ͨ҆͠ఆతͳϦϦʔεख๏

    View full-size slide

  84. (PPHMF 1MBZ %FWFMPQFS "1*Λ
    ͨ҆͠ఆతͳϦϦʔεख๏
    "QQ4UPSF

    J04

    (PPHMF1MBZ

    "OESPJE

    ެ։ׂ߹ ݻఆׂ߹ ୯ҐͰࢦఆՄೳ
    શެ։·Ͱͷ೔਺
    ೔ݻఆ

    ్தͰશެ։΁੾Γସ͑Մೳ

    ʹͨ࣌͠
    ߋ৽ํ๏
    ࣗಈͷΈ

    ೔͝ͱʹ֦େ

    खಈͷΈ

    ೚ҙͷλΠϛϯά

    View full-size slide

  85. ϦϦʔεස౓͕ߴ͍ͱɺ

    (PPHMF1MBZ͸खಈͰ͔͠

    ߋ৽Ͱ͖ͳ͍ͷ͕ਏ͍ʜ
    (PPHMF 1MBZ %FWFMPQFS "1*Λ
    ͨ҆͠ఆతͳϦϦʔεख๏

    View full-size slide

  86. ͦΕɺ

    (PPHMF 1MBZ %FWFMPQFS "1*

    ͰղܾͰ͖ΔΑ
    (PPHMF 1MBZ %FWFMPQFS "1*Λ
    ͨ҆͠ఆతͳϦϦʔεख๏

    View full-size slide

  87. (PPHMF 1MBZ %FWFMPQFS "1*Λ
    ͨ҆͠ఆతͳϦϦʔεख๏

    View full-size slide

  88. ஈ֊తެ։ΛࣗಈԽ͢Δ
    (PPHMF 1MBZ %FWFMPQFS "1*Λ
    ͨ҆͠ఆతͳϦϦʔεख๏

    View full-size slide

  89. ΍Γ͍ͨ͜ͱ
    ຖ೔ʓʓ࣌ʹࣗಈతʹެ։ൺ཰ΛҾ্͖͛Δ
    Ҿ্͖͛Δެ։ൺ཰ΛઃఆͰ͖Δ
    Ҿ্͖͕͛ߦΘΕͨΒ4MBDLͰ௨஌͢Δ
    (PPHMF 1MBZ %FWFMPQFS "1*Λ
    ͨ҆͠ఆతͳϦϦʔεख๏

    View full-size slide

  90. (PPHMF 1MBZ %FWFMPQFS "1*Ͱग़དྷΔ͜ͱ
    ৽όʔδϣϯͷΞϓϦͷΞοϓϩʔυͱϦϦʔε
    ϩʔΧϥΠζͨ͠ςΩετ΍άϥϑΟοΫΛؚΉɺ
    (PPHMF 1MBZ ετΞͷϦετฤू
    ΞϓϦ಺ΞΠςϜͷΧλϩάɺ঎඼ͷߪೖঢ়گɺ
    ΞϓϦͷఆظߪೖͷ؅ཧ
    (PPHMF 1MBZ %FWFMPQFS "1*Λ
    ͨ҆͠ఆతͳϦϦʔεख๏

    View full-size slide

  91. (PPHMF 1MBZ %FWFMPQFS "1*Λ
    ͨ҆͠ఆతͳϦϦʔεख๏
    {
    "track": string,
    "releases": [
    {
    "name": string,
    "versionCodes": [
    long
    ],
    "userFraction": double,
    "releaseNotes": [
    {
    "language": string,
    "text": string
    }
    ],
    "status": string
    }
    ]
    }
    ϦϦʔε৘ใͷ

    ϨεϙϯεܗࣜͰ͢
    +BWBͱ1ZUIPOʹؔͯ͠͸
    ϥΠϒϥϦ΋༻ҙ͞Ε͍ͯ·͢

    View full-size slide

  92. (PPHMF 1MBZ %FWFMPQFS "1*Λ
    ͨ҆͠ఆతͳϦϦʔεख๏
    {
    "track": string,
    "releases": [
    {
    "name": string,
    "versionCodes": [
    long
    ],
    "userFraction": double,
    "releaseNotes": [
    {
    "language": string,
    "text": string
    }
    ],
    "status": string
    }
    ]
    }
    7FSTJPO/BNF FY

    7FSTJPO$PEF FY

    ഑৴ൺ཰ GSBDUJPO
    ˞JO1SPHSFTT IBMUFEҎ֎ͷ৔߹͸ฦ͞Ε·ͤΜ
    ഑৴ઌτϥοΫ໊
    ഑৴εςʔλε

    View full-size slide

  93. (PPHMF 1MBZ %FWFMPQFS "1*Λ
    ͨ҆͠ఆతͳϦϦʔεख๏
    {
    "track": string,
    "releases": [
    {
    "name": string,
    "versionCodes": [
    long
    ],
    "userFraction": double,
    "releaseNotes": [
    {
    "language": string,
    "text": string
    }
    ],
    "status": string
    }
    ]
    }
    • completed
    • draft
    • halted
    • inProgress
    ͷ͍ͣΕ͔
    • alpha
    • beta
    • production
    • rollout
    • internal
    ͷ͍ͣΕ͔
    ഑৴ઌτϥοΫ໊
    ഑৴εςʔλε

    View full-size slide

  94. ͜ΕΛ۩ମతͳॲཧʹ

    མͱ͠ࠐΉͱʜ
    (PPHMF 1MBZ %FWFMPQFS "1*Λ
    ͨ҆͠ఆతͳϦϦʔεख๏

    View full-size slide

  95. (PPHMF 1MBZ %FWFMPQFS "1*Λ
    ͨ҆͠ఆతͳϦϦʔεख๏
    {
    "track": string,
    "releases": [
    {
    "name": string,
    "versionCodes": [
    long
    ],
    "userFraction": double,
    "releaseNotes": [
    {
    "language": string,
    "text": string
    }
    ],
    "status": string
    }
    ]
    }
    ಛఆͷ೔࣌ʹ഑৴ઌτϥοΫ͕

    ʮQSPEVDUJPOʯ͔ͭ഑৴εςʔλε͕

    ʮJO1SPHSFTTʯͷ৔߹ʹ

    ࣄલʹఆٛͨ͠഑৴ൺ཰΁มߋ͢Δ


    ·ͨɺ࣍ʹมߋ͢Δ഑৴ൺ཰͕

    ͷ৔߹͸഑৴εςʔλεΛ
    ʮDPNQMFUFEʯ΁มߋ͢Δ

    View full-size slide

  96. ࣾ಺ͷۭ͍ͯΔ1$ʹ

    αʔόʔΛཱͯͯղܾͯ͠ΈΑ͏ʂ
    (PPHMF 1MBZ %FWFMPQFS "1*Λ
    ͨ҆͠ఆతͳϦϦʔεख๏

    View full-size slide

  97. ͱ͍͏Θ͚Ͱ

    αʔόʔΛ࡞ͬͯΈͨ
    (PPHMF 1MBZ %FWFMPQFS "1*Λ
    ͨ҆͠ఆతͳϦϦʔεख๏

    View full-size slide

  98. ,B[B,BHP 4UFQ3FMFBTF%JTQBUDIFS
    IUUQTHJUIVCDPN,B[B,BHP4UFQ3FMFBTF%JTQBUDIFS
    (PPHMF 1MBZ %FWFMPQFS "1*Λ
    ͨ҆͠ఆతͳϦϦʔεख๏

    View full-size slide

  99. ࠓճ͸͔ͤͬ͘ͳͷͰ
    (PPHMF 1MBZ %FWFMPQFS "1*Λ
    ͨ҆͠ఆతͳϦϦʔεख๏

    View full-size slide

  100. Ͱॻ͍ͯ·͢
    ϑϧ,PUMJOͷαʔόʔαΠυϑϨʔϜϫʔΫ
    (PPHMF 1MBZ %FWFMPQFS "1*Λ
    ͨ҆͠ఆతͳϦϦʔεख๏

    View full-size slide

  101. Ͱ͖Δ͜ͱ
    ϓϩδΣΫτ͝ͱͷઃఆΛ8FC6*͔Βߦ͑Δ
    ൺ཰Ҿ্͖͛࣌ࠁΛ$SPOελΠϧͰࢦఆ
    Ҿ্͖͛ஈ֊Λ_ͰΧϯϚ۠੾ΓͰࢦఆ

    ʢશެ։·Ͱͷ೔਺ʣ
    Ҿ্͖͛લޙͷ৘ใΛ4MBDL΁௨஌
    (PPHMF 1MBZ %FWFMPQFS "1*Λ
    ͨ҆͠ఆతͳϦϦʔεख๏

    View full-size slide

  102. (PPHMF 1MBZ %FWFMPQFS "1*Λ
    ͨ҆͠ఆతͳϦϦʔεख๏
    ͜Μͳ௨஌͕དྷΔΑ͏ʹͯ͠Έ·ͨ͠

    View full-size slide

  103. (PPHMF 1MBZ %FWFMPQFS "1*Λ
    ͨ҆͠ఆతͳϦϦʔεख๏
    ࣮ߦʹඞཁͳ΋ͷ
    • PlayConsole͔Βൃߦͨ͠αʔϏεΞΧ΢ϯτΩʔ

    (p12ϑΝΠϧ)
    • ΞϓϦͷύοέʔδ໊
    ඞཁʹԠͯ͡
    • SlackͷWebhook URL

    View full-size slide

  104. ͜ΕͰ

    ϦϦʔεޙʹʹͳΔ·Ͱ

    खಈߋ৽͢Δ೔ʑ͔Β

    ղ์͞Εͨͧʂ
    (PPHMF 1MBZ %FWFMPQFS "1*Λ
    ͨ҆͠ఆతͳϦϦʔεख๏

    View full-size slide

  105. ΤϥʔνΣοΫपΓͱ͔

    ͔ͳΓ؁͘ߥ࡟Γͳ෦෼΋ଟ͍ͷͰ

    ͦ͜͸͝༰ࣻΛʜʂ
    (PPHMF 1MBZ %FWFMPQFS "1*Λ
    ͨ҆͠ఆతͳϦϦʔεख๏

    View full-size slide

  106. ͓·͚
    (PPHMF 1MBZ %FWFMPQFS "1*Λ
    ͨ҆͠ఆతͳϦϦʔεख๏

    View full-size slide

  107. ͜͜·Ͱ͖ͨΒ

    $SBTIMZUJDT΋࿈ܞͤͯ͞
    ࣗಈతʹެ։ൣғΛ޿͛Δ͔
    ൑அͰ͖ͳ͍ͷʁ
    (PPHMF 1MBZ %FWFMPQFS "1*Λ
    ͨ҆͠ఆతͳϦϦʔεख๏

    View full-size slide

  108. ग़དྷͳ͘͸ͳͦ͞͏͚ͩͲ
    ͘͢͝ख͕͔͔ؒΓͦ͏ʜ
    (PPHMF 1MBZ %FWFMPQFS "1*Λ
    ͨ҆͠ఆతͳϦϦʔεख๏

    View full-size slide

  109. $SBTIMZUJDT "1*
    $SBTIMZUJDT "1*͔ΒΫϥογϡ৘ใΛ
    औಘ͢Δ͜ͱࣗମ͸ग़དྷ·͕͢ɺ
    ΫϥογϡΠϕϯτ͕ൃੜͨ͠λΠϛϯάͷΈͰ͔͠औಘͰ͖
    ͳ͍ͨΊࣗલͰσʔλΛ஝ੵͯ͠ղੳ͢Δඞཁ͕͋Γ·͢
    (PPHMF 1MBZ %FWFMPQFS "1*Λ
    ͨ҆͠ఆతͳϦϦʔεख๏
    IUUQTGJSFCBTFHPPHMFDPNEPDTDSBTIMZUJDTFYUFOEXJUIDMPVEGVODUJPOT
    ެࣜυΩϡϝϯτ

    View full-size slide

  110. ߏஙɾ࣮૷ίετΛؑΈͯ
    $SBTIMZUJDTͷνΣοΫʹ͍ͭͯ͸
    ݱঢ়໨ࢹͰߦ͍ͬͯ·͢
    (PPHMF 1MBZ %FWFMPQFS "1*Λ
    ͨ҆͠ఆతͳϦϦʔεख๏

    View full-size slide

  111. ྑ͍Ҋ͋Ε͹
    ͥͻڭ͑ͯԼ͍͞ʂ
    (PPHMF 1MBZ %FWFMPQFS "1*Λ
    ͨ҆͠ఆతͳϦϦʔεख๏

    View full-size slide

  112. $PODMVTJPO
    (JU'MPXΛ࣠ʹ؀ڥ੔උΛ͢Δ͜ͱͰ
    (JU'MPXͷखॱʹԊͬͯϝϯόʔ͕։ൃΛਐΊΕ͹
    ϒϥϯνӡ༻͔ΒςετɺσϓϩΠɺϦϦʔε·Ͱ
    ࣗಈతͰ҆શ͔ͭ҆ఆతʹߦ͑ɺ
    ։ൃʹूதͰ͖Δ࣌ؒΛ૿΍͢͜ͱ͕ग़དྷΔʂ

    View full-size slide

  113. ͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠ʂ

    View full-size slide