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

Androidアプリ開発における技術顧問としての役割 #DroidKaigi 2018

Tatsuya Arai
February 22, 2018

Androidアプリ開発における技術顧問としての役割 #DroidKaigi 2018

2018/2/9
#DroidKaigi 2018 でお話した「Androidアプリ開発における技術顧問としての役割」の資料です

Tatsuya Arai

February 22, 2018
Tweet

More Decks by Tatsuya Arai

Other Decks in Technology

Transcript

  1. AndroidΞϓϦ։ൃʹ
    ͓͚Δٕज़ސ໰ͱͯ͠
    ͷ໾ׂ
    DroidKaigi 2018
    @cutmail

    View Slide

  2. ͢Δ࿩
    • ٕज़ސ໰ͱͯ͠νʔϜΛͲ͏ཱͯ௚͔ͨ͠
    • ٕज़ސ໰ͱͯ͠ձࣾʹͲ͏ߩݙ͢Δ͔
    • ௚ۙͷϓϩδΣΫτͰԿΛ࠾༻͔ͨ͠

    View Slide

  3. ͠ͳ͍࿩
    • MVVMɺMVP….ͳͲͷઃܭͷ࿩

    View Slide

  4. ࣗݾ঺հ

    View Slide

  5. ࣗݾ঺հ
    • @cutmail
    • ߥҪ ୡ࠸
    • ϐοΫΞοϓגࣜձࣾ ٕज़ސ໰
    • Android / iOS / GAE / Go

    View Slide

  6. ΞδΣϯμ
    • ٕज़ސ໰ͱ͸
    • ٕज़ސ໰ͱͯ͠΍͍ͬͯΔ͜ͱ
    • ٕज़ސ໰ͱͯ͠AndroidΞϓϦ։ൃͰ΍͍ͬͯ
    Δ͜ͱ
    • ·ͱΊ

    View Slide

  7. ٕज़ސ໰ͱ͸

    View Slide

  8. ٕज़ސ໰ͱ͸
    • ٕज़ऀͷ໾৬Ͱٕज़ࢦಋऀ
    • ٕज़ͷಛఆྖҬͷΞυόΠβʔ
    • ૊৫ʹର͢ΔΞυόΠβʔ

    View Slide

  9. ٕज़ސ໰ͱͯ͠
    ΍͍ͬͯΔ͜ͱ

    View Slide

  10. ٕज़ސ໰ͷ࢓ࣄ
    • ։ൃମ੍ͷཱͯ௚͠
    • ٕज़޿ใ
    • ࠾༻
    • ࣾ಺ͷ੍౓࡞Γ
    • ٕज़ͷબఆ

    View Slide

  11. ։ൃମ੍ͷཱͯ௚͠

    View Slide

  12. %..άϧʔϓ
    ϐοΫΞοϓ ωΫετΧϨϯγʔ
    ͦͷଞ

    άϧʔϓձࣾ

    View Slide

  13. CHIPS

    View Slide

  14. View Slide

  15. ։ൃνʔϜମ੍
    • PM 1ਓ
    • σβΠφʔ 1ਓ
    • αʔόʔ 2ਓ
    • iOS 2ਓ
    • Android 1ਓ

    View Slide

  16. ϓϥοτϑΥʔϜ
    • iOS
    • AndroidʢະϦϦʔεʣ
    • Ұ෦Web

    View Slide

  17. ॳ೔

    View Slide

  18. ϓϩδΣΫτʹ

    ೖͬͯΈͨΒ

    View Slide

  19. ૑ۀظͷΑ͏ͳ։ൃ͕

    ߦΘΕ͍ͯͨ

    View Slide

  20. ޱ಄Ͱͷ΍ΓͱΓ

    View Slide

  21. ୭΋೺Ѳ͍ͯ͠ͳ͍

    ։ൃεέδϡʔϧ

    View Slide

  22. ಉ͡ํ޲Λ

    ޲͍͍ͯͳ͍

    View Slide

  23. ࣋ଓੑͷͳ͍։ൃ

    View Slide

  24. ϚΠϧετʔϯ͕ͳ͍

    View Slide

  25. ʮઓ৔͔ͳʁʯ

    View Slide

  26. Ͳ͏͔ͨ͠

    View Slide

  27. νʔϜϏϧσΟϯά

    View Slide

  28. ߹॓ͷ࣮ࢪ

    View Slide

  29. View Slide

  30. View Slide

  31. ߹॓ͷ࣮ࢪ
    • ΦϑΟεͱ͸͋͑ͯԕ͍৔ॴʹ͋͑ͯंͰ
    • ਺άϧʔϓʹΘ͔ΕͯंͰҠಈ
    • υϥοΧʔ෩ΤΫααΠζΛத৺ͱͨ͠ϫʔ
    Ϋγϣοϓ

    View Slide

  32. υϥοΧʔ෩ΤΫααΠζ
    • 3ͭͷ࣭໰Ͱ͓ޓ͍ͷ͜ͱΛ஌Γɺظ଴஋Λ͢Γ
    ߹ΘͤΔ
    • ࣗ෼ͷಘҙͳ͜ͱ
    • νʔϜϝϯόʔ͕ࣗ෼ʹظ଴͍ͯ͠Δͱࢥ͏͜
    ͱ
    • ଞͷϝϯόʔʹظ଴͢Δ͜ͱ

    View Slide

  33. ݁Ռ

    View Slide

  34. ͓ޓ͍ͷظ଴஋Λ͢Γ͋Θͤ
    Δ͜ͱͰ

    View Slide

  35. νʔϜϝϯόʔͷ૬ޓཧղ͕

    ਐΜͩ

    View Slide

  36. νʔϜͷ݁ଋྗ͕ߴ·ͬͨ

    View Slide

  37. ։ൃମ੍ͷ੔උ

    View Slide

  38. ։ൃମ੍ͷ੔උ
    • 2िؒͷεϓϦϯτ
    • ελϯυΞοϓϛʔςΟϯά
    • ϓϩμΫτόοΫϩά
    • ίʔυϨϏϡʔͷಋೖ

    View Slide

  39. ֤ʑ͕͍࣋ͬͯΔλεΫͷ
    ݟ͑ΔԽ

    View Slide

  40. λεΫͷՄࢹԽ
    • TrelloΛಋೖ
    • EleganttͰΨϯτνϟʔτΛݟΕΔΑ͏ʹ

    View Slide

  41. ZenHubಋೖ
    • issue΍ϚΠϧετʔϯΛGitHub಺Ͱ׬݁Ͱ͖
    ΔΑ͏ʹ
    • ͜ΕΛݟͳ͕ΒελϯυΞοϓMTGΛ࣮ࢪ

    View Slide

  42. View Slide

  43. View Slide

  44. ίʔυϨϏϡʔͷಋೖ

    View Slide

  45. ίʔυϨϏϡʔ࣌ʹϥϕϧΛ͚ͭΔ
    • [nits] : খ͍͞ࢦఠɻΠϯσϯτ΍typo
    • [IMO] : In My Opinion ࢲ͸͜͏ࢥ͏͚Ͳผʹ௚͢͜ͱ͸ඞ
    ਢͰ͸ͳ͍
    • [COULD] : Ͱ͖Ε͹௚ͨ͠΄͏͕ྑ͍
    • [MUST] : ௚ͦ͏
    • [Q] : ࣭໰

    View Slide

  46. ίʔυϨϏϡʔͷ؍఺
    • ͦ΋ͦ΋࢓༷Λຬ͍ͨͯ͠Δ͔
    • iOS / AndroidͰۃ୺ʹ࢓༷͕ҧ͍ͬͯͳ͍͔
    • ໋໊͕ద੾͔
    • ςετ͕ॻ͔Ε͍ͯΔ͔
    • ίϝϯτ͕ͳͯ͘΋ཧղͰ͖Δ͔
    • ࣮ࡍʹಈ͔ͯ͠Έͯҧ࿨ײ͕ͳ͍͔

    View Slide

  47. ϦϦʔε಺༰Λ࢒͢
    • GitHubͷϦϦʔεػೳΛ࢖ͬͯɺͦͷόʔ
    δϣϯʹԿΛϦϦʔε͔ͨ͠࢒͢
    • Slack͔Βgit-pr-releaseΛ͚ͨͨΔΑ͏ʹͯ͠
    ͍Δ
    • ։ൃҎ֎ͷϝϯόʔʹ͸ϦϦʔεϖʔδΛݟͯ
    มߋ఺Λ೺Ѳͯ͠΋Β͏

    View Slide

  48. ٕज़޿ใ

    View Slide

  49. ٕज़޿ใ
    • ࣾ಺Ͱ࢖͍ͬͯΔٕज़΍τϐοΫΛ֎ʹൃ৴
    ͢Δ
    • ςοΫϒϩά
    • Πϕϯτ΁ͷڠࢍɺग़ల

    View Slide

  50. View Slide

  51. %..άϧʔϓ
    ϐοΫΞοϓ ωΫετΧϨϯγʔ
    ͦͷଞ

    άϧʔϓձࣾ

    View Slide

  52. GAE/Go
    • TELLER શࠃCM์ө࣌΋GAEͷΦʔτεέʔ
    ϧͰ༨༟
    • ύϑΥʔϚϯε͕མͪΔ͜ͱ΋ͳ͍
    • ϩʔϧόοΫ΋όʔδϣϯΛ໭͚ͩ͢

    View Slide

  53. View Slide

  54. View Slide

  55. ࣾ಺Ͱ࢖ΘΕ͍ͯΔ

    ٕज़ελοΫΛ၆ᛌͯ͠

    هࣄԽ

    View Slide

  56. ֎෦΁ͷΞ΢τϓοτΛ

    ૿΍͢࢓૊ΈΛ࡞Δ

    View Slide

  57. Πϕϯτͷڠࢍ
    • ձࣾͷٕज़ελοΫʹ͋͏Πϕϯτʹڠࢍ͢Δ
    • ڠࢍۚͷ֬อ
    • ڠࢍ͢Δ͚ͩͰͳ͘ɺొஃ΋ґཔ͢Δ

    View Slide

  58. ΤϯδχΞ࠾༻ͷαϙʔτ

    View Slide

  59. ΤϯδχΞ࠾༻ͷαϙʔτ
    • ٕज़ϒϥϯσΟϯά
    • ଍Γ͍ͯͳ͍ਓࡐͷ੔ཧ/ൃ۷

    View Slide

  60. ٕज़ϒϥϯσΟϯά
    • ٕज़ϒϥϯσΟϯά͸࠾༻ϒϥϯσΟϯά
    • ֎͔Βͷݟ͑ํΛ౿·͑ͯ಺෦Λվળ͍ͯ͘͠
    • ॏཁͳͷ͸ද໘͚ͩͰ͸ͳ͘ɺ݁Ռతʹ

    αʔϏε͕ྑ͘ͳΔ͜ͱ

    View Slide

  61. ଍Γ͍ͯͳ͍ਓࡐΛ໌֬Խ
    • ֤νʔϜ͕ࠓͲͷ৬छΛืू͍ͯ͠Δͷ͔
    • Ϧιʔεঢ়گ͸ʁ
    • ืूཁ߲Λ࡞੒͢Δ
    • Ͳ͏͍͏εϖοΫͷਓ͕ඞཁͳͷ͔

    View Slide

  62. ੍౓࡞Γ

    View Slide

  63. ੍౓࡞Γ
    • 50%ϑϦʔϧʔϧ
    • ηϛφʔࢀՃ੍౓
    • ϑϨϯυγοϓαϙʔτ
    • ͓ࢼ͠ब৬੍౓

    View Slide

  64. 50%ϑϦʔϧʔϧ
    • ۀ຿࣌ؒͷ50%ΛҎԼͷ׆ಈʹ͋ͯͯྑ੍͍౓
    • OSS΁ͷߩݙ
    • ຊͷࣥච
    • Πϕϯτొஃɺͦͷ४උ
    • ࠾༻ʹؔΘΔ׆ಈશൠ

    View Slide

  65. ΧϯϑΝϨϯεࢀՃ੍౓
    • ༗ྉͷ֎෦ηϛφʔ΍ΧϯϑΝϨϯεʹࢀՃ
    Ͱ͖Δ
    • DroidKaigiɺtry! Swift
    • ௚ۙͩͱGopherConɺKotlinConfʹϝϯόʔ
    ͕ࢀՃ༧ఆ

    View Slide

  66. ϑϨϯυγοϓαϙʔτ
    • ༏लͳ༑ਓͱͷ͝൧ͷඅ༻Λձ͕ࣾෛ୲
    • 1ճʹ͖ͭ1ਓ1ສԁ·Ͱิॿ
    • ༏लͳϝϯόʔ͸༏लͳ༑ਓΛ஌͍ͬͯΔ͸
    ͣ

    View Slide

  67. ͓ࢼ͠ब৬੍౓
    • ҆৺ͯ͠ೲಘͯ͠ೖࣾͯ͠΋Β͏ͨΊʹɺస
    ৬લʹ࣮ࡍʹҰॹʹಇ͚Δ
    • 1೔~1िؒఔ౓
    • ΋ͪΖΜใु΋͓ࢧ෷͍

    View Slide

  68. ࣾ಺Πϕϯτͷ։࠵
    • ϞόΠϧڞ༗ձ
    • Goձ
    • ʮΈΜͳͷGoݴޠʯྠಡձ
    • ϐοΫΞοϓφΠτ

    View Slide

  69. ϞόΠϧڞ༗ձ
    • ϞόΠϧΞϓϦΤϯδχΞ͕ू·ͬͯίʔυΛ
    ಡΜͩΓɺ࠷ۙͷ։ൃτϐοΫʹ͍ͭͯ࿩͢

    • DroidKaigiΞϓϦͷιʔείʔυϦʔσΟϯ
    άΛͨ͠Γ

    View Slide

  70. ϞόΠϧڞ༗ձ
    • ଞνʔϜͷαʔϏεͷίʔυΛಡΜͰɺઃܭ
    ʹ͍ͭͯ͋Ε͜Ε
    • ΞʔΩςΫνϟʹ͍ͭͯͷٞ࿦

    View Slide

  71. Goձ
    • αʔόʔΤϯδχΞ͕ू·Γɺ֤ϓϩδΣΫ
    τͷίʔυΛಡΜͩΓɺࠔ͍ͬͯΔ͜ͱ΍ɺ
    ϗοτͳτϐοΫ΍ઃܭʹ͍ͭͯ࿩͢৔
    • ΞϓϦΤϯδχΞ΋ࢀՃOK

    View Slide

  72. ʮΈΜͳͷGoݴޠʯྠಡձ
    • 1ষͮͭ࣋ͪճΓͰղઆ
    • ΞϓϦΤϯδχΞ΋ࢀՃ
    • αʔόʔͷؾ࣋ͪΛཧղͯ͠

    ΋Β͏

    View Slide

  73. ϐοΫΞοϓφΠτ
    • ࣾ಺LTձ
    • ࢿྉ͸جຊతʹͳ͠Ͱ
    • ௕ͯ͘5෼
    • ٕज़Ҏ֎ͷτʔΫ΋Welcome

    View Slide

  74. View Slide

  75. Ϟνϕʔγϣϯ
    • ୯७ʹؾ͍ͮͨ͜ͱΛ൸࿐͍ͨ͠
    • খωλΛൃදͰ͖ΔػձΛఏڙ͢Δ
    • νʔϜؒͰ࿩͢৔Λ࡞Δ
    • ·ͣ͸ࣾ಺Ͱ࿩͢ͷʹ׳Ε͔ͯΒ֎෦Ͱొஃ
    ͢Δಓےʹͯ͠΋Β͏

    View Slide

  76. ٕज़ސ໰ͱͯ͠
    AndroidΞϓϦ։ൃͰ΍ͬͯ
    ͍Δ͜ͱ

    View Slide

  77. ٕज़ͷબఆ

    View Slide

  78. View Slide

  79. CHIPSͰͷϥΠϒϥϦ
    • Kotlin
    • RxJava2
    • Dagger2
    • Android Architecture Component
    • Lifecycle
    • Room
    • Paging

    View Slide

  80. Handling Lifecycles
    • Activity΍FragmentͳͲͷίϯϙʔωϯτʹ
    ؔ͢Δ৘ใΛอ࣋͠ɺΦϒδΣΫτ͕؍ଌͰ
    ͖ΔΑ͏ʹ͢Δ

    View Slide

  81. Handling Lifecycles
    • CHIPSͰ͸Lifecycleͷมߋ࣌ʹExoPlayerͷڍ
    ಈΛม͑ͨΓ͢Δͷʹ࢖͍ͬͯͨΓ͢Δ

    View Slide

  82. Room
    • SQLiteʹΞΫηε͢Δந৅ԽϨΠϠʔΛఏڙ

    View Slide

  83. @Entity
    data class Task(
    @PrimaryKey
    val id: String,
    val name: String) {
    }
    @Dao
    interface TaskDao {
    @Query("DELETE FROM task")
    fun deleteAll()
    }
    Room

    View Slide

  84. Paging
    • RoomͳͲͷίϯϙʔωϯτͱγʔϜϨεʹ࿈
    ܞͰ͖ΔϖʔδϯάϥΠϒϥϦ

    View Slide

  85. Paging
    • PositionalDataSource
    • RoomΛ࣮૷͍ͯ͠Ε͹ɺ˓͔Β˓݅औಘΈ
    ͍ͨͳΠϯλϑΣʔεΛࣗಈతʹੜ੒ͯ͘͠
    ΕΔ
    https://developer.android.com/topic/libraries/architecture/paging.html

    View Slide

  86. جຊతʹGoogle΍ίϛϡχςΟ
    ओྲྀͷٕज़Λ࠾༻͍ͯ͘͠

    View Slide

  87. ͦͷଞϥΠϒϥϦ
    • Firebase Authentication
    • Firebase Performance
    • Retrofit2
    • ExoPlayer
    • Glide

    View Slide

  88. CI؀ڥͷ੔උ
    • Bitrise
    • Danger
    • Android Lint
    • ktlint
    • Fabric betaͰࣾ಺഑෍
    • ৗʹ࠷৽൛͕QAͰ͖Δମ੍ʹ

    View Slide

  89. Πϕϯτܭଌ؀ڥͷ੔උ
    • Firebase Analytics →BigQuery → CHATIO
    • ͲͷϓϩμΫτ΋͜ͷߏ੒ʹ

    View Slide

  90. View Slide

  91. View Slide

  92. ௚ۙͷࣄྫ

    View Slide

  93. ೝূΛஔ͖׵͑ͨ࿩

    View Slide

  94. ಠࣗೝূ͔Β

    Firebase Authentication΁
    • ॳճىಈ࣌ʹήετϢʔβʔΛ࡞੒
    • ݩʑ͸ಠࣗͷϩδοΫͰϢʔβʔ࡞੒ɺೝূ
    • ಠࣗOAuth࣮૷

    View Slide

  95. ಠࣗೝূ͔ΒFirebase Auth΁
    firebaseAuthInstance.signInAnonymously()
    .addOnCompleteListener { task ->
    if (task.isSuccessful) {
    observer.onSuccess(task.result.user)
    } else {
    val cause = task.exception.toOption()
    .fold({ RuntimeException("unknown firebase auth error") }, { th -> th })
    observer.onError(cause)
    }
    }
    ΞϓϦ͸FirebaseͷtokenΛαʔόʔʹ౤͛Δ͚ͩ

    View Slide

  96. ೝূ͸Firebase Auth
    ೝՄ͸ࣗαʔόʔͰ

    View Slide

  97. ೝূํ๏Λ૿΍͢৔߹͸
    Firebase AuthenticationͰ

    ಠࣗೝূΛ࣮૷͢Δ
    https://firebase.google.com/docs/auth/web/custom-auth?hl=ja

    https://developers-jp.googleblog.com/2016/10/authenticate-your-
    firebase-users-with.html

    View Slide

  98. ӡ༻Λָʹ͢Δ
    ΞʔΩςΫνϟΛબ୒͢Δ

    View Slide

  99. ӡ༻ΑΓ΋αʔϏε։ൃʹ

    ूத͠Α͏

    View Slide

  100. αʔϏεͷίΞͳՁ஋ఏڙʹ

    ஫ྗ͢Δ

    View Slide

  101. ͜Ε͔Β΍Γ͍ͨ͜ͱ

    View Slide

  102. API Documentͷࣗಈੜ੒
    • ιʔείʔυ͔Βࣗಈੜ੒
    • ৽͍͠ΫϥΠΞϯτΞϓϦͳͲΛ࡞Δ࣌ʹඞ

    View Slide

  103. GAE/GoɺFirebaseΛ࢖ͬͨ
    αʔϏεج൫ͷ։ൃ
    • ϘΠϥʔςϯϓϨʔτ
    • ೝূ΍ϩάͳͲͷجຊతͳίϯϙʔωϯτΛ
    ໢ཏͨ͠αʔϏεج൫
    • αʔϏεͷ্ཱͪ͛Λૣ͘Ͱ͖ΔΑ͏ʹ
    • ӡ༻΋ָʹ

    View Slide

  104. • iOS, AndroidͰڞ௨ͷίϯϙʔωϯτͱͯ͠
    ੾Γग़ͤΔ΋ͷΛReact NativeԽ

    View Slide

  105. View Slide

  106. ·ͱΊ

    View Slide

  107. ٕज़ސ໰ͷ࢓ࣄͱ͸
    • ֎෦ɺ಺෦ଟذʹΘͨΔ
    • αʔϏε੒௕ͷͨΊʹɺ௕ظతͳ໨ઢͰٕज़Λ
    બఆ͢Δ
    • ࣾ಺Ͱ࢖ΘΕ͍ͯΔٕज़ελοΫΛັྗʹม͑
    Δ
    • ձࣾͷΧϧνϟʔ࡞ΓʹӨڹ͢Δ

    View Slide

  108. ࠷ޙʹ

    View Slide

  109. ٕज़ސ໰͔ΒίʔϙϨʔτΤϯ
    δχΞϦϯά΁
    • ΑΓ૊৫ͷ಺෦Λվળ͍ͯͨ͘͠Ίɺ

    ίʔϙϨʔτΤϯδχΞϦϯάࣨΛઃཱ
    • αʔϏεڞ௨ͷج൫ɺ؅ཧγεςϜɺશࣾʹ
    ඥͮ͘։ൃΛਐΊΔ

    View Slide

  110. ͝੩ௌ͋Γ͕ͱ͏
    ͍͟͝·ͨ͠

    View Slide