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

16d3962b8f11b7e801dacb129d20d8dd?s=47 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

16d3962b8f11b7e801dacb129d20d8dd?s=128

KazaKago

February 08, 2019
Tweet

Transcript

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

    CZ ஛ݪ %SPJE,BJHJ 
  2. ాଜ ݠհ !,B[B,BHP  גࣜձࣾΠάχε ࿀ѪϚονϯάαʔϏε ʠXJUIʡ "OESPJE։ൃྺ͸೥͘Β͍ J04΋΍ͬͯ·͢ ࣗݾ঺հ

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

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

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

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

    "1*Λ׆༻ͨ҆͠ఆతͳϦϦʔεख๏ ໨࣍ ໨࣍
  8. ϚΠϧετʔϯ  XJUIʹ͓͚Δݱঢ়ͱ

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

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

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

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

  13.  ϦϦʔε͸िؒʹҰ౓  2"ʹΑΔ֬ೝ͸ϦϦʔεʹ͖ͭฏۉ೔  ਺ϲ݄ʹҰ౓େن໛ϦϦʔε͕͋Δ  ϦϦʔε͸ि໌͚ʹߦ͏ ϚΠϧετʔϯ 

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

    ݄ Ր ਫ ໦ ۚ ౔ ։ൃ ։ൃऀνΣοΫ 2"νΣοΫ ೔ ݄ ϦϦʔε ϚΠϧετʔϯ  XJUIʹ͓͚Δݱঢ়ͱ ि໨ ि໨ ि໨
  15. ӡ༻͕ଐਓԽ͍ͯ͠Δͱ ਓͷೖΕସΘΓͷͨͼʹ ίετ͕͔͔Δ ϚΠϧετʔϯ  XJUIʹ͓͚Δݱঢ়ͱ

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

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

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

  19. ΞϓϦ։ൃϑϩʔ  (JU'MPXΛ༻͍ͨ ࣍ͷόʔδϣϯʹ ͲͷϒϥϯνΛ ೖΕΔΜ͚ͩͬʁ ͜ͳ͍ͩϦϦʔεͨ࣌͠ͷ ίϛοτ͕ߦํෆ໌ ࣗ෼ͷ࡞ۀϒϥϯνʹ ΄͔ͷਓͷͲͷରԠ͕

    ؚ·ΕͯΔ͔Θ͔Βͳ͍ ʮϦϦʔε͢Δ·Ͱ Ϛʔδ଴ͬͯͯʂʯ ظ͕ؒසൟʹ͋Δ
  20. ΋͏ͩΊͩ ΞϓϦ։ൃϑϩʔ  (JU'MPXΛ༻͍ͨ

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

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

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

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

  25. .BTUFS %FWFMPQ )PUGJY 3FMFBTF 'FBUVSF <- ۓٸόάରԠ༻ϒϥϯν <- ϦϦʔε४උ༻ϒϥϯν <-

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

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

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

  29. ฐࣾ"OESPJEνʔϜʹ͓͚ΔϚΠϧετʔϯ ΞϓϦ։ൃϑϩʔ  (JU'MPXΛ༻͍ͨ ೔ ݄ Ր ਫ ໦ ۚ

    ౔ ։ൃ ೔ ݄ Ր ਫ ໦ ۚ ౔ ։ൃ ։ൃऀνΣοΫ 2"νΣοΫ ೔ ݄ ϦϦʔε ͜ͷλΠϛϯάͰ
 SFMFBTFϒϥϯν࡞੒ ि໨ ि໨ ि໨
  30. GFBUVSFGVOD@GPS@ UBH
  SFMFBTF ΞϓϦ։ൃϑϩʔ  (JU'MPXΛ༻͍ͨ ͰϦϦʔε͢Δ಺༰͸
 SFMFBTFϒϥϯνʹִ཭͞Ε͍ͯΔͷͰ
 ͜ͷ࣌఺Ͱͷ։ൃʹணखͰ͖Δ

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

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

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

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

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

  36. (JU'MPX DPNNBOE • Mac (Homebrew) $ brew install git-flow •

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

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

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

  40. 'FBUVSFϒϥϯν͕
 ڊେʹͳͬͪΌ͔ͬͨΒ
 1VMM3FRVFTUΛ۠੾Γ͍ͨΜ͚ͩͲʜ ΞϓϦ։ൃϑϩʔ  (JU'MPXΛ༻͍ͨ

  41. GFBUVSFGVOD@CBTF GFBUVSFGVOD@ GFBUVSFGVOD@ GFBUVSFGVOD@ GFBUVSF༻ͷϕʔεϒϥϯν
 Λ༻ҙͯ͜͠·Ίʹ13Λग़͢ ΞϓϦ։ൃϑϩʔ  (JU'MPXΛ༻͍ͨ %FWFMPQ

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

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

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

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

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

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

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

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

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

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

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

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

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

  55. :".-ϑΝΠϧΛϦϙδτϦʹؚΊΔඞཁ͕ͳ͍ :".-ϑΝΠϧΛ#JUSJTFଆͰ࣋ͪɺ
 ൿಗ৘ใΛѻ͏ઐ༻ྖҬ΋͋ΔͨΊ ϦϙδτϦ͔Βػີ৘ใΛআ֎ͤ͞΍͍͢ ࿈ܞʹΑΔ࡞ۀࣗಈԽ  $*πʔϧͱϒϥϯνӡ༻ͷ

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

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

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

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

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

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

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

    3FMFBTF 'FBUVSF
  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Ͱ͸Ұ࿈ͷॲཧΛ ·ͱΊͨ΋ͷΛʮϫʔΫϑϩʔʯ ͱݺͼ·͢
  64. GFBUVSFGVOD %FWFMPQʹ1VTIͨ͠ͱ͖͸ ػೳ࣮૷ͷ۠੾ΓͳͷͰ εςʔδϯά༻"1,ΛσϓϩΠΛ͠·͢ ࿈ܞʹΑΔ࡞ۀࣗಈԽ  $*πʔϧͱϒϥϯνӡ༻ͷ .BTUFS %FWFMPQ )PUGJY

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

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

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

    %FWFMPQ )PUGJY 3FMFBTF 'FBUVSF
  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   ࿈ܞʹΑΔ࡞ۀࣗಈԽ  $*πʔϧͱϒϥϯνӡ༻ͷ
  70. UBH
  SFMFBTF ࿈ܞʹΑΔ࡞ۀࣗಈԽ  $*πʔϧͱϒϥϯνӡ༻ͷ .BTUFS %FWFMPQ )PUGJY 3FMFBTF

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

    .BTUFS %FWFMPQ )PUGJY 3FMFBTF 'FBUVSF
  72. ͝঺հͨ͠ͷ͸͋͘·Ͱ
 ฐࣾͷνʔϜͰͷద༻ྫͳͷͰɺ νʔϜʹ߹Θͤͯ࠷దͳϑϩʔΛ
 ݟ͚͍ͭͯͩ͘͞ʂ ࿈ܞʹΑΔ࡞ۀࣗಈԽ  $*πʔϧͱϒϥϯνӡ༻ͷ

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

  74. GFBUVSFGVOD@CBTF GFBUVSFGVOD@ GFBUVSFGVOD@ GFBUVSFGVOD@ ن໛ͷେ͖͍GFBUVSFͷ৔߹
 ϕʔεGFBUVSFϒϥϯν໊ʹϧʔϧΛઃ͚ͯ
 ͦ͜ʹରͯ͠$*Λ૊Ήͷ͕ΦεεϝͰ͢
 ʮτϦΨʔྫɿGFBUVSF @CBTFʯ ΞϓϦ։ൃϑϩʔ

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

  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 ϫʔΫϑϩʔΛখ෼͚ʹ͢Δ ࿈ܞʹΑΔ࡞ۀࣗಈԽ  $*πʔϧͱϒϥϯνӡ༻ͷ
  77. ͪͳΈʹ#JUSJTFͰ͸ ϫʔΫϑϩʔ໊ͷઌ಄ʹΞϯμʔόʔΛ͚ͭΔ͜ͱͰ
 ୯ମͰ͸࣮ߦͰ͖ͳ͍ʮϢʔςΟϦςΟʔϑϩʔʯ
 ͱͯ͠ఆٛ͢Δ͜ͱ͕ՄೳͰ͢ @CVJMEͱ͍͏໊લʹ͓ͯ͘͜͠ͱͰ ૊Έ߹Θͤͯ࢖͏͜ͱΛ໌ࣔͰ͖·͢ʂ ࿈ܞʹΑΔ࡞ۀࣗಈԽ  $*πʔϧͱϒϥϯνӡ༻ͷ

  78. Android Build APK Info Sign APK CVJME • ModuleName •

    ex) app • VariantName • ex) stagingRelease ϓϩδΣΫτ͝ͱʹมΘΔ৘ใ ؀ڥม਺ͱͯ͠ఆٛ͢Δ ˣ ࿈ܞʹΑΔ࡞ۀࣗಈԽ  $*πʔϧͱϒϥϯνӡ༻ͷ
  79. ͜ΕΒΛҙ͓ࣝͯ͘͠ͱ ৽͍͠ϫʔΫϑϩʔͷ࡞੒΍ ผϓϩδΣΫτ΁ͷద༻ͳͲ͕ ॊೈʹߦͳ͑·͢ ࿈ܞʹΑΔ࡞ۀࣗಈԽ  $*πʔϧͱϒϥϯνӡ༻ͷ

  80. ͜͜·Ͱͷ಺༰Λԡ͑ͨ͞#JUSJTF༻ͷ
 ZBNMϑΝΠϧΛ(JTUʹΞοϓͯ͋͠ΔͷͰɺ
 Α͚Ε͹͓࢖͍͍ͩ͘͞ IUUQTHJTUHJUIVCDPN,B[B,BHPEGFFBFDEEB CJUSJTFͷZBNMλϒʹίϐϖͯ͠
 ϓϩδΣΫτʹ߹Θͤͯ؀ڥม਺ &OW 7FST 4FDSFUT Λ


    ηοτ͢Ε͹࢖͑·͢ ࿈ܞʹΑΔ࡞ۀࣗಈԽ  $*πʔϧͱϒϥϯνӡ༻ͷ
  81. ׆༻ͨ҆͠ఆతͳϦϦʔεख๏  (PPHMF 1MBZ %FWFMPQFS "1*Λ

  82.  (PPHMF 1MBZ %FWFMPQFS "1*Λ ͨ҆͠ఆతͳϦϦʔεख๏ (PPHMF1MBZ4UPSFͰͷ
 ϦϦʔεࢧԉػೳͷҰͭ ʮஈ֊తͳެ։ʯ

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

      ೔໨ ೔໨ ೔໨ ೔໨  (PPHMF 1MBZ %FWFMPQFS "1*Λ ͨ҆͠ఆతͳϦϦʔεख๏
  84. "QQ4UPSF
 J04 (PPHMF1MBZ
 "OESPJE ެ։ׂ߹ ݻఆׂ߹ ୯ҐͰࢦఆՄೳ શެ։·Ͱͷ೔਺ ೔ݻఆ
 ్தͰશެ։΁੾Γସ͑Մೳ

    ʹͨ࣌͠ ߋ৽ํ๏ ࣗಈͷΈ
 ೔͝ͱʹ֦େ खಈͷΈ
 ೚ҙͷλΠϛϯά  (PPHMF 1MBZ %FWFMPQFS "1*Λ ͨ҆͠ఆతͳϦϦʔεख๏
  85.  (PPHMF 1MBZ %FWFMPQFS "1*Λ ͨ҆͠ఆతͳϦϦʔεख๏ "QQ4UPSF
 J04 (PPHMF1MBZ
 "OESPJE

    ެ։ׂ߹ ݻఆׂ߹ ୯ҐͰࢦఆՄೳ શެ։·Ͱͷ೔਺ ೔ݻఆ
 ్தͰશެ։΁੾Γସ͑Մೳ ʹͨ࣌͠ ߋ৽ํ๏ ࣗಈͷΈ
 ೔͝ͱʹ֦େ खಈͷΈ
 ೚ҙͷλΠϛϯά
  86. ϦϦʔεස౓͕ߴ͍ͱɺ
 (PPHMF1MBZ͸खಈͰ͔͠
 ߋ৽Ͱ͖ͳ͍ͷ͕ਏ͍ʜ  (PPHMF 1MBZ %FWFMPQFS "1*Λ ͨ҆͠ఆతͳϦϦʔεख๏

  87. ͦΕɺ
 (PPHMF 1MBZ %FWFMPQFS "1*
 ͰղܾͰ͖ΔΑ  (PPHMF 1MBZ %FWFMPQFS

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

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

  90. ΍Γ͍ͨ͜ͱ  ຖ೔ʓʓ࣌ʹࣗಈతʹެ։ൺ཰ΛҾ্͖͛Δ  Ҿ্͖͛Δެ։ൺ཰ΛઃఆͰ͖Δ  Ҿ্͖͕͛ߦΘΕͨΒ4MBDLͰ௨஌͢Δ  (PPHMF 1MBZ

    %FWFMPQFS "1*Λ ͨ҆͠ఆతͳϦϦʔεख๏
  91. (PPHMF 1MBZ %FWFMPQFS "1*Ͱग़དྷΔ͜ͱ  ৽όʔδϣϯͷΞϓϦͷΞοϓϩʔυͱϦϦʔε  ϩʔΧϥΠζͨ͠ςΩετ΍άϥϑΟοΫΛؚΉɺ (PPHMF 1MBZ

    ετΞͷϦετฤू  ΞϓϦ಺ΞΠςϜͷΧλϩάɺ঎඼ͷߪೖঢ়گɺ ΞϓϦͷఆظߪೖͷ؅ཧ  (PPHMF 1MBZ %FWFMPQFS "1*Λ ͨ҆͠ఆతͳϦϦʔεख๏
  92.  (PPHMF 1MBZ %FWFMPQFS "1*Λ ͨ҆͠ఆతͳϦϦʔεख๏ { "track": string, "releases":

    [ { "name": string, "versionCodes": [ long ], "userFraction": double, "releaseNotes": [ { "language": string, "text": string } ], "status": string } ] } ϦϦʔε৘ใͷ
 ϨεϙϯεܗࣜͰ͢ +BWBͱ1ZUIPOʹؔͯ͠͸ ϥΠϒϥϦ΋༻ҙ͞Ε͍ͯ·͢
  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Ҏ֎ͷ৔߹͸ฦ͞Ε·ͤΜ ഑৴ઌτϥοΫ໊ ഑৴εςʔλε
  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 ͷ͍ͣΕ͔ ഑৴ઌτϥοΫ໊ ഑৴εςʔλε
  95. ͜ΕΛ۩ମతͳॲཧʹ
 མͱ͠ࠐΉͱʜ  (PPHMF 1MBZ %FWFMPQFS "1*Λ ͨ҆͠ఆతͳϦϦʔεख๏

  96.  (PPHMF 1MBZ %FWFMPQFS "1*Λ ͨ҆͠ఆతͳϦϦʔεख๏ { "track": string, "releases":

    [ { "name": string, "versionCodes": [ long ], "userFraction": double, "releaseNotes": [ { "language": string, "text": string } ], "status": string } ] } ಛఆͷ೔࣌ʹ഑৴ઌτϥοΫ͕
 ʮQSPEVDUJPOʯ͔ͭ഑৴εςʔλε͕
 ʮJO1SPHSFTTʯͷ৔߹ʹ
 ࣄલʹఆٛͨ͠഑৴ൺ཰΁มߋ͢Δ
 
 ·ͨɺ࣍ʹมߋ͢Δ഑৴ൺ཰͕
 ͷ৔߹͸഑৴εςʔλεΛ ʮDPNQMFUFEʯ΁มߋ͢Δ
  97. ࣾ಺ͷۭ͍ͯΔ1$ʹ
 αʔόʔΛཱͯͯղܾͯ͠ΈΑ͏ʂ  (PPHMF 1MBZ %FWFMPQFS "1*Λ ͨ҆͠ఆతͳϦϦʔεख๏

  98. ͱ͍͏Θ͚Ͱ
 αʔόʔΛ࡞ͬͯΈͨ  (PPHMF 1MBZ %FWFMPQFS "1*Λ ͨ҆͠ఆతͳϦϦʔεख๏

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

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

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

  102. Ͱ͖Δ͜ͱ  ϓϩδΣΫτ͝ͱͷઃఆΛ8FC6*͔Βߦ͑Δ  ൺ཰Ҿ্͖͛࣌ࠁΛ$SPOελΠϧͰࢦఆ  Ҿ্͖͛ஈ֊Λ_ͰΧϯϚ۠੾ΓͰࢦఆ
 ʢશެ։·Ͱͷ೔਺ʣ  Ҿ্͖͛લޙͷ৘ใΛ4MBDL΁௨஌

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

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

    • ΞϓϦͷύοέʔδ໊ ඞཁʹԠͯ͡ • SlackͷWebhook URL
  105. ͜ΕͰ
 ϦϦʔεޙʹʹͳΔ·Ͱ
 खಈߋ৽͢Δ೔ʑ͔Β
 ղ์͞Εͨͧʂ  (PPHMF 1MBZ %FWFMPQFS "1*Λ ͨ҆͠ఆతͳϦϦʔεख๏

  106. ΤϥʔνΣοΫपΓͱ͔
 ͔ͳΓ؁͘ߥ࡟Γͳ෦෼΋ଟ͍ͷͰ
 ͦ͜͸͝༰ࣻΛʜʂ  (PPHMF 1MBZ %FWFMPQFS "1*Λ ͨ҆͠ఆతͳϦϦʔεख๏

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

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

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

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

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

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

  113. ·ͱΊ

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

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