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

CICDを導入して変わった モバイルアプリ開発体制

CICDを導入して変わった モバイルアプリ開発体制

NIFTY Tech Day 2022
https://techday.nifty.co.jp/2022/#time-1655

【CICDを導入して変わった モバイルアプリ開発体制】
ニフティライフスタイル株式会社のアプリ開発チームでは、手動でビルドやデプロイを実施していた状態からCI/CDツールを導入し、2年間かけて「モバイルアプリ開発の効率化」を実施してきました!
今回はツール(Firebase App Distribution, Bitriseなど)の選定理由や導入後の進め方から活用事例まで「0からここまで出来た」を実際の設定内容を用いて紹介します!
「CI/CDツールがあると良い」ということは分かっているが実際何が出来るのか分からない、何から始めたら良いか分からない、そんな方はぜひ聴きに来てください!

saikei (Keisuke Saito)

November 22, 2022
Tweet

More Decks by saikei (Keisuke Saito)

Other Decks in Programming

Transcript

  1. ձࣾ঺հɿαʔϏε঺հ ௞ି෺݅ݕࡧ ߪೖ෺݅ݕࡧ ܝࡌ෺݅਺ ໿1,300ສ݅※ ௞ି͔Βߪೖ·Ͱɺ Ո୳͠ͳΒ͓·͔ͤͷ ෆಈ࢈෺݅ҰׅݕࡧܕαʔϏε ΞϧόΠτݕࡧ ܝࡌٻਓ਺

    ໿360ສ݅※ όΠτ΋స৬΋ɺ ࢓ࣄ୳͠ͳΒ͓·͔ͤͷ ٻਓҊ݅ҰׅݕࡧܕαʔϏε ೔ؼΓԹઘݕࡧ ܝࡌࢪઃ਺ ໿1.6ສ݅※ શࠃͷ೔ؼΓԹཋࢪઃͷ৘ใ΍ ͓ಘͳΫʔϙϯ৘ใ/ޱίϛͷ ಠࣗఏڙαʔϏε ※2022೥3݄຤࣮੷ $PQZSJHIU˜/*'5:-JGFTUZMF$P -UE"MM3JHIUT3FTFSWFE
  2. ձࣾ঺հɿྦྷܭμ΢ϯϩʔυ਺ ྦྷܭ 1,000ສ μ΢ϯϩʔυಥഁ ※2021೥9݄ J04"OESPJE ϦϦʔε "OESPJE ϦϦʔε "OESPJE

    ϦϦʔε J04 ϦϦʔε "OESPJE ϦϦʔε J04 ϦϦʔε J04 ϦϦʔε 2022年3月期 2021年3月期 2020年3月期 2019年3月期 2018年3月期 2017年3月期 2016年3月期 2015年3月期 2014年3月期 $PQZSJHIU˜/*'5:-JGFTUZMF$P -UE"MM3JHIUT3FTFSWFE
  3. $PQZSJHIU˜/*'5:-JGFTUZMF$P -UE"MM3JHIUT3FTFSWFE $*$%ͱ͸Կ͔ u $*ʢ$POUJOVPVT*OUFHSBUJPOʣ  ܧଓతΠϯςάϨʔγϣϯ u ιϑτ΢ΣΞͷมߋΛৗʹςετ͠඼࣭Λ୲อ͢ΔͨΊͷ࢓૊Έ u

    $%ʢ$POUJOVPVT%FMJWFSZʣ  ܧଓతσϦόϦʔ u ιϑτ΢ΣΞΛࣗಈͰ഑৴Ͱ͖Δঢ়ଶʹ͢ΔͨΊͷ࢓૊Έ u ༗໊ͳαʔϏε u ΦϯϓϨɿ+FOLJOT u Ϋϥ΢υɿ(JU)VC"DUJPOTɺ"84$PEF#VJMEɺ$JSDMF$*ɺ#JUSJTF
  4. $PQZSJHIU˜/*'5:-JGFTUZMF$P -UE"MM3JHIUT3FTFSWFE u ϞόΠϧΞϓϦ޲͚ͷ؀ڥ͕ॆ࣮͍ͯ͠Δ u ࠷৽൛ͷ9DPEF΁ͷରԠ͕ૣ͍ u ೥݄ͷ࣌఺Ͱ9DPEFCFUBʹରԠɺ3$൛΋ϦϦʔε౰೔ʹରԠ u ϫʔΫϑϩʔͷߏங͕ࢹ֮తʹߦ͑ΔͳͲμογϡϘʔυ͕࢖͍΍͍͢

    u ֤छূ໌ॻͳͲͷൿಗԽͳͲɺࣾ಺ͷηΩϡϦςΟج४Λຬͨ͢ηΩϡϦ ςΟͷߴ͞ ʜͳͲෳ਺αʔϏεΛൺֱ͠ɺ χϑςΟϥΠϑελΠϧͷΞϓϦ։ൃνʔϜͰ͸#JUSJTFΛ࠾༻͠·ͨ͠ 🎉 #JUSJTFΛ࠾༻
  5. u ΞϓϦͷ഑৴࡞ۀʹ࡞ۀ͕࣌ؒୣΘΕ͍ͯͨ u ഑৴࡞ۀத͸ίʔυͷॻ͖׵͕͑Ͱ͖ͳ͍ u ഑৴࡞ۀத͸1$͕ॏ͘ͳΓ࡞ۀ͕··ͳΒͳ͘ͳΔ $PQZSJHIU˜/*'5:-JGFTUZMF$P -UE"MM3JHIUT3FTFSWFE ։ൃதΞϓϦͷ഑৴࡞ۀ͕େมͩͬͨ u

    ϩʔΧϧ؀ڥͷϒϥϯνঢ়ଶ౳ͰϥΠϒϥϦ΍4%,ͷόʔδϣϯ ࠩҟ͕ൃੜ͍ͯͨ͠ u ಈ࡞֬ೝͨ͠ޙʹϥΠϒϥϦ΍4%,ͷόʔδϣϯࠩҟʹΑΔෆ۩߹͕ ൃੜ͢Δࣄ͕͋ͬͨ
  6. $PQZSJHIU˜/*'5:-JGFTUZMF$P -UE"MM3JHIUT3FTFSWFE #JUSJTF্ͰΞϓϦΛϏϧυͰ͖ΔΑ͏ʹ͢Δ ίϚϯυΛෳ਺ୟ͘ඞཁͷ͋ͬͨʮ؀ڥߏங࡞ۀʯΛ.BLFGJMFʹ·ͱΊΔ $ bundle install $ mint bootstrap

    $ bundle exec pod install $ mint run carthage carthage $ bootstrap --platform iOS -- $ cache-builds $ mint run swiftgen swiftgen $ make .PHONY: init init: defaults write com.apple.dt.Xcode ShowBuildOperationDuration YES make bootstrap make generate make open .PHONY: bootstrap bootstrap: make bootstrap_bundler make bootstrap_mint make bootstrap_pods make bootstrap_cartage .PHONY: bootstrap_bundler bootstrap_bundler: bundle install .PHONY: bootstrap_mint bootstrap_mint: mint bootstrap $(Option) .PHONY: bootstrap_pods bootstrap_pods: bundle exec pod install .PHONY: bootstrap_cartage // ҎԼলུ ʮ؀ڥߏஙʯίϚϯυ .BLFGJMF
  7. $PQZSJHIU˜/*'5:-JGFTUZMF$P -UE"MM3JHIUT3FTFSWFE ΞϓϦͷ഑৴Λ͢ΔͨΊͷखॱʢϫʔΫϑϩʔʣ Λ#JUSJTF্ʹߏங͢Δ @%FQMPZ5P"QQ%JTUSJCVUJPO n 4FU9DPEF 1SPKFDU#VJME/VNCFSϏϧυ൪߸Λ#JUSJTFͷϏ ϧυ൪߸ʹมߋ n

    'JSFCBTF$-*"QQ%JTUSJCVUJPOʹ্͛ΔͨΊͷπʔϧ n $FSUJGJDBUFBOEQSPGJMFJOTUBMMূ໌ॻྨͷΠϯετʔϧ n %PXOMPBE"QQ%JTUSJCVUJPO,FZূ໌ॻྨͷΠϯετʔϧ n "QQ%JTUSJCVUJPO"QQ%JTUSJCVUJPO΁ͷެ։ n 6QMPBEE4:.T E4:.ϑΝΠϧΛ$SBTIMZUJDT΁Ξοϓϩʔυ @4FOE4MBDL#Z"QQ%JTUSJCVUJPO n "QQ%JTUSJCVUJPO΁ͷެ։Λ4MBDLʹ௨஌͢Δ
  8. $PQZSJHIU˜/*'5:-JGFTUZMF$P -UE"MM3JHIUT3FTFSWFE commit b4d580bf314feb758bb3c1470a6285b03dfa8148 (HEAD -> feat/test-branch, tag: app_distribution/feat/test-branch/1664776566, origin/feat/test-branch)

    Author: saikei <[email protected]> Date: Mon Oct 3 14:56:07 2022 +0900 [഑৴ςετ] ίϛοτϝοηʔδ͕ϦϦʔεϊʔτʹͳΓ·͢ʂ ᶃ τϦΨʔΛൃՐͤ͞Δ ᶄ "QQ%JTUSJCVUJPO΁ͷެ։ˍ4MBDL௨஌ τϦΨʔΛൃՐͤ͞Δ
  9. $%Λಋೖͯ͠ղܾʂʢ#FGPSF $PQZSJHIU˜/*'5:-JGFTUZMF$P -UE"MM3JHIUT3FTFSWFE ᶃ ϩʔΧϧʣϏϧυ൪߸Λมߋ ᶄ ϩʔΧϧʣ9DPEFͰϦϦʔεϏϧυ༻ͷઃఆΛߦ͏ ᶅ ϩʔΧϧʣϏϧυΛ࣮ࢪ ᶆ

    5FTU'MJHIUʹެ։ 🚀 #FGPSF u ॴཁ࣌ؒɿ෼ʙ෼ؒ u ϩʔΧϧ؀ڥ߆ଋ࣌ؒɿ෼ʙ෼ؒ 5FTU'MJHIU ͜ͷؒ͸ϩʔΧϧ؀ڥͰ࡞ۀ͕Ͱ͖ͳ͍ঢ়ଶ
  10. $PQZSJHIU˜/*'5:-JGFTUZMF$P -UE"MM3JHIUT3FTFSWFE #JUSJTF্ͰΞϓϦΛϏϧυͰ͖ΔΑ͏ʹ͢Δ ίϚϯυΛෳ਺ୟ͘ඞཁͷ͋ͬͨʮ؀ڥߏங࡞ۀʯΛ.BLFGJMFʹ·ͱΊΔ $ bundle install $ mint bootstrap

    $ bundle exec pod install $ mint run carthage carthage $ bootstrap --platform iOS -- $ cache-builds $ mint run swiftgen swiftgen $ make .PHONY: init init: defaults write com.apple.dt.Xcode ShowBuildOperationDuration YES make bootstrap make generate make open .PHONY: bootstrap bootstrap: make bootstrap_bundler make bootstrap_mint make bootstrap_pods make bootstrap_cartage .PHONY: bootstrap_bundler bootstrap_bundler: bundle install .PHONY: bootstrap_mint bootstrap_mint: mint bootstrap $(Option) .PHONY: bootstrap_pods bootstrap_pods: bundle exec pod install .PHONY: bootstrap_cartage // ҎԼলུ ʮ؀ڥߏஙʯίϚϯυ .BLFGJMF $%ͱಉ༷ͷͨΊলུ
  11. $*Λಋೖͯ͠ղܾʂʢ#FGPSF ᶃ 13Λ࡞੒ ᶄ ϩʔΧϧͰςετΛ࣮ߦ ᶅ ϨϏϡʔґཔ ᶆ ϨϏϡʔमਖ਼ ᶇ

    ϩʔΧϧͰςετΛ࣮ߦ ᶈ ϨϏϡʔঝೝ ✅ ᶉ Ϛʔδ 🎉 #FGPSF ʮςετͷ࣮ߦʯ͕13࡞੒ऀʹҕͶΒΕ͍ͯͨ ʮςετͷ࣮ߦ݁Ռʯͷ֬ೝϑϩʔ͕ແ͔ͬͨ ՝୊ʢ໰୊఺ʣ ˞ϨϏϡϫʔ͔Βͷঝೝˍςετ௨ա͢Δ·Ͱ܁Γฦ͠ $PQZSJHIU˜/*'5:-JGFTUZMF$P -UE"MM3JHIUT3FTFSWFE
  12. "GUFS $*Λಋೖͯ͠ղܾʂʢ"GUFS ᶃ 13Λ࡞੒ ᶄ #JUSJTF͕ςετΛ࣮ߦ ᶅ ϨϏϡʔґཔ ᶆ ϨϏϡʔमਖ਼

    ᶇ #JUSJTF͕ςετΛ࣮ߦ ᶈ ϨϏϡʔঝೝ ✅ ςετ௨ա ✅ ᶉ Ϛʔδ 🎉 ˞ϨϏϡϫʔ͔Βͷঝೝˍςετ௨ա͢Δ·Ͱ܁Γฦ͠ ʮςετͷ࣮ߦʯ͕13࡞੒ऀʹҕͶΒΕ͍ͯͨ ü ςετ͕ࣗಈͰ࣮ߦ͞ΕΔΑ͏ʹͳͬͨ 🎉 ʮςετͷ࣮ߦ݁Ռʯͷ֬ೝϑϩʔ͕ແ͔ͬͨ ü Ϛʔδ৚݅ʹʮςετ௨աʯΛ௥Ճ 🎉 ՝୊ʢ໰୊఺ʣ $PQZSJHIU˜/*'5:-JGFTUZMF$P -UE"MM3JHIUT3FTFSWFE
  13. $PQZSJHIU˜/*'5:-JGFTUZMF$P -UE"MM3JHIUT3FTFSWFE ։ൃதΞϓϦͷϓϩμΫτϨϏϡʔ͕ߦ͍΍͘͢ͳͬͨ🎉 #FGPSFʢࡏ୐ۈ຿։࢝௚ޙʣ ։ൃνʔϜʣ ݕূ୺຤ͰεΫγϣ΍ ಈըࡱӨ اըνʔϜʣ 1$্ͰεΫγϣ֬ೝ ˍ6*ௐ੔ґཔ

    u εΫγϣͰݟͨ࣌ͷΠϝʔδͱ࣮ػͰݟͨΠϝʔδͰ͕ࠩ͋ͬͨ u ࣮ࡍʹ৮ͬͨࡍʹɺ૝ఆ͍ͯͨ͠෺ͱ͸ҧ͏ڍಈͩͬͨ ʜͳͲͷཧ༝Ͱɺमਖ਼΍ख໭Γ͕ൃੜ 🛠
  14. $PQZSJHIU˜/*'5:-JGFTUZMF$P -UE"MM3JHIUT3FTFSWFE 13ϨϏϡʔͷ͕࣌ؒ୹ॖˍίʔυͷ඼࣭͕޲্ͨ͠ 🎉 n ίʔυͷࡉ͔͍ମࡋͷࢦఠΛखಈͰߦͳ͍ͬͯͨ n ΫϥογϡͷՄೳੑ͕͋ΔίʔυΛݟಀͯ͠͠·͏ࣄ͕͋ͬͨ #FGPSF վߦ͍ͯͩ͘͠͞ʂ

    εϖʔεΛೖΕͯʂ ͜ͷม਺໊௕͗͢ΔͷͰ ୹ͯ͘͠ཉ͍͠Ͱ͢ʂ ΠϯΠϯσϯτͷ਺Λ߹ Θ͍ͤͯͩ͘͞ʂ վߦίʔυ͕ҧ͏ʂ 50%0ίϝϯτ࢒ͬ ͯΔʂ ߦ຤ηϛίϩϯෆཁʂ มͳεϖʔεೖͬͯΔʂ