Encouraging of automation for building better apps

Encouraging of automation for building better apps

アプリ開発の効率化は、よいアプリを作るためには必要不可欠なものです。スマートフォンアプリ開発全盛の今日、世界には自動化をサポートする数多くのサービスが存在します。このセッションでは、アプリ品質を高めるための開発の効率化における考え方と、明日からできる改善についてお話しします。

このスライドは、2015/06/23に「ニフティクラウドmobile backend アプリ開発セミナー」にて発表しました。
http://ncmb.connpass.com/event/16024/

0ab502179956dab407e6e146bce304f9?s=128

Yuki Fujisaki

June 23, 2015
Tweet

Transcript

  1. ΑΓΑ͍ΞϓϦΛ࡞ΔͨΊͷ
 ։ൃޮ཰Խͷ͢͢Ί Yuki Fujisaki 
 Co-founder & CEO DeployGate Inc.

  2. @tnj / Yuki Fujisaki DeployGate Inc. Founder & CEO

  3. ג ϛΫγΟ೥ೖࣾ ˣ NJYJϞόΠϧ ˣ ͨΜΆΆάϧʔϓ ˣ "OESPJEެࣜΫϥΠΞϯτ ։ൃΛޮ཰Խʂ

  4. 2010೥ = Android 2.2 mixiॳΫϥΠΞϯτΞϓϦ

  5. ։ൃऀ ೲظ × 1 <ɹ3ϲ݄

  6. /(^o^)\ ナンテコッタイ

  7. Ͱ΋

  8. ʮ͍͍ΞϓϦʯΛ࡞Γ͍ͨ ★ ★ ★ ★ ★

  9. 1ඵ΋ແବʹͤͣʹ ΞϓϦΛ࡞Δ࣌ؒͱͯ͠ ࢖͍͍ͨ

  10. ͜͏͍͏ͷਏ͍ ʮ৽͍͠όʔδϣϯͰ͖ͨΑʯ
 ʮ͋ɺ͜ͷ୺຤ʹΠϯετʔϧͯ͠ʂʯ ໿෼ճ ෆ۩߹ى͖͔ͨΒ୺຤͓࣋ͪ͠·ͨ͠ʔ
 ˠϩάͷճऩ ໿෼ճ طʹվमࡁΈͷෆ۩߹Λใࠂ͞ΕΔ
 ˠώΞϦϯάʴΞοϓσʔτ ໿෼ճ

    ʮͳΜ͔ڧ੍ऴྃͨ͠ʂʯใࠂରԠ ໿෼ճ ࢼͯ͠΋Β͏ਓΛ୳ͯ͠࿈Ε͖ͯͯɺ
 Πϯετʔϧ͓ͯ͠౉͢͠Δ ໿෼ճ ͦΕͧΕͷίϛϡχέʔγϣϯ଴ͪ࣌ؒɺε Πονϯάίετ ໿ʙ෼ճ http://alpha.mixi.co.jp/entry/2013/11649/
  11. ࠓ೔ͷ࿩ ͍͍ΞϓϦΛ࡞ΔͨΊͷࣗಈԽʹ͍ͭͯ %FQMPZ(BUF
 ΋͋ΔΑ

  12. ͍͍ΞϓϦΛ࡞ΔͨΊͷࣗಈԽʹ͍ͭͯ • ԿނࣗಈԽ͢Δͷ͔ • ࣮ફͯ͠ΈΑ͏ • ಘΒΕΔ΋ͷ • Ұาઌ΁

  13. ͳͥɺࣗಈԽ͢Δͷ͔ʁ

  14. • ։ൃ࡞ۀ͕ޮ཰Խͯ͠ΞϓϦ։ൃ͕଎͘ͳΔ • ແବ͕ͳ͘ͳָ͕ͬͯͰ͖Δ • ࢒ۀ͕ݮΒͤΔ͔΋͠Εͳ͍ʂʂʂ

  15. “͍͍ΞϓϦΛ࡞Δ͜ͱʹूத͢ΔͨΊ”

  16. ʻલఏʼ

  17. ਓؒͷҙࢤ͸ऑ͍

  18. • ࠓ౓ͦ͜ςετυϦϒϯͳ։ൃ͢Δͧʂʂʂ • ࣄނΛͳͨ͘͢Ίʹखॱॻ͔ͬ͠Γ࡞Δͧʂ • υΩϡϝϯτ͔ͬ͠Γॻͧ͘ʂʂʂ

  19. ਓؒɺ ർΕͨΒ৸Δ͠ɺ զຫऑ͘ͳΔ͠ɺ ͙͢ఘΊΔ΋ͷɻ

  20. ໌೔ͷே͸ૣى͖ͯ͠ϥϯχϯά͢Δͧʂʂʂ ͍͍ͩͨೋ౓৸

  21. ؾ߹͍ͱࠜੑʹཔΒͳ͍ ࢓૊ΈͰղܾ

  22. ඞͣى͖ΕΔ ࢓૊ΈΛ࡞Δ https://twitter.com/kairoshi/status/522546865510707200

  23. ؀ڥ͸ࣗવͱਓΛಈ͔͢ Կ΋ͳ͍ˠཱͭ Πε͕͋Δˠ࠲Γ͍ͨ http://pictogram-free.com/highresolution/l_001.png http://www.monotaro.com/p/4050/3854/

  24. ਓΛ௚઀ม͑Α͏ͱͯ͠΋೉͍͠ ͔͠͠ ؀ڥ͕มΘΕ͹ਓͷߦಈ͸มΘΔ

  25. ʻʗલఏʼ

  26. “͍͍ΞϓϦΛ࡞Δ͜ͱʹूத͢ΔͨΊ”

  27. ͳͥɺࣗಈԽ͢Δͷ͔ʁ จԽΛ૑Δ

  28. • ίʔυΛίϛοτͨ͠ΒࣗಈͰςετ͞ΕΔ • ςετ͕௨Βͳ͍ͱϦϦʔεͰ͖ͳ͍ • ͪΌΜͱಈ࡞֬ೝ͠ͱ͜͏ɺςετ͠Α͏ ࣄނ͕ݮΔɺ඼࣭͕ҡ࣋Ͱ͖Δ

  29. “Jenkinsͷ࠷େͷಋೖޮՌ͸
 ʮνʔϜͷϝϯόͷҙࣝมԽʯ” https://speakerdeck.com/uasano/jenkinsgatimunimotarasitekuretakoto

  30. ͳͥɺࣗಈԽ͢Δͷ͔ʁ ҉໧஌Λ๷͙

  31. ϦϦʔεͷલʹ͜ͷઃఆϑΝΠϧΛฤू͢ΔͷΛ ๨Εͣʹʂ͋ͱରԠ͢Δͬͪ͜ͷαʔόͷઃఆ ΋มߋ͢Δ͜ͱɻͦͷ্Ͱ͜ͷεΫϦϓτΛ౿ Έ୆αʔόͷ্Ͱ࣮ߦͯ̍̌͠෼͙Β͍଴ͭʜ ΈΜͳେ޷͖ൿ఻ͷλϨ ઈର๨ΕΔ

  32. Կ͔ͱϦεΫ͕ߴ·Δ • ؅ཧ͍ͯ͠Δਓ͕ډͳ͘ͳΔͱࢭ·Δ • ৽͍͠ਓ͕ೖͬͯ͘Δͷ͕೉͘͠ͳΔ • Ͱ͖Δਓ͕ݶΒΕΔͷͰ଴͕ͪ࣌ؒ૿͑Δ

  33. ҉໧஌͕ͳ͘ͳΓ 
 ϦεΫ͕ݮͬͯ εέʔϧ͢Δ ͢΂͕ͯ
 هड़͞Ε͍ͯΔ 
 ࠶ݱՄೳ λεΫ͕
 Ұਓʹूத͠ͳ͍

    εέʔϧ͢Δ ಈ࡞͕
 ه࿥͞ΕΔ ௥੻͠΍͍͢
  34. ͳͥɺࣗಈԽ͢Δͷ͔ʁ ؾܰʹࢼͤΔΑ͏ʹ͢Δ

  35. ίʔυΛॻ͍ͯίϛοτ͢Δ͚ͩͰ มߋΛ୭Ͱ΋ݟΕΔ

  36. ͘͢͝େࣄ

  37. 99% ਓ͕࡞ͬͯ ਓ͕࢖͏

  38. ҰൃͰͰ͖ͨΓ͠ͳ͍ ࠷ߴͷ
 ΞϓϦ ࢓༷ॻ.xlsx

  39. Ұ൪ḿΔ ࡞Δਓ ࢖͏ਓ ࡞ͬͨͦͷ৔Ͱݟͤͯҙݟ΋Βͬͯ௚͢

  40. ݐઃతͳ
 ϑΟʔυόοΫ Ϟνϕʔγϣϯ ͨ·ʹ͸ υϠͬͨΓ͍ͨ͠ =

  41. Web։ൃ͕΋ͨΒͨ͠
 Πϊϕʔγϣϯ ։ൃ
 ࡞Δ Ϣʔβʔ
 ݟΔ ϩάˍ
 ϑΟʔυόοΫ σϓϩΠ ࠷୹$USM

    4ͰճΔ
  42. Ͱ΋ΞϓϦ։ൃͩͱ ։ൃ
 ࡞Δ Ϗϧυˍ
 ΞʔΧΠϒ Ͳ͔͜ʹஔ͘
 PSϝʔϧૹ৴ ࣮ػʹೖΕΔ ͓ख఻͍ Πϯετʔϧ

    Ϣʔβʔ
 ݟΔ ϩάˍ
 ϑΟʔυόοΫ ϩάཉ͍͠
 ୺຤आΓΔ ϩά΋͏
 ྲྀΕͯΔ
  43. ແཧήʔ

  44. ࡞ͬͯΈͨʂ ೖΕͯʂ ɾɾɾ

  45. ਓϝʔϧૹͬͯΠϯετʔϧਓ

  46. 8FCΈ͍ͨʹ͍ͨ͠ʜ

  47. None
  48. Ξοϓϩʔυͯ͠

  49. https://dply.me/e18bnz URLΛڭ͑Δ͚ͩ

  50. ී௨ͷਓͰ΋࢖͑ΔΠϯετʔϧΨΠυ Ξοϓσʔτ΋ϓογϡ SDKೖΕΕ͹ϩά΋ૹΕΔ

  51. ΞϓϦ։ൃͰ΋ ։ൃ
 ࡞Δ Ϣʔβʔ
 ݟΔ ϩάˍ
 ϑΟʔυόοΫ σϓϩΠ EHBUFQVTI"QQBQL

  52. DEMO

  53. ࣗಈԽͷ໨త ؾ߹ͱࠜੑʹཔΒͣ ։ൃʹूதͯ͠Δ͚ͩͰ ͍͍ΞϓϦ͕࡞ΕΔ จԽΛ૑Δ

  54. ࣮ફͯ͠ΈΑ͏

  55. 1. શମͷݟ͑ΔԽ 2. ϏϧυࣗಈԽ 3. ςετࣗಈԽ 4. σϓϩΠࣗಈԽ ։ൃ
 ࡞Δ

    Ϣʔβʔ
 ݟΔ ϩάˍ
 ϑΟʔυόοΫ উखʹճΔ
 Α͏ʹ͢Δ
  56. 1. શମͷݟ͑ΔԽ

  57. Կ͕ى͖͍ͯΔͷ͔ݟ͑ͳ͍ ˣ ෆ҆

  58. ͢΂ͯͷ৘ใΛ
 ྲྀ͢৔ॴΛ࡞Δ IRC Կ͕ى͖͍ͯΔ͔
 ΈΜͳ͕ݟ͑Δ

  59. ݟ͑ΔͷͰ • ։ൃऀͰͳ͍ϝϯόʔ΋ ͋ͬɾɾɾ ࡯͠ ঢ়گ͕ۭؾͰཧղͰ͖ΔΑ͏ʹͳΔ

  60. ݟ͑ΔͷͰ • ͙͢ؾ͕͍ͭͯରԠͰ͖Δ • ίʔυϨϏϡʔґཔ্͕͕͖ͬͯͨ • ৽͍͠όʔδϣϯ͕Ͱ͖ͨ • ΞϓϦ͕Ϋϥογϡͨ͠ •

    ͦͷ৔Ͱ΍ΓͱΓ͕ਐΉ
  61. ݟ͑ΔͷͰ • ςετ͕స͚ͨΒ͙͢௚͢ؾʹ ࡽ͞ΕͯΔײ͡

  62. ͳΜͰ΋ ͭͳ͕Δ Slack ͓͢͢Ί

  63. 2. Ϗϧυ

  64. CI for iOS & Android ଞྗ ࣗྗ

  65. ࢖ͬͯΔͳΒଞྗʹཔΖ͏

  66. circle.yml ͪΐͬͱॻ͚ͩ͘ test: override: - ./gradlew assembleDebug - cp -r

    project-name/build/outputs $CIRCLE_ARTIFACTS Androidͷ৔߹
  67. PR/ίϛοτ͝ͱʹࣗಈϏϧυ $ git push origin branch Ϗϧυ͕௨͍ͬͯΔ͜ͱ͕֬ೝͰ͖Δ
 Ϗϧυ͞ΕͨΞϓϦ΋੒Ռ෺ͱͯ͠࢒Δ

  68. ࣗಈϏϧυ؀ڥ
 20෼Ͱ׬੒

  69. Ϗϧυαʔό༻ҙ ҡ࣋؅ཧɺϝϯςφϯε ৽OS/࿈ܞαʔϏεରԠ ػೳ֦ு ແྉʙ ༗ྉͰεέʔϧ
 ߴ଎Խʂ

  70. No GitHub, No Circle CI, No Developer Life

  71. • αʔόϚγϯͷ༻ҙඞཁ • ̍ճ൒೔͙Βֻ͍͚ͯ
 ηοτΞοϓ͑͢͞Ε͹
 ׂͱಈ͘ • ϓϥάΠϯॆ࣮ɺ
 ߴੑೳCron •

    ෳ਺୆ʹεέʔϧ΋
  72. 3. ςετ

  73. 2ςετॻ͍ͯΔʁ

  74. ·ͣࣗಈςετ؀ڥΛ࡞Ζ͏

  75. ·ͣ͸த਎͸ۭͰ΋͍͍ͷͰɺ ςετ͕ࣦഊͨ͠Β
 Ϗϧυ͕స͚ΔΑ͏ʹ͢Δ స͚ͨΒϚʔδ͠ͳ͍Λϧʔϧʹ͢Δ

  76. Կ͔໰୊͕ى͖ͨʂࣄނͬͨʂ ͱ͍͏ͱ͜Ζ͔Βɺ
 ෆ۩߹Λ࠶ݱ͢ΔςετΛॻ͘ͱ ಉ͡໰୊͸ೋ౓ͱى͖ͳ͍

  77. ͜Ε΋ circle.yml ͪΐͬͱॻ͘ test: pre: - emulator -avd circleci-android22 -no-audio

    -no-window: background: true parallel: true - circle-android wait-for-boot override: - ./gradlew connectedAndroidTest - cp -r my-project/build/outputs/androidTest-results/* $CIRCLE_TEST_REPORTS - cp -r project-name/build/outputs $CIRCLE_ARTIFACTS Androidͷ৔߹
  78. ੺͸ةݥɺࠓ͙͢௚͞ͳ͍ͱ ྘͸େৎ෉ʂ ͱ͍͏࢓૊ΈͱจԽΛ࡞ͬͯ͠·͑͹ɺ

  79. GitHub ্Ͱ΋҆શͳ͜ͱ͕Ұ໨ྎવ खݩͰ࣮ߦΛ๨Εͯ͠·ͬͨΓɺ ؾ͔ͮͣʹϚʔδͯ͠͠·͏͜ͱ΋ͳ͍

  80. ؀ڥ͸ࣗવͱਓΛಈ͔͢ ੺ʹͳʹ͔·͍ͣ ྘ʹେৎ෉

  81. 4. σϓϩΠ

  82. None
  83. Android iOS

  84. ϏϧυεΫϦϓτʹ buildscript { dependencies { classpath 'com.deploygate:gradle:0.6.2' } } apply

    plugin: 'deploygate' circle.ymlʹ deployment: deploygate: branch: /.+/ commands: - ./gradlew uploadDeployGate
  85. circle.ymlʹ dependencies: pre: - gem install shenzhen deployment: deploygate: branch:

    /.+/ commands: - ./ipa distribute:deploygate -a … -u …
  86. ίϛοτ͢Δ͚ͩͰखݩʹ $ git push origin branch Կ΋͠ͳͯ͘΋ɺ୭Ͱ΋ߋ৽͕֬ೝͰ͖Δ

  87. 10෼ͰηοτΞοϓ׬ྃ

  88. ಘΒΕΔ΋ͷ

  89. λΠϜϥΠϯͷ ҰຊԽ • ୭͕Կ͍ͯ͠Δ͔෼͔Δ • ໰୊ʹ͙͢ؾ͚ͮΔɺ
 ͦͷ৔ͰղܾͰ͖Δ • ։ൃऀҎ֎ͷਓ΋
 ίϛϡχέʔγϣϯ


    औΓ΍͘͢ͳΔ
  90. $ git push origin branch ςετͱ
 σϓϩΠࣗಈԽ • ίʔυॻ͍ͯ
 ίϛοτ͢Δ͚ͩ


    ຊ࣭ͷ։ൃʹूத • ҙࣝͤͣͱ΋඼࣭Λ
 ҡ࣋Ͱ͖Δ • ͱʹ͔͘࡞ͬͯɺ
 ݟͯɺ௚͕͢ؾܰʹ
  91. Webͱಉ͡αΠΫϧͰ։ൃ ։ൃ
 ࡞Δ Ϣʔβʔ
 ݟΔ ϩάˍ
 ϑΟʔυόοΫ σϓϩΠ HJUQVTI

  92. ͍͍ΞϓϦ͔͠࡞Εͳ͍

  93. Ұาઌ΁

  94. ࣗಈԽ͢Δ্Ͱͷߟ͑ํ

  95. ਓͷίετ͸ߴ͍
 ਓͷ࣌ؒΛकΖ͏

  96. 3ճ܁Γฦͨ͜͠ͱ͸ࣗಈԽ͢Δ

  97. 1ਓͳΒঘߋ͜Μͳ͜ͱ࣌ؒ࢖ͬͯΒΕͳ͍ ʮ৽͍͠όʔδϣϯͰ͖ͨΑʯ
 ʮ͋ɺ͜ͷ୺຤ʹΠϯετʔϧͯ͠ʂʯ ໿෼ճ ෆ۩߹ى͖͔ͨΒ୺຤͓࣋ͪ͠·ͨ͠ʔ
 ˠϩάͷճऩ ໿෼ճ طʹվमࡁΈͷෆ۩߹Λใࠂ͞ΕΔ
 ˠώΞϦϯάʴΞοϓσʔτ ໿෼ճ

    ʮͳΜ͔ڧ੍ऴྃͨ͠ʂʯใࠂରԠ ໿෼ճ ࢼͯ͠΋Β͏ਓΛ୳ͯ͠࿈Ε͖ͯͯɺ
 Πϯετʔϧ͓ͯ͠౉͢͠Δ ໿෼ճ ͦΕͧΕͷίϛϡχέʔγϣϯ଴ͪ࣌ؒɺε Πονϯάίετ ໿ʙ෼ճ http://alpha.mixi.co.jp/entry/2013/11649/
  98. Α͋͘Δٞ࿦

  99. ࣗࣾ಺Ͱด͡Δ vs ֎෦αʔϏεΛ׆༻

  100. ΋ͪΖΜέʔεʹΑΔ͕ ֎෦αʔϏεΛ࢖Θͳ͍͜ͱʹΑΔϦεΫ
 Λ๨Εͣʹ

  101. ྫ: ࣗಈϏϧυ؀ڥͷߏங (JU)VCΛར༻͍ͯ͠Ε͹ ෼ͰηοτΞοϓɺແྉ
 ϊ΢ϋ΢͕ੈքͰ஝ੵ
 ࣗಈతʹ࠷৽؀ڥ ࣗࣾ಺Ͱ࣋ͱ͏ͱ͢Δ৔߹ Ϗϧυαʔόͷඅ༻
 ઐ೚ͷ୲౰ऀͷ࠾༻
 ߏஙͰ͖Δ·Ͱͷඇޮ཰ͳ࣌ؒ

  102. None
  103. ੲ͸େاۀͰͳ͍ͱ࣋ͯͳ͔ͬͨ࢓૊ΈΛ Θ͔ͣ਺໊ͷελʔτΞοϓ͕׆༻ͯ͠ େاۀͱಉ༷ੈքʹαʔϏεΛల։͍ͯ͠Δ

  104. ֎෦αʔϏεΛࠓ೔͔Β׆༻͢Δ͔ ࣗࣾͰ։ൃอकӡ༻͢Δ͔ ඇޮ཰ͳঢ়گΛଓ͚Δͱ͍͏બ୒Ͱ͸
 ͜ͷઌੜ͖ͷ͜Εͳ͍

  105. ࣗ෼ͨͪͷ։ൃͷຊ࣭ʹूத͠Α͏ खݩʹ͋ΔϦιʔεͰ Ξ΢τϓοτΛ࠷େԽ͢ΔͨΊʹ ׆༻Ͱ͖Δ΋ͷ͸ͲΜͲΜ׆༻͢Δ ֎෦αʔϏεͷ׆༻͸30*ͷඇৗʹߴ͍౤ࢿ

  106. • ৽͍ٕ͠ज़Λੵۃ׆༻ɺ
 ͱ͍͏ϒϥϯσΟϯά • ৽͍͠ਓ͕νʔϜʹೖͬͯ
 ͙͢࢓ࣄͰ͖Δ • ੈքͷ։ൃऀͱͷ
 ڞ௨ݴޠ -

    Pull Reqͱ͔ • ΋ͬͱศརʹ͍ͨ͠ɺ
 վળ͠Α͏ͱ͍͏ϚΠϯυ ͓·͚ʹ
 ͍ͭͯ͘Δ΋ͷ
  107. ·ͱΊ

  108. ͍͍ΞϓϦΛ࡞ΔͨΊͷࣗಈԽʹ͍ͭͯ • ԿނࣗಈԽ͢Δͷ͔ • ؾ߹ͱࠜੑʹཔΒͣʹ։ൃʹूத͍ͯ͠Δ͚ͩͰ
 ͍͍ΞϓϦ͕૑ΕΔจԽΛ૑Δ • ࣮ફͯ͠ΈΑ͏ • ͢΂ͯΛ̍ΧॴͷλΠϜϥΠϯͰݟ͑ΔΑ͏ʹ͠Α͏

    • GitHub࢖ͬͯΔͳΒ1࣌ؒͰϏϧυ/ςετ/σϓϩΠΛࣗಈԽ • ಘΒΕΔ΋ͷ • ແବͳ͘ɺWeb։ൃͷΑ͏ͳ଎͞Ͱɺ͍͍ΞϓϦ͔͠࡞Εͳ͍؀ڥ • Ұาઌ΁ • ਓͷίετ͸ߴ͍ɺ܁Γฦ͠Λͳͦ͘͏ɺ֎෦αʔϏεΛ׆༻͠Α͏
  109. https://dply.me/start