Upgrade to PRO for Only $50/Year—Limited-Time Offer! 🔥

DroidKaigiカンファレンスアプリの歴史からみるアプリアーキテクチャのこれまでとこれから

 DroidKaigiカンファレンスアプリの歴史からみるアプリアーキテクチャのこれまでとこれから

DroidKaigi2021 Day2 発表資料です。
DroidKaigi2015から2021までのカンファレンスアプリを主にアーキテクチャの点から比較し、どのような技術に置き換わっていったのか・未来のアプリ開発のデファクトスタンダードはどうなるのかを知ることができます。

https://droidkaigi.jp/2021/timetable/?day=2

Kazuki Chigita

October 20, 2021
Tweet

More Decks by Kazuki Chigita

Other Decks in Technology

Transcript

  1. %SPJE,BJHJΧϯϑΝϨϯεΞϓϦͷ ྺ࢙͔ΒΈΔ ΞϓϦΞʔΩςΫνϟͷ ͜Ε·Ͱͱ͜Ε͔Β ,B[VLJ$IJHJUB DIJHJDIBO "The Android robot is

    reproduced or modified from work created and shared by Google and used according to terms described in the Creative Commons 3.0 Attribution License." DroidKaigi2021
  2. Speaker ,B[VLJ$IJHJUB chigichan24 "OESPJEBQQMJDBUJPOEFWFMPQFS *OUFSFTUFE "QQMJDBUJPO"SDIJUFDUVSF 4ZTUFN%FTJHO %JTUSJCVUFE4ZTUFN 1BTU UBMLPO%SPJE,BJHJ

    ܧଓతʹػೳ։ൃΛਐΊͳ͕Βߦ͏ϚϧνϞδϡʔϧԽ  %SPJE,BJHJ ”Twemoji” ©Twitter, Inc and other contributors (Licensed under CC-BY 4.0) https://twemoji.twitter.com/
  3. Break the Ice 2%SPJE,BJHJΧϯϑΝϨϯεΞϓϦ͕͋Δͷ஌ͬͯ·͔ͨ͠ʁ ͦΜͳ΋ͷ͕͋ͬͨͷ͔ʂ ࠓ͸͡Ίͯ஌Γ·ͨ͠ ΋ͪΖΜ஌ͬͯΔΑ Πϯετʔϧͯ͠ΔΑ ίϯτϦϏϡʔτͯ͠ΔΑ ࢲ͕99ը໘ͷ࡞ऀͰ͢

    ഑৴αΠτ΍5XJUUFSͰίϝϯτͯ͠Ͷʙ ”Twemoji” ©Twitter, Inc and other contributors (Licensed under CC-BY 4.0) https://twemoji.twitter.com/
  4. (Section1) Background and purpose of this presentation ͜ͷηΫγϣϯͷ໨త  ϓϨθϯશମͷഎܠɾ໨తɾ

    ΰʔϧΛڞ༗͢Δɻ  ͜Μͳʹ΋มԽ͍ͯ͠Δͷ͔ʂͷ ڻ͖Λڞ༗͢Δɻ
  5. 2016 2021 In Google I/O 2017, the Android team announced

    first-class support for Kotlin. Main Language JAVA Kotlin Supported Platform Android Android iOS web Main Libraries Jetpack Compose rxjava1 Android-Orma Dagger2 Kotlin Coroutines & Flows Hilt
  6. 2016 2021 In Google I/O 2017, the Android team announced

    first-class support for Kotlin. Main Language JAVA Kotlin Supported Platform Android Android iOS web Main Libraries Jetpack Compose rxjava1 Android-Orma Dagger2 Kotlin Coroutines & Flows Hilt ΊͪΌͪ͘Ό มԽ͍ͯ͠Δ
  7. (Section1) Background & Goal ΧϯϑΝϨϯεΞϓϦͷྺ࢙Λඥղ͍ͯ೔ʑͷ։ൃͷώϯτʹ͠Α͏ ະདྷͷ"OESPJEΞϓϦ։ൃͷσϑΝΫτΛײ͡Α͏ ࣌୅͕มԽ͢Δத ࣮૷ͷτϨϯυ ϥΠϒϥϦ ΞʔΩςΫνϟ͸

    Ͳ͏มΘͬͨͷ͔Λ஌Δ ௕ظؒϝϯς͞Ε͍ͯΔ ػೳͷ࣮૷ஔ͖׵͑ ϦϑΝΫλϦϯά ͷ ಓඪΛ୳Δ ະདྷͷ "OESPJEΞϓϦ։ൃʹ ඞཁʹͳΔ஌ࣝ ΞʔΩςΫνϟΛ ײ͡Δ
  8. TUBUT 1SJWBUF ਓ +BWB"OESPJEPOMZ ΞʔΩςΫνϟ .7$ͬΆ͍ ࣌୅എܠ %SPJE,BJHJ͕Ͱ͖ͨ೥ɻ "OESPJEYܥ͕͡Θ͡Θͱਁಁ 

    "35͕σϑΥϧτͷϥϯλΠϜʹɻ  ϚςϦΞϧσβΠϯͷొ৔ɻ ओͳϥΠϒϥϦ 4VQQPSUMJCSBSZ 'SBHNFOU "DUJWJUZ QSJWBUFͳͷͰϥΠϒϥϦৄࡉ͸Θ͔Γ·ͤΜ 2015 !NIJEBLB͞Μ͔Βͷ఻ঝʹΑͬͯ͜ͷ೥ͷࢿྉΛ࡞੒Ͱ͖·ͨ͠ɻେײँ🙇🙇
  9. 2016 TUBUT 044 ਓ +BWB"OESPJEPOMZ ΞʔΩςΫνϟ .7$ ࣌୅എܠ (PPHMF*0Ͱ%BUB#JOEJOH͕ൃදɻ "OESPJEYܥͷ࣌୅

     ύʔϛογϣϯपΓ͕Ξοϓσʔτ  %P[FϞʔυͷొ৔ ओͳϥΠϒϥϦ 3Y+BWB %BHHFS "OESPJE0SNB 0L)UUQ 3FUSPGJU 4UFUIP %BUB#JOEJOH
  10. 2016 Activity Fragment xml DAO Model ActivityNavigator DataBinding Orma API

    Retrofit + OkHttp Observable(RxJava1) Call startActivityॲཧΛ୲͏ callback Call
  11. 2016 Activity Fragment xml DAO Model ActivityNavigator DataBinding Orma API

    Retrofit + OkHttp Observable(RxJava1) Call startActivityॲཧΛ୲͏ callback Call Model View Controller
  12. 2016 Activity Fragment xml DAO Model ActivityNavigator DataBinding Orma API

    Retrofit + OkHttp Observable(RxJava1) Call startActivityॲཧΛ୲͏ callback Call Model View Controller ංେԽ ෳࡶԽ
  13. 2017 TUBUT 044 ਓ +BWB ,PUMJO "OESPJEPOMZ ΞʔΩςΫνϟ .77. 3FQPTJUPSZQBUUFSO

    ࣌୅എܠ ,PUMJO͕GJSTUTVQQPSUMBOHVBHFͱൃදɻ "OESPJEYܥͷ࣌୅  NVMUJXJOEPXNPEFͷొ৔ ओͳϥΠϒϥϦ 3Y+BWB %BHHFS "OESPJE0SNB 0L)UUQ 3FUSPGJU 4UFUIP %BUB#JOEJOH 1FSNJTTJPO%JTQBUDIFS
  14. 2017 Model Single/Maybe/Completable (RxJava2) Activity Fragment xml DataBinding LocalDataSource Orma

    RemoteDataSource Retrofit + OkHttp Repository ViewModel call call call
  15. 2017 Model Single/Maybe/Completable (RxJava2) Activity Fragment xml DataBinding LocalDataSource Orma

    RemoteDataSource Retrofit + OkHttp Repository ViewModel call call call Model View ViewModel Repository
  16. 2017 Model Single/Maybe/Completable (RxJava2) Activity Fragment xml DataBinding LocalDataSource Orma

    RemoteDataSource Retrofit + OkHttp Repository ViewModel call call call Model View ViewModel Repository ੍ޚ೉
  17. 2018 TUBUT 044 ਓ ,PUMJO"OESPJEPOMZ ΞʔΩςΫνϟ .77. 3FQPTJUPSZQBUUFSO ࣌୅എܠ "OESPJEYܥͷ࣌୅

     QJDUVSFJOQJDUVSFͷαϙʔτ 'MVUUFS౳ʹΑΔϚϧνϓϥοτϑΥʔϜ ओͳϥΠϒϥϦ 3Y+BWB %BHHFS 3PPN 0L)UUQ 3FUSPGJU (SPVQJF %BUB#JOEJOH "OESPJE ,59
  18. 2018 Model Single/Maybe/Completable/Flowable (RxJava2) Activity Fragment xml DataBinding Database Room

    API Retrofit + OkHttp Repository ViewModel call call call LiveData
  19. 2018 Model Single/Maybe/Completable/Flowable (RxJava2) Activity Fragment xml DataBinding Database Room

    API Retrofit + OkHttp Repository ViewModel call call call LiveData data View ViewModel Repository
  20. 2018 Model Single/Maybe/Completable/Flowable (RxJava2) Activity Fragment xml DataBinding Database Room

    API Retrofit + OkHttp Repository ViewModel call call call LiveData data View ViewModel Repository ,PUMJOʹΑΔදݱͷγϯϓϧԽ ""$ͷ୆಄ 7JFX.PEFMͷංେԽɾ 7JFXͷෳࡶԽ
  21. 2019 TUBUT 044 ਓ ,PUMJOɾ4XJGU"OESPJEɾJ04 ΞʔΩςΫνϟ 'MVY 3FQPTJUPSZ .VMUJ.PEVMF ࣌୅എܠ

    ,PUMJO$PSPVUJOFT͕੮ר "OESPJEYܥͷ࣌୅  ϊονελΠϧͷσΟεϓϨΠ ओͳϥΠϒϥϦ %BHHFS ,PUMJO$PSPVUJOFT ,UPS 0L)UUQ 4UFUIP (SPVQJF %BUB#JOEJOH 1JDBTP
  22. 2019 Dispatcher Database Room API Ktor-client ActionCreator xml Store Fragment

    Repository suspend call DataBinding BroadcastChannel suspend call suspend call suspend call LiveData call
  23. Dispatcher Database Room API Ktor-client ActionCreator xml Store Fragment Repository

    suspend call DataBinding BroadcastChannel suspend call suspend call suspend call LiveData Flux call data Repository 2019
  24. 2020 TUBUT 044 ਓ ,PUMJOɾ4XJGU"OESPJEɾJ04 ΞʔΩςΫνϟ .77. 3FQPTJUPSZ .VMUJ.PEVMF ࣌୅എܠ

    +FUQBDL$PNQPTFBMQIBͰ੝Γ্͕Δɻ "OESPJEY Yܥͷ࣌୅  δΣενϟφϏήʔγϣϯͷରԠ ओͳϥΠϒϥϦ %BHHFS ,PUMJO$PSPVUJOFT'MPXT ,UPS 0L)UUQ 4UFUIP (SPVQJF %BUB#JOEJOH $PJM
  25. 2020 Model Coroutines Flow Activity Fragment xml DataBinding Database Room

    API Ktor-Client Repository ViewModel call Suspend call Suspend call LiveData
  26. 2020 Model Coroutines Flow Activity Fragment xml DataBinding Database Room

    API Ktor-Client Repository ViewModel call Suspend call Suspend call LiveData data View ViewModel Repository
  27. (Section3) Learn future de facto for Android app development from

    conference app 2021. ͜ͷηΫγϣϯͷ໨త  ະདྷͷΞʔΩςΫνϟσϑΝΫτΛ DPOGFSFODFBQQ͔Βײ͡Δ  +FUQBDL$PNQPTFͱͷ޲͖߹͍ํɾ ϚϧνϓϥοτϑΥʔϜͰͷ ڞ௨Խʹ͍ͭͯߟ͑Δ
  28. 2021 TUBUT 044 ਓ ,PUMJOɾ4XJGU"OESPJEɾJ04 ΞʔΩςΫνϟ .77. .7* .VMUJNPEVMF ࣌୅എܠ

    ,..ʹΑΔϚϧνϓϥοτϑΥʔϜ "OESPJEͷ࣌୅  .BUFSJBM:PV ओͳϥΠϒϥϦ )JMU ,PUMJO$PSPVUJOFT'MPXT ,UPS %BUB4UPSF +FUQBDL$PNQPTF
  29. 2021 Model Coroutines Flow Activity Fragment Jetpack Compose Database DataStore

    API Ktor-Client Repository ViewModel call Suspend call Suspend call flow
  30. 2021 Model Coroutines Flow Activity Fragment Jetpack Compose Database API

    Ktor-Client Repository ViewModel call Suspend call Suspend call flow View DataStore
  31. 2021 Model Coroutines Flow Activity Fragment Jetpack Compose Database DataStore

    API Ktor-Client Repository ViewModel call Suspend call Suspend call flow
  32. 2021 Model Coroutines Flow Activity Fragment Jetpack Compose Database API

    Ktor-Client Repository ViewModel call Suspend call Suspend call flow Data (Android/iOS) DataStore
  33. 2021 Data Compose Android iOS ViewModel Wrapper SwiftUI call flow

    call flow ͲͪΒͷϓϥοτϑΥʔϜͰ΋ಈ͘Α͏ͳٕज़બఆ
  34. [1] DroidKaigi, “DroidKaigi公式フィードアプリ” https://play.google.com/store/apps/details?id=io.github.droidkaigi.feeder [2] konifar, “DroidKaigi2016 Repository” https://github.com/konifar/droidkaigi2016 [3]

    DroidKaigi, “DroidKaigi2017 Repository” https://github.com/DroidKaigi/conference-app-2017 [4] DroidKaigi, “DroidKaigi2018 Repository” https://github.com/DroidKaigi/conference-app-2018 [5] DroidKaigi, “DroidKaigi2019 Repository” https://github.com/DroidKaigi/conference-app-2019 [6] DroidKaigi, “DroidKaigi2020 Repository” https://github.com/DroidKaigi/conference-app-2020 [7] DroidKaigi, “DroidKaigi2021 Repository” https://github.com/DroidKaigi/conference-app-2021 [8] ⽇⾼正博,⼩⻄裕介,藤原聖,吉岡毅,今井智章, “Androidアプリ設計パターン⼊⾨” https://peaks.cc/books/architecture_patterns [9] Johannes, “The good and bad of modern app architecture” https://droidkaigi.jp/2019/timetable/70668 [10] mhidaka, “mhidakaさんのtweets” https://twitter.com/mhidaka/status/1441264050332061699 [11] konifar, “DroidKaigi2018-flutter Repository” https://github.com/konifar/droidkaigi2018-flutter [12] chigichan24, “DroidKaigi2019のコードを読み解く” https://speakerdeck.com/chigichan24/read-droidkaigi2019-app-source-code [13] Aakira, “flux with kotlin” https://speakerdeck.com/aakira/flux-with-kotlin-abema-dev-con-2016 [14] 釘宮慎之介,横幕圭真, “チームで育てるAndroidアプリ設計” https://peaks.cc/books/architecture_with_team [15] KenzoNirasawa, “iOSエンジニアがKMPで⼤規模アプリのロジック共通化をしてうまくできている話” https://speakerdeck.com/nirazo/iosdc2021 [16] Wikipedia, “Android version history” https://en.wikipedia.org/wiki/Android_version_history [17] chigichan24, “継続的に機能開発を進めながら⾏うマルチモジュール化” https://speakerdeck.com/chigichan24/ji-sok-de-niji-neng-kai-fa-wojin-menagaraxing-umarutimoziyuruhua [18] Google Developers, “アプリアーキテクチャガイド” https://developer.android.com/jetpack/guide [19] Google Developers, “開発者基調講演 (Google I/O ’17)” https://www.youtube.com/watch?v=EtQ8Le8-zyo