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 Slide

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

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

    View Slide

  3. View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

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

    View Slide

  30. [email protected]@
    UBH


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

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

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

    View Slide

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

    View Slide

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

    View Slide

  33. UBH


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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  40. 'FBUVSFϒϥϯν͕

    ڊେʹͳͬͪΌ͔ͬͨΒ

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

    View Slide

  41. [email protected]
    [email protected] [email protected] [email protected]
    GFBUVSF༻ͷϕʔεϒϥϯν

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

    View Slide

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

    View Slide

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

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  63. 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 Slide

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

    View Slide

  65. 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 Slide

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

    View Slide

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

    View Slide

  68. UBH


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

    View Slide

  69. 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 Slide

  70. UBH


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

    View Slide

  71. UBH


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

    View Slide

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

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

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

    View Slide

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

    View Slide

  74. [email protected]
    [email protected] [email protected] [email protected]
    ن໛ͷେ͖͍GFBUVSFͷ৔߹

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

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

    ʮτϦΨʔྫɿ[email protected]ʯ
    ΞϓϦ։ൃϑϩʔ
    (JU'MPXΛ༻͍ͨ
    %FWFMPQ
    'FBUVSF

    View Slide

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

    View Slide

  76. 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 Slide

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

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

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

    View Slide

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

    View Slide

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

    View Slide

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

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

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

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

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

    View Slide

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

    View Slide

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

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

    View Slide

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











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

    View Slide

  84. "QQ4UPSF

    J04

    (PPHMF1MBZ

    "OESPJE

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

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

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

    ೔͝ͱʹ֦େ

    खಈͷΈ

    ೚ҙͷλΠϛϯά

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

    View Slide

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

    J04

    (PPHMF1MBZ

    "OESPJE

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

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

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

    ೔͝ͱʹ֦େ

    खಈͷΈ

    ೚ҙͷλΠϛϯά

    View Slide

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

    (PPHMF1MBZ͸खಈͰ͔͠

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

    View Slide

  87. ͦΕɺ

    (PPHMF 1MBZ %FWFMPQFS "1*

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

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

    View Slide

  93. (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 Slide

  94. (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 Slide

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

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

    View Slide

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

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

    ʮJO1SPHSFTTʯͷ৔߹ʹ

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


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

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

    View Slide

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

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

    View Slide

  98. ͱ͍͏Θ͚Ͱ

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

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

    View Slide

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

    View Slide

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

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

    View Slide

  105. ͜ΕͰ

    ϦϦʔεޙʹʹͳΔ·Ͱ

    खಈߋ৽͢Δ೔ʑ͔Β

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

    View Slide

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

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

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

    View Slide

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

    View Slide

  108. ͜͜·Ͱ͖ͨΒ

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  113. ·ͱΊ

    View Slide

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

    View Slide

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

    View Slide