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

継続的に機能開発を進めながら行うマルチモジュール化

 継続的に機能開発を進めながら行うマルチモジュール化

A continuous process of modularization with feature development / 継続的に機能開発を進めながら行うマルチモジュール化

DroidKaigi2020 にて行われる予定だったスライドの日本語訳versionです.

2017年頃からアプリケーションのマルチモジュール化による利点が多く得られるようになった.特に「差分ビルドのビルド時間短縮化」「InstantAppやDynamicFeatureModuleの導入可能」「モジュール依存関係グラフのDAG化」といった利点が語られる.これらの利点は肥大化したアプリケーション上で高速に開発を行う上での助けになったり,ユーザ体験を向上させる手助けとなったりする.

一方で,これまで大部分をアプリケーションモジュール(:app)で開発されてきたアプリケーションを,容易にマルチモジュール化することは難しい.特にMVVMやFluxといったルールを明確化したアーキテクチャに乗っていない場合は問題が顕著だ.また,並行してマルチモジュール化とは本質的に無関係な機能改善を進めていく必要がある場合,問題はさらにややこしくなる.

本セッションでは上に挙げた実体験を基にどのようにしてマルチモジュール化を進めていったのかを時系列順に,そのハマりどころと解決方法を中心に紹介する.

1. What is a multi-module app? / マルチモジュール化とは?
2. The first step is :app to :legacy / はじめの一歩は:appから:legacyへ
3. A strategy of Gradle in multi-module app / マルチモジュールとGradle戦略
4. Modularization as refactoring / リファクタリングとしてのマルチモジュール化
5. Modularization and Android Jetpack / Jetpackとマルチモジュール
6. A continuous process of modularization with feature development
/ 継続的に機能開発を行いながら進めるために

Kazuki Chigita

February 20, 2020
Tweet

More Decks by Kazuki Chigita

Other Decks in Programming

Transcript

  1. ©2020 Wantedly, Inc. Feb 20, 2020 - Kazuki Chigita (@chigichan24)

    Room AppBars ܧଓతʹ
 ػೳ։ൃΛਐΊͳ͕Βߦ͏
 ϚϧνϞδϡʔϧԽ
  2. ©2020 Wantedly, Inc. A continuous process of modularization with feature

    development Feb 20, 2020 - Kazuki Chigita (@chigichan24) Room AppBars
  3. ©2020 Wantedly, Inc. Kazuki Chigita / @chigichan24 Graduate student at

    University of Tsukuba #Android #Kotlin #ApplicationArchitecture #BeyondLegacyCode #MobileInfra #ImageProcessing 1
  4. ©2020 Wantedly, Inc. Kazuki Chigita / @chigichan24 Graduate student at

    University of Tsukuba #Android #Kotlin #ApplicationArchitecture #BeyondLegacyCode #MobileInfra #ImageProcessing 2 Πϯλʔϯγοϓ
 Ͱͷ੒Ռ
  5. ©2020 Wantedly, Inc. 1. What is a multi-module app? /

    ϚϧνϞδϡʔϧԽͱ͸ʁ 2. The first step is :app to :legacy / ͸͡ΊͷҰา͸:app͔Β:legacy΁ • AndroidΛਖ਼͘͠ཧղ͠ͳ͍ͱϋϚΔ࿩ • ࣄྫ঺հ 3. A strategy of Gradle in multi-module app / ϚϧνϞδϡʔϧͱGradleઓུ • Flavor / BuildTypeपΓ͸͜͏͠Α͏ • Α͘࢖͏ઃఆͷڞ༗Λߦ͏ Outline ( 1 / 2 ) 3
  6. ©2020 Wantedly, Inc. 4. Modularization as refactoring / ϦϑΝΫλϦϯάͱͯ͠ͷϚϧνϞδϡʔϧԽ •

    བྷΈ߹ͬͨෳࡶͳؔ܎Λղ͖΄͙ͨ͢ΊʹͰ͖Δ͜ͱ 5. Modularization and Android Jetpack / JetpackͱϚϧνϞδϡʔϧ • NavigationͷಋೖͱޮՌ • ࣄྫ঺հ 6. A continuous process of modularization with feature development
 / ܧଓతʹػೳ։ൃΛߦ͍ͳ͕ΒਐΊΔͨΊʹ • ҰาҰาਐΊΔϞδϡʔϧԽ
 Outline ( 2 / 2 ) 4
  7. ©2020 Wantedly, Inc. Section2 Outline 7 Section3 Section4 Section5 Section6

    Section 1 ͸͡ΊͷҰา໨ ͜Ε͔Βͷൃలͷج൫ߗΊ
  8. ©2020 Wantedly, Inc. Section3 Outline 8 Section2 Section4 Section5 Section6

    Section 1 ϚϧνϞδϡʔϧͰͷbuild.gradle implementationͷҧ͍΍ڞ௨Խʹ͍ͭͯ
  9. ©2020 Wantedly, Inc. Section5 Outline 10 Section2 Section3 Section4 Section6

    Section 1 JetPackΛಋೖͯ͠Έͨ࿩ NavigationΛಋೖ͢Δྫ
  10. ©2020 Wantedly, Inc. Section5 Section6 Outline 11 Section2 Section3 Section4

    Section 1 ػೳ։ൃΛਐΊͳ͕Β Ͳ͏ϞδϡʔϧԽ͢Δ͔ʁ
  11. ©2020 Wantedly, Inc. Outline 12 Section2 Section3 Section4 Section5 Section6

    Section 1 શମͷ࿩ͷྲྀΕͱͯ͜͠ͷΑ͏ͳϑϩʔΛ
 ҙࣝ͢Δͱશମͱͯ͠εοΩϦ͠·͢ɽ
  12. ©2020 Wantedly, Inc. 1. What is a multi-module app? /

    ϚϧνϞδϡʔϧԽͱ͸ʁ 2. The first step is :app to :legacy / ͸͡ΊͷҰา͸:app͔Β:legacy΁ • AndroidΛਖ਼͘͠ཧղ͠ͳ͍ͱϋϚΔ࿩ • ࣄྫ঺հ 3. A strategy of Gradle in multi-module app / ϚϧνϞδϡʔϧͱGradleઓུ • Flavor / BuildTypeपΓ͸͜͏͠Α͏ • Α͘࢖͏ઃఆͷڞ༗Λߦ͏ Outline ( 1 / 2 ) 13
  13. ©2020 Wantedly, Inc. 1. What is a multi-module app? /

    ϚϧνϞδϡʔϧԽͱ͸ʁ 2. The first step is :app to :legacy / ͸͡ΊͷҰา͸:app͔Β:legacy΁ • AndroidΛਖ਼͘͠ཧղ͠ͳ͍ͱϋϚΔ࿩ • ࣄྫ঺հ 3. A strategy of Gradle in multi-module app / ϚϧνϞδϡʔϧͱGradleઓུ • Flavor / BuildTypeपΓ͸͜͏͠Α͏ • Α͘࢖͏ઃఆͷڞ༗Λߦ͏ Outline ( 1 / 2 ) 14
  14. ©2020 Wantedly, Inc. :app ✂ ✂ ✂ ✂ 1. What

    is a multi-module app? / ϚϧνϞδϡʔϧԽͱ͸ʁ 16
  15. ©2020 Wantedly, Inc. ✂ ✂ ✂ :app ✂ 1. What

    is a multi-module app? / ϚϧνϞδϡʔϧԽͱ͸ʁ 17
  16. ©2020 Wantedly, Inc. :app :feature A :feature B :feature C

    :feature D :library X :library Y :library Z :core :constants :hoge :piyo 1. What is a multi-module app? / ϚϧνϞδϡʔϧԽͱ͸ʁ 18
  17. ©2020 Wantedly, Inc. :app :feature A :feature B :feature C

    :feature D :library X :library Y :library Z :core :constants :hoge :piyo 1. What is a multi-module app? / ϚϧνϞδϡʔϧԽͱ͸ʁ 19
  18. ©2020 Wantedly, Inc. :app :feature A :feature B :feature C

    :feature D :library X :library Y :library Z :core :constants :hoge :piyo 1. What is a multi-module app? / ϚϧνϞδϡʔϧԽͱ͸ʁ 20
  19. ©2020 Wantedly, Inc. :feature A App module / ΞϓϦϞδϡʔϧ :app

    Library module / ϥΠϒϥϦϞδϡʔϧ [1] [1] https://developer.android.com/studio/projects/android-library layout΍navigation౳ͷres/ҎԼͷϑΝΠϧٴͼιʔείʔυΛ
 ؚΉ͜ͱ͕Ͱ͖Δ AAR (Android Archive) Ͱ͋Δɽ ࡉ͔ͳ੍໿͸͋Δ͕ɼجຊతʹ͸:appͱಉ༷ʹ࢖͏͜ͱ͕Ͱ͖Δɽ 1. What is a multi-module app? / ϚϧνϞδϡʔϧԽͱ͸ʁ 21
  20. ©2020 Wantedly, Inc. 1. ϞϊϦγοΫͳ؀ڥͰ͸Ͱ͖ͳ͍͜ͱ͕૿͍͑ͯΔ :app :feature A :feature C

    Instant App ͷ্ݶ͸10MBͰ͋Δɽ ػೳͷҰ෦Λମݧͤ͞Δ͜ͱ͸UXΛ޲্ͤ͞Δ͜ͱʹܨ͕Δɽ ϚϧνϞδϡʔϧԽ͞Ε͍ͯͳ͍ͱ؆୯ʹࢼ͢͜ͱ͸೉͍͠ɽ Under 4MB ← ࠷௿ݶඞཁͳϞδϡʔϧͷΈΛinclude͢Δɽ ← application Id౳ base ͱͯ͠ඞؚͣΉඞཁ͕͋Δɽ 1. What is a multi-module app? / ϚϧνϞδϡʔϧԽͱ͸ʁ 24
  21. ©2020 Wantedly, Inc. 2. Ϗϧυ͕͔͔࣌ؒΔ mainframerͷΑ͏ͳ֎෦Ϗϧυ؀ڥΛ࡞ͬͯϚγϯεϖοΫʹΑͬͯղܾ͢Δ → ݶք͕͋Δ → ମݧͱͯ͠ѱ͍ɾมͳϋϚΓํΛ͢Δ͜ͱ΋͋Δɽ

    ΄ͱΜͲมߋͷͳ͍΋ͷʹରͯ͠Ϟδϡʔϧ·Δ͝ͱϏϧυ͢Δͷ͸΋͍ͬͨͳ͍ɽ (ͱ͍ͬͯ΋cache͸͋Δఔ౓ޮ͍͍ͯΔ) ಠཱ͍ͯ͠ΔϞδϡʔϧ͸ฒྻʹϏϧυ͕Ͱ͖Δ͸ͣͳͷʹɼ
 γϯάϧΞϓϦέʔγϣϯͩͱͰ͖ͳ͍ 1. What is a multi-module app? / ϚϧνϞδϡʔϧԽͱ͸ʁ 26
  22. ©2020 Wantedly, Inc. :app :feature A :feature B :feature C

    :feature D :library X :library Y :library Z :core :constants :hoge :piyo 2. Ϗϧυ͕͔͔࣌ؒΔ :hogeΛมߋ͢Δ͚ͩͷͱ͖มߋΛड͚Δͷ͸ ͦΕʹؔ࿈͢Δ΋ͷ͚ͩɽ શؔ͘࿈ͷͳ͍΋ͷ͸ӨڹΛड͚ͣϏϧυ͕૸Βͳ͍ͨΊɼ Ϗϧυ͕࣌ؒૣ͘ͳΔͷ͕جຊతͳݪཧ 1. What is a multi-module app? / ϚϧνϞδϡʔϧԽͱ͸ʁ 27
  23. ©2020 Wantedly, Inc. 2. Ϗϧυ͕͔͔࣌ؒΔ :app :feature A :feature B

    :feature C :feature D :library X :library Y :library Z :core :constants :hoge :piyo :hogeΛมߋ͢Δ͚ͩͷͱ͖มߋΛड͚Δͷ͸ ͦΕʹؔ࿈͢Δ΋ͷ͚ͩɽ શؔ͘࿈ͷͳ͍΋ͷ͸ӨڹΛड͚ͣϏϧυ͕૸Βͳ͍ͨΊɼ Ϗϧυ͕࣌ؒૣ͘ͳΔͷ͕جຊతͳݪཧ 1. What is a multi-module app? / ϚϧνϞδϡʔϧԽͱ͸ʁ 28
  24. ©2020 Wantedly, Inc. :app :feature A :feature B :feature C

    :feature D :library X :library Y :library Z :core :constants :hoge :piyo 3. ΑΓڧ੍͍໿Λ͔͚͍ͨ ModuleΛϊʔυɼdependencyΛΤοδͱͯ͠ݟͨ࣌ʹ DAGͰ͋Δɽ(Moduleͷ॥؀ࢀর͕ͳ͍) ҙਤ͠ͳ͍ݺͼग़͠Λߏ଄తʹະવʹ๷͙͜ͱ͕Ͱ͖Δ 1. What is a multi-module app? / ϚϧνϞδϡʔϧԽͱ͸ʁ 30
  25. ©2020 Wantedly, Inc. :app :feature A :feature B :feature C

    :feature D :library X :library Y :library Z :core :constants :hoge :piyo 3. ΑΓڧ੍͍໿Λ͔͚͍ͨ ModuleΛϊʔυɼdependencyΛΤοδͱͯ͠ݟͨ࣌ʹ DAGͰ͋Δɽ(Moduleͷ॥؀ࢀর͕ͳ͍) ҙਤ͠ͳ͍ݺͼग़͠Λߏ଄తʹະવʹ๷͙͜ͱ͕Ͱ͖Δ 1. What is a multi-module app? / ϚϧνϞδϡʔϧԽͱ͸ʁ 31
  26. ©2020 Wantedly, Inc. :app :feature A :feature B :feature C

    :feature D :library X :library Y :library Z :core :constants :hoge :piyo 3. ΑΓڧ੍͍໿Λ͔͚͍ͨ ModuleΛϊʔυɼdependencyΛΤοδͱͯ͠ݟͨ࣌ʹ DAGͰ͋Δɽ(Moduleͷ॥؀ࢀর͕ͳ͍) ҙਤ͠ͳ͍ݺͼग़͠Λߏ଄తʹະવʹ๷͙͜ͱ͕Ͱ͖Δ 1. What is a multi-module app? / ϚϧνϞδϡʔϧԽͱ͸ʁ 32
  27. ©2020 Wantedly, Inc. :app :feature A :feature B :feature C

    :feature D :library X :library Y :library Z :core :constants :hoge :piyo 3. ΑΓڧ੍͍໿Λ͔͚͍ͨ ModuleΛϊʔυɼdependencyΛΤοδͱͯ͠ݟͨ࣌ʹ DAGͰ͋Δɽ(Moduleͷ॥؀ࢀর͕ͳ͍) ҙਤ͠ͳ͍ݺͼग़͠Λߏ଄తʹະવʹ๷͙͜ͱ͕Ͱ͖Δ 1. What is a multi-module app? / ϚϧνϞδϡʔϧԽͱ͸ʁ 33
  28. ©2020 Wantedly, Inc. :app :feature A :feature B :feature C

    :feature D :library X :library Y :library Z :core :constants :hoge :piyo :app 1. What is a multi-module app? / ϚϧνϞδϡʔϧԽͱ͸ʁ 34
  29. ©2020 Wantedly, Inc. :app :feature A :feature B :feature C

    :feature D :library X :library Y :library Z :core :constants :hoge :piyo :app Ͳ͏΍ͬͯϚϧνϞδϡʔϧԽ͢Δͷ͔ʁ 1. What is a multi-module app? / ϚϧνϞδϡʔϧԽͱ͸ʁ 35
  30. ©2020 Wantedly, Inc. :app :feature A :feature B :feature C

    :feature D :library X :library Y :library Z :core :constants :hoge :piyo :app Ͳ͏΍ͬͯϚϧνϞδϡʔϧԽ͢Δͷ͔ʁ ܧଓతʹػೳ։ൃΛਐΊͳ͕Β 1. What is a multi-module app? / ϚϧνϞδϡʔϧԽͱ͸ʁ 36
  31. ©2020 Wantedly, Inc. :app :feature A :feature B :feature C

    :feature D :library X :library Y :library Z :core :constants :hoge :piyo :app Ͳ͏΍ͬͯϚϧνϞδϡʔϧԽ͢Δͷ͔ʁ ܧଓతʹػೳ։ൃΛਐΊͳ͕Β 1. What is a multi-module app? / ϚϧνϞδϡʔϧԽͱ͸ʁ 37
  32. ©2020 Wantedly, Inc. 1. What is a multi-module app? /

    ϚϧνϞδϡʔϧԽͱ͸ʁ 2. The first step is :app to :legacy / ͸͡ΊͷҰา͸:app͔Β:legacy΁ • AndroidΛਖ਼͘͠ཧղ͠ͳ͍ͱϋϚΔ࿩ • ࣄྫ঺հ 3. A strategy of Gradle in multi-module app / ϚϧνϞδϡʔϧͱGradleઓུ • Flavor / BuildTypeपΓ͸͜͏͠Α͏ • Α͘࢖͏ઃఆͷڞ༗Λߦ͏ Outline ( 1 / 2 ) 38
  33. ©2020 Wantedly, Inc. 1. What is a multi-module app? /

    ϚϧνϞδϡʔϧԽͱ͸ʁ 2. The first step is :app to :legacy / ͸͡ΊͷҰา͸:app͔Β:legacy΁ • AndroidΛਖ਼͘͠ཧղ͠ͳ͍ͱϋϚΔ࿩ • ࣄྫ঺հ 3. A strategy of Gradle in multi-module app / ϚϧνϞδϡʔϧͱGradleઓུ • Flavor / BuildTypeपΓ͸͜͏͠Α͏ • Α͘࢖͏ઃఆͷڞ༗Λߦ͏ Outline ( 1 / 2 ) 39
  34. ©2020 Wantedly, Inc. 2. The first step is :app to

    :legacy ͸͡ΊͷҰา͸:app͔Β:legacy΁
  35. ©2020 Wantedly, Inc. 2. The first step is :app to

    :legacy / ͸͡ΊͷҰา͸:app͔Β:legacy΁ :app 40
  36. ©2020 Wantedly, Inc. 2. The first step is :app to

    :legacy / ͸͡ΊͷҰา͸:app͔Β:legacy΁ :app ΞϓϦͷΤϯτϦʔϙΠϯτ͚ͩΛ :app ʹ࡞੒͠ɼ શͯͷػೳΛ library_module ʹಈ͔͢ɽ ͸͡Ί͔Β͖Ε͍ʹ෼ׂ͢Δ͜ͱ͸೉͍͠ 41
  37. ©2020 Wantedly, Inc. 2. The first step is :app to

    :legacy / ͸͡ΊͷҰา͸:app͔Β:legacy΁ :app ΞϓϦͷΤϯτϦʔϙΠϯτ͚ͩΛ :app ʹ࡞੒͠ɼ શͯͷػೳΛ library_module ʹಈ͔͢ɽ ࠓޙ͸খ͍ͯ͘͘͞͠ͱ͍͏ࢥ͍ΛࠐΊͯ :legacyͱ໋໊ ͸͡Ί͔Β͖Ε͍ʹ෼ׂ͢Δ͜ͱ͸೉͍͠ 42
  38. ©2020 Wantedly, Inc. 2. The first step is :app to

    :legacy / ͸͡ΊͷҰา͸:app͔Β:legacy΁ :app ͸͡Ί͔Β͖Ε͍ʹ෼ׂ͢Δ͜ͱ͸೉͍͠ ΞϓϦͷΤϯτϦʔϙΠϯτ͚ͩΛ :app ʹ࡞੒͠ɼ શͯͷػೳΛ library_module ʹಈ͔͢ɽ ࠓޙ͸খ͍ͯ͘͘͞͠ͱ͍͏ࢥ͍ΛࠐΊͯ :legacyͱ໋໊ ͳͥ੾Γग़͢ͷ͔ʁ 1. ੾Γग़ͨ͠moduleؒΛભҠ͢ΔͨΊͷ
 ࢓૊Έ͕࡞Γ΍͍͢ɽ(্Ґmodule͕ཉ͍͠) 2. Ϗϧυ࣌͸ϞδϡʔϧΛෳ਺ʹ੾Γग़͠ ͯ΋ɼඞͣ:appΛ௨ΔͷͰେ͖͍ͱ
 ߴ଎Խʹد༩͠ʹ͍͘ 43
  39. ©2020 Wantedly, Inc. 2. The first step is :app to

    :legacy / ͸͡ΊͷҰา͸:app͔Β:legacy΁ :app :app :legacy 44
  40. ©2020 Wantedly, Inc. 2. The first step is :app to

    :legacy / ͸͡ΊͷҰา͸:app͔Β:legacy΁ :app :app :legacy ҰےೄͰ͸ߦ͔ͳ͍ ଟ͘ͷ᠘͕ 45
  41. ©2020 Wantedly, Inc. 2. The first step is :app to

    :legacy / ͸͡ΊͷҰา͸:app͔Β:legacy΁ 1. Android Library͔ΒpackageΛ
 ࡞ͬͯ:appͷϑΝΠϧΛcopy & paste ͢Δͱ൵ࢂʹͳΔɽ 46
  42. ©2020 Wantedly, Inc. 2. The first step is :app to

    :legacy / ͸͡ΊͷҰา͸:app͔Β:legacy΁ srcͷมߋཤྺ͕ফ͑ͯ͠·͏ɽ Last Modified͕શͯchigichan24ʹ 47
  43. ©2020 Wantedly, Inc. 2. The first step is :app to

    :legacy / ͸͡ΊͷҰา͸:app͔Β:legacy΁ build.gradleΛฤू͢ΔΑ͏ʹ͠Α͏ʂ 48
  44. ©2020 Wantedly, Inc. 2. The first step is :app to

    :legacy / ͸͡ΊͷҰา͸:app͔Β:legacy΁ build.gradleΛฤू͢ΔΑ͏ʹ͠Α͏ʂ 49
  45. ©2020 Wantedly, Inc. 2. The first step is :app to

    :legacy / ͸͡ΊͷҰา͸:app͔Β:legacy΁ build.gradleΛฤू͢ΔΑ͏ʹ͠Α͏ʂ 50
  46. ©2020 Wantedly, Inc. 2. The first step is :app to

    :legacy / ͸͡ΊͷҰา͸:app͔Β:legacy΁ 51
  47. ©2020 Wantedly, Inc. 2. The first step is :app to

    :legacy / ͸͡ΊͷҰา͸:app͔Β:legacy΁ ৽͍͠ϞδϡʔϧΛ৽نʹ࡞Δ࣌ طଘ:app moduleΛ Lib moduleʹҠߦ͢Δ࣌ 52
  48. ©2020 Wantedly, Inc. 2. The first step is :app to

    :legacy / ͸͡ΊͷҰา͸:app͔Β:legacy΁ 2. Epoxyͷ @EpoxyDataBindingLayouts({ })ʹ
 ࣦഊ͢Δɽ 53
  49. ©2020 Wantedly, Inc. 2. The first step is :app to

    :legacy / ͸͡ΊͷҰา͸:app͔Β:legacy΁ Epoxyͱ͸ʁ RecyclerViewͷϨΠΞ΢τ૊ΈΛ ؆қʹ͢Δ΋ͷ Groupie ͱ͔͕ྨࣅ @EpoxyDataBindingLayouts ͸ Epoxyʹରͯ͠resourceΛඥ෇͚ɼ BindingModelΫϥεΛ
 ࣗಈੜ੒ͤ͞ΔͨΊͷΞϊςʔγϣϯ 54
  50. ©2020 Wantedly, Inc. 2. The first step is :app to

    :legacy / ͸͡ΊͷҰา͸:app͔Β:legacy΁ 2. Epoxyͷ @EpoxyDataBindingLayouts({ }) ʹ
 ࣦഊ͢Δɽ 55
  51. ©2020 Wantedly, Inc. 2. The first step is :app to

    :legacy / ͸͡ΊͷҰา͸:app͔Β:legacy΁ 2. Epoxyͷ @EpoxyDataBindingLayouts({ }) ʹ
 ࣦഊ͢Δɽ :app͔Β:legacyʹ
 ಈ͔͚ͨͩ͠ͳͷʹɽɽɽɽ 56
  52. ©2020 Wantedly, Inc. 2. The first step is :app to

    :legacy / ͸͡ΊͷҰา͸:app͔Β:legacy΁ 2. Epoxyͷ @EpoxyDataBindingLayouts({ }) ʹ
 ࣦഊ͢Δɽ :app͔Β:legacyʹ
 ಈ͔͚ͨͩ͠ͳͷʹɽɽɽɽ -JCSBSZ.PEVMFͰͷSFTPVSDFTͷ࢓૊ΈΛ
 ਖ਼͘͠ཧղ͍ͯ͠Δඞཁ͕͋Δʂ 57
  53. ©2020 Wantedly, Inc. 2. The first step is :app to

    :legacy / ͸͡ΊͷҰา͸:app͔Β:legacy΁ :appͷR.java :library-moduleͷR.java 58
  54. ©2020 Wantedly, Inc. 2. The first step is :app to

    :legacy / ͸͡ΊͷҰา͸:app͔Β:legacy΁ :appͷR.java :library-moduleͷR.java 59
  55. ©2020 Wantedly, Inc. 2. The first step is :app to

    :legacy / ͸͡ΊͷҰา͸:app͔Β:legacy΁ :library moduleͷresource͸finalఆٛ͞Εͳ͍ (ޙʹϏϧυ࣌ʹ֤ϞδϡʔϧͷresourceͷmergeΛߦ͏ͨΊ) ↓ Javaͷ࢓༷ͷ໰୊ͳͷͰɼϥΠϒϥϦଆ͔Β͸Ͳ͏ʹ΋Ͱ͖ͳ͍ ↓ ίϯύΠϧΤϥʔͷൃੜ 60
  56. ©2020 Wantedly, Inc. 2. The first step is :app to

    :legacy / ͸͡ΊͷҰา͸:app͔Β:legacy΁ Epoxyͷղܾ๏[2] [2] https://github.com/airbnb/epoxy/blob/master/README.md 61
  57. ©2020 Wantedly, Inc. 2. The first step is :app to

    :legacy / ͸͡ΊͷҰา͸:app͔Β:legacy΁ Epoxyͷղܾ๏[2] [2] https://github.com/airbnb/epoxy/blob/master/README.md R2.javaΛੜ੒͢Δ butterknfie-gradle-plugin ΛೖΕΔ͜ͱͰղܾͰ͖Δʂ 62
  58. ©2020 Wantedly, Inc. 2. The first step is :app to

    :legacy / ͸͡ΊͷҰา͸:app͔Β:legacy΁ Epoxyͷղܾ๏[2] [2] https://github.com/airbnb/epoxy/blob/master/README.md R2.javaΛੜ੒͢Δ butterknfie-gradle-plugin ΛೖΕΔ͜ͱͰղܾͰ͖Δʂ ↓ AndroidͷഎܠΛ஌Δͱ “ͳͥ ͜ͷΑ͏ͳղܾࡦ͔”
 ΛཧղͰ͖Δ 63
  59. ©2020 Wantedly, Inc. 2. The first step is :app to

    :legacy / ͸͡ΊͷҰา͸:app͔Β:legacy΁ Epoxyͷղܾ๏[2] [2] https://github.com/airbnb/epoxy/blob/master/README.md R2.javaΛੜ੒͢Δ butterknfie-gradle-plugin ΛೖΕΔ͜ͱͰղܾͰ͖Δʂ ↓ AndroidͷഎܠΛ஌Δͱ “ͳͥ ͜ͷΑ͏ͳղܾࡦ͔”
 ΛཧղͰ͖Δ ྨࣅͷ໰୊ʹɼ-JCSBSZ.PEVMFͰͷ SFTPVSDFTͷ+BWB4XJUDIจ͕࢖༻Ͱ͖ͳ͍
 ໰୊͕͋Δɽ 64
  60. ©2020 Wantedly, Inc. 2. The first step is :app to

    :legacy / ͸͡ΊͷҰา͸:app͔Β:legacy΁ Epoxyͷղܾ๏[2] [2] https://github.com/airbnb/epoxy/blob/master/README.md R2.javaΛੜ੒͢Δ butterknfie-gradle-plugin ΛೖΕΔ͜ͱͰղܾͰ͖Δʂ ↓ AndroidͷഎܠΛ஌Δͱ “ͳͥ ͜ͷΑ͏ͳղܾࡦ͔”
 ΛཧղͰ͖Δ ྨࣅͷ໰୊ʹɼ-JCSBSZ.PEVMFͰͷ SFTPVSDFTͷ+BWB4XJUDIจ͕࢖༻Ͱ͖ͳ͍
 ໰୊͕͋Δɽ → if-elseͰஔ͖׵͑Δ 65
  61. ©2020 Wantedly, Inc. 2. The first step is :app to

    :legacy / ͸͡ΊͷҰา͸:app͔Β:legacy΁ Epoxyͷղܾ๏[2] [2] https://github.com/airbnb/epoxy/blob/master/README.md R2.javaΛੜ੒͢Δ butterknfie-gradle-plugin ΛೖΕΔ͜ͱͰղܾͰ͖Δʂ ↓ AndroidͷഎܠΛ஌Δͱ “ͳͥ ͜ͷΑ͏ͳղܾࡦ͔”
 ΛཧղͰ͖Δ ྨࣅͷ໰୊ʹɼ-JCSBSZ.PEVMFͰͷ SFTPVSDFTͷ+BWB4XJUDI͕ࣜ࢖༻Ͱ͖ͳ͍
 ໰୊͕͋Δɽ → if-elseͰஔ͖׵͑Δ 66
  62. ©2020 Wantedly, Inc. 2. The first step is :app to

    :legacy / ͸͡ΊͷҰา͸:app͔Β:legacy΁ 2. Epoxyͷ@EpoxyDataBindingLayouts({ })ʹ
 ࣦഊ͢Δɽ 1. Android Library͔ΒpackageΛ࡞ͬͯ
 :appͷϑΝΠϧΛmove͢Δͱ൵ࢂʹͳΔɽ ΞϓϦέʔγϣϯϞδϡʔϧͱ ϥΠϒϥϦϞδϡʔϧͷࡉ͔ͳҧ͍ʹ ஫ҙ͠ͳ͕ΒҠͦ͏ʂ 67
  63. ©2020 Wantedly, Inc. 2. The first step is :app to

    :legacy / ͸͡ΊͷҰา͸:app͔Β:legacy΁ :app :app :legacy 68
  64. ©2020 Wantedly, Inc. 2. The first step is :app to

    :legacy / ͸͡ΊͷҰา͸:app͔Β:legacy΁ :app :app :legacy ඞཁ࠷௿ݶͷapplication ͜Ε·Ͱ:appͩͬͨ΋ͷ 69
  65. ©2020 Wantedly, Inc. 1. What is a multi-module app? /

    ϚϧνϞδϡʔϧԽͱ͸ʁ 2. The first step is :app to :legacy / ͸͡ΊͷҰา͸:app͔Β:legacy΁ • AndroidΛਖ਼͘͠ཧղ͠ͳ͍ͱϋϚΔ࿩ • ࣄྫ঺հ 3. A strategy of Gradle in multi-module app / ϚϧνϞδϡʔϧͱGradleઓུ • Flavor / BuildTypeपΓ͸͜͏͠Α͏ • Α͘࢖͏ઃఆͷڞ༗Λߦ͏ Outline ( 1 / 2 ) 70
  66. ©2020 Wantedly, Inc. 1. What is a multi-module app? /

    ϚϧνϞδϡʔϧԽͱ͸ʁ 2. The first step is :app to :legacy / ͸͡ΊͷҰา͸:app͔Β:legacy΁ • AndroidΛਖ਼͘͠ཧղ͠ͳ͍ͱϋϚΔ࿩ • ࣄྫ঺հ 3. A strategy of Gradle in multi-module app / ϚϧνϞδϡʔϧͱGradleઓུ • Flavor / BuildTypeपΓ͸͜͏͠Α͏ • Α͘࢖͏ઃఆͷڞ༗Λߦ͏ Outline ( 1 / 2 ) 71
  67. ©2020 Wantedly, Inc. 3. A strategy of Gradle in multi-module

    app / ϚϧνϞδϡʔϧͱGradleઓུ :app :legacy ͳʹΛมߋ͍ͯ͜͠͏ 72
  68. ©2020 Wantedly, Inc. 3. A strategy of Gradle in multi-module

    app / ϚϧνϞδϡʔϧͱGradleઓུ :app :legacy 1. BuildConfigͱͷ޲͖߹͍ํ 2. ֤moduleΛͲ͏΍ͬͯͭͳ͙͔ 3. ֤moduleͷbuild.gradleΛ
 ηϚϯςΟΫεͰڞ௨Խ͢Δ 73
  69. ©2020 Wantedly, Inc. 3. A strategy of Gradle in multi-module

    app / ϚϧνϞδϡʔϧͱGradleઓུ :app :legacy 1. BuildConfigͱͷ޲͖߹͍ํ 2. ֤moduleΛͲ͏΍ͬͯͭͳ͙͔ 3. ֤moduleͷbuild.gradleΛ
 ηϚϯςΟΫεͰڞ௨Խ͢Δ 74
  70. ©2020 Wantedly, Inc. 3. A strategy of Gradle in multi-module

    app / ϚϧνϞδϡʔϧͱGradleઓུ :app :legacy BuildConfigͱͲ͏޲͖߹͏ʁ 1. BuildConfigͱͷ޲͖߹͍ํ 75
  71. ©2020 Wantedly, Inc. 3. A strategy of Gradle in multi-module

    app / ϚϧνϞδϡʔϧͱGradleઓུ :app :legacy BuildConfigͱͲ͏޲͖߹͏ʁ ର৅ͷΞϓϦέʔγϣϯͰ͸ɼ BuildType + FlavorʹΑͬͯ ༷ʑͳ؀ڥม਺Λ੍ޚ͍ͯͨ͠ 1. BuildConfigͱͷ޲͖߹͍ํ 76
  72. ©2020 Wantedly, Inc. 3. A strategy of Gradle in multi-module

    app / ϚϧνϞδϡʔϧͱGradleઓུ :app :legacy BuildConfigͱͲ͏޲͖߹͏ʁ ର৅ͷΞϓϦέʔγϣϯͰ͸ɼ BuildType + FlavorʹΑͬͯ ༷ʑͳ؀ڥม਺Λ੍ޚ͍ͯͨ͠ Ϟδϡʔϧ͝ͱʹBuildConfig.java͕ੜ੒
 ͞ΕΔͨΊɼڞ௨ͯ͠࢖͏ʹ͸޻෉͕ඞཁʂ 1. BuildConfigͱͷ޲͖߹͍ํ 77
  73. ©2020 Wantedly, Inc. 3. A strategy of Gradle in multi-module

    app / ϚϧνϞδϡʔϧͱGradleઓུ ڞ௨ͷ:appʹ͋ΔBuildConfigΛ࢖͍͍ͨʂ ͕:legacy -> :appͷࢀর͕Ͱ͖ͳ͍ɽ :legacy :app BuildConfig.java 1. BuildConfigͱͷ޲͖߹͍ํ 78
  74. ©2020 Wantedly, Inc. 3. A strategy of Gradle in multi-module

    app / ϚϧνϞδϡʔϧͱGradleઓུ ڞ௨ͷ:appʹ͋ΔBuildConfigΛ࢖͍͍ͨʂ ͕:legacy -> :appͷࢀর͕Ͱ͖ͳ͍ɽ :legacy :app BuildConfig.java 1. BuildConfigͱͷ޲͖߹͍ํ 79
  75. ©2020 Wantedly, Inc. 3. A strategy of Gradle in multi-module

    app / ϚϧνϞδϡʔϧͱGradleઓུ ڞ௨ͷ:appʹ͋ΔBuildConfigΛ࢖͍͍ͨʂ ͕:legacy -> :appͷࢀর͕Ͱ͖ͳ͍ɽ :legacy :app BuildConfig.java 1. BuildConfigͱͷ޲͖߹͍ํ 80
  76. ©2020 Wantedly, Inc. 3. A strategy of Gradle in multi-module

    app / ϚϧνϞδϡʔϧͱGradleઓུ ڞ௨ͷ:appʹ͋ΔBuildConfigΛ࢖͍͍ͨʂ ͕:legacy -> :appͷࢀর͕Ͱ͖ͳ͍ɽ :legacy :app BuildConfig.java Θͨ͠ʮ͑ͬɽશ෦ͷbuild.gradleʹॻ͔ͳ͖Ό͍͚ͳ͍ͷʁʯ 1. BuildConfigͱͷ޲͖߹͍ํ 81
  77. ©2020 Wantedly, Inc. 3. A strategy of Gradle in multi-module

    app / ϚϧνϞδϡʔϧͱGradleઓུ ڞ௨ͷ:appʹ͋ΔBuildConfigΛ࢖͍͍ͨʂ ͕:legacy -> :appͷࢀর͕Ͱ͖ͳ͍ɽ :legacy :app BuildConfig.java Θͨ͠ʮ͑ͬɽશ෦ͷbuild.gradleʹॻ͔ͳ͖Ό͍͚ͳ͍ͷʁʯ ໰୊ͷղܾͷجຊΞΠσΞ $POpHΛ֨ೲ͢ΔϞδϡʔϧΛ࡞Δ 1. BuildConfigͱͷ޲͖߹͍ํ 82
  78. ©2020 Wantedly, Inc. 3. A strategy of Gradle in multi-module

    app / ϚϧνϞδϡʔϧͱGradleઓུ :app :legacy :BuildConfig 1. BuildConfigͱͷ޲͖߹͍ํ 83
  79. ©2020 Wantedly, Inc. 3. A strategy of Gradle in multi-module

    app / ϚϧνϞδϡʔϧͱGradleઓུ :app :legacy :BuildConfig BuildConfigͷinterface͚ͩఏڙ͢Δɽ 1. BuildConfigͱͷ޲͖߹͍ํ 84
  80. ©2020 Wantedly, Inc. 3. A strategy of Gradle in multi-module

    app / ϚϧνϞδϡʔϧͱGradleઓུ :app :legacy :BuildConfig BuildConfigͷinterface͚ͩఏڙ͢Δɽ ۩ମతͳ஋͸:appͷapplication಺ͰॳظԽ/஫ೖ 1. BuildConfigͱͷ޲͖߹͍ํ 85
  81. ©2020 Wantedly, Inc. 3. A strategy of Gradle in multi-module

    app / ϚϧνϞδϡʔϧͱGradleઓུ :app :legacy :BuildConfig BuildConfigͷinterface͚ͩఏڙ͢Δɽ ۩ମతͳ஋͸:appͷapplication಺ͰॳظԽ/஫ೖ :legacy͔Β͸:BuildConfigΛࢀর͢Δ͚ͩ 1. BuildConfigͱͷ޲͖߹͍ํ 86
  82. ©2020 Wantedly, Inc. 3. A strategy of Gradle in multi-module

    app / ϚϧνϞδϡʔϧͱGradleઓུ :app :legacy :BuildConfig BuildConfigͷinterface͚ͩఏڙ͢Δɽ ۩ମతͳ஋͸:appͷapplication಺ͰॳظԽ/஫ೖ :legacy͔Β͸:BuildConfigΛࢀর͢Δ͚ͩ module͕૿͑ͯ΋:BuildConfigΛࢀর͢Δ͚ͩ 1. BuildConfigͱͷ޲͖߹͍ํ 87
  83. ©2020 Wantedly, Inc. 3. A strategy of Gradle in multi-module

    app / ϚϧνϞδϡʔϧͱGradleઓུ :app :legacy :BuildConfig BuildConfigͷinterface͚ͩఏڙ͢Δɽ ۩ମతͳ஋͸:appͷapplication಺ͰॳظԽ/஫ೖ :legacy͔Β͸:BuildConfigΛࢀর͢Δ͚ͩ module͕૿͑ͯ΋:BuildConfigΛࢀর͢Δ͚ͩ 1. BuildConfigͱͷ޲͖߹͍ํ ޙʹ΋঺հ͢Δ %*1ͱ͍͏ख๏ σβΠϯύλʔϯ 88
  84. ©2020 Wantedly, Inc. 3. A strategy of Gradle in multi-module

    app / ϚϧνϞδϡʔϧͱGradleઓུ :app :legacy 1. BuildConfigͱͷ޲͖߹͍ํ 2. ֤moduleΛͲ͏΍ͬͯͭͳ͙͔ 3. ֤moduleͷbuild.gradleΛ
 ηϚϯςΟΫεͰڞ௨Խ͢Δ 89
  85. ©2020 Wantedly, Inc. 3. A strategy of Gradle in multi-module

    app / ϚϧνϞδϡʔϧͱGradleઓུ 2. ֤moduleΛͲ͏΍ͬͯͭͳ͙͔ api project(‘:legacy’) implementation project(‘:legacy’) :app :legacy :app :legacy 90
  86. ©2020 Wantedly, Inc. 3. A strategy of Gradle in multi-module

    app / ϚϧνϞδϡʔϧͱGradleઓུ 2. ֤moduleΛͲ͏΍ͬͯͭͳ͙͔ api project(‘:legacy’) implementation project(‘:legacy’) :app :legacy :app :legacy 91
  87. ©2020 Wantedly, Inc. 3. A strategy of Gradle in multi-module

    app / ϚϧνϞδϡʔϧͱGradleઓུ 2. ֤moduleΛͲ͏΍ͬͯͭͳ͙͔ ҧ͍͸ ϞδϡʔϧΛލ͍Ͱ ਪҠతʹ  ݺͼग़͠Λڐ༰͢Δ͔ʁ 92
  88. ©2020 Wantedly, Inc. 3. A strategy of Gradle in multi-module

    app / ϚϧνϞδϡʔϧͱGradleઓུ 2. ֤moduleΛͲ͏΍ͬͯͭͳ͙͔ :A :B :C implementation implementation 93
  89. ©2020 Wantedly, Inc. 3. A strategy of Gradle in multi-module

    app / ϚϧνϞδϡʔϧͱGradleઓུ 2. ֤moduleΛͲ͏΍ͬͯͭͳ͙͔ :AͰ:BͷΫϥεΛݺͼग़ͤΔ :BͰ:CͷΫϥεΛݺͼग़ͤΔ :A :B :C implementation implementation :AͰ:CͷΫϥεΛݺͼग़ͤΔ 94
  90. ©2020 Wantedly, Inc. 3. A strategy of Gradle in multi-module

    app / ϚϧνϞδϡʔϧͱGradleઓུ 2. ֤moduleΛͲ͏΍ͬͯͭͳ͙͔ :AͰ:BͷΫϥεΛݺͼग़ͤΔ :BͰ:CͷΫϥεΛݺͼग़ͤΔ :A :B :C implementation implementation :AͰ:CͷΫϥεΛݺͼग़ͤΔ 95
  91. ©2020 Wantedly, Inc. :B 3. A strategy of Gradle in

    multi-module app / ϚϧνϞδϡʔϧͱGradleઓུ 2. ֤moduleΛͲ͏΍ͬͯͭͳ͙͔ :AͰ:BͷΫϥεΛݺͼग़ͤΔ :BͰ:CͷΫϥεΛݺͼग़ͤΔ :A :C implementation implementation :AͰ:CͷΫϥεΛݺͼग़ͤΔ 96
  92. ©2020 Wantedly, Inc. :B 3. A strategy of Gradle in

    multi-module app / ϚϧνϞδϡʔϧͱGradleઓུ 2. ֤moduleΛͲ͏΍ͬͯͭͳ͙͔ :AͰ:BͷΫϥεΛݺͼग़ͤΔ :BͰ:CͷΫϥεΛݺͼग़ͤΔ :C implementation implementation :A :AͰ:CͷΫϥεΛݺͼग़ͤΔ 97
  93. ©2020 Wantedly, Inc. :B 3. A strategy of Gradle in

    multi-module app / ϚϧνϞδϡʔϧͱGradleઓུ 2. ֤moduleΛͲ͏΍ͬͯͭͳ͙͔ :AͰ:BͷΫϥεΛݺͼग़ͤΔ :BͰ:CͷΫϥεΛݺͼग़ͤΔ :C implementation implementation :A :AͰ:CͷΫϥεΛݺͼग़ͤΔ 98
  94. ©2020 Wantedly, Inc. :B 3. A strategy of Gradle in

    multi-module app / ϚϧνϞδϡʔϧͱGradleઓུ 2. ֤moduleΛͲ͏΍ͬͯͭͳ͙͔ :AͰ:BͷΫϥεΛݺͼग़ͤΔ :BͰ:CͷΫϥεΛݺͼग़ͤΔ :C implementation implementation :A :AͰ:CͷΫϥεΛݺͼग़ͤΔ 99
  95. ©2020 Wantedly, Inc. :B 3. A strategy of Gradle in

    multi-module app / ϚϧνϞδϡʔϧͱGradleઓུ 2. ֤moduleΛͲ͏΍ͬͯͭͳ͙͔ :AͰ:BͷΫϥεΛݺͼग़ͤΔ :BͰ:CͷΫϥεΛݺͼग़ͤΔ :C api api :A :AͰ:CͷΫϥεΛݺͼग़ͤΔ 100
  96. ©2020 Wantedly, Inc. :B 3. A strategy of Gradle in

    multi-module app / ϚϧνϞδϡʔϧͱGradleઓུ 2. ֤moduleΛͲ͏΍ͬͯͭͳ͙͔ :AͰ:BͷΫϥεΛݺͼग़ͤΔ :BͰ:CͷΫϥεΛݺͼग़ͤΔ :C api api :A :AͰ:CͷΫϥεΛݺͼग़ͤΔ 101
  97. ©2020 Wantedly, Inc. :B 3. A strategy of Gradle in

    multi-module app / ϚϧνϞδϡʔϧͱGradleઓུ 2. ֤moduleΛͲ͏΍ͬͯͭͳ͙͔ :AͰ:BͷΫϥεΛݺͼग़ͤΔ :BͰ:CͷΫϥεΛݺͼग़ͤΔ :C api api :A :AͰ:CͷΫϥεΛݺͼग़ͤΔ ҧ͍͸ ϞδϡʔϧΛލ͍Ͱ ਪҠతʹ  ݺͼग़͠Λڐ༰͢Δ͔ʁ 102
  98. ©2020 Wantedly, Inc. :B 3. A strategy of Gradle in

    multi-module app / ϚϧνϞδϡʔϧͱGradleઓུ 2. ֤moduleΛͲ͏΍ͬͯͭͳ͙͔ :AͰ:BͷΫϥεΛݺͼग़ͤΔ :BͰ:CͷΫϥεΛݺͼग़ͤΔ :C api api :A :AͰ:CͷΫϥεΛݺͼग़ͤΔ ҧ͍͸ ϞδϡʔϧΛލ͍Ͱ ਪҠతʹ  ݺͼग़͠Λڐ༰͢Δ͔ʁ Yes → api No → implementation 103
  99. ©2020 Wantedly, Inc. :B 3. A strategy of Gradle in

    multi-module app / ϚϧνϞδϡʔϧͱGradleઓུ 2. ֤moduleΛͲ͏΍ͬͯͭͳ͙͔ :AͰ:BͷΫϥεΛݺͼग़ͤΔ :BͰ:CͷΫϥεΛݺͼग़ͤΔ :C api api :A :AͰ:CͷΫϥεΛݺͼग़ͤΔ ҧ͍͸ ϞδϡʔϧΛލ͍Ͱ ਪҠతʹ  ݺͼग़͠Λڐ༰͢Δ͔ʁ Yes → api No → implementation ໬΋ͳཧ༝͕ͳ͍ݶΓ implementationΛ࢖͏΄͏͕ࠞཚΛੜΈʹ͍͘ 104
  100. ©2020 Wantedly, Inc. 3. A strategy of Gradle in multi-module

    app / ϚϧνϞδϡʔϧͱGradleઓུ :app :legacy 1. BuildConfigͱͷ޲͖߹͍ํ 2. ֤moduleΛͲ͏΍ͬͯͭͳ͙͔ 3. ֤moduleͷbuild.gradleΛ
 ηϚϯςΟΫεͰڞ௨Խ͢Δ 105
  101. ©2020 Wantedly, Inc. 3. A strategy of Gradle in multi-module

    app / ϚϧνϞδϡʔϧͱGradleઓུ 3. ֤moduleͷbuild.gradleΛηϚϯςΟΫεͰڞ௨Խ͢Δ ϞδϡʔϧΛ෼͚͍ͯ͘ͱɼԿ౓΋ಉ͡هड़Λ܁Γฦ͢͜ͱ͕͋Δ - minSdkVersion - sourceSets 106
  102. ©2020 Wantedly, Inc. 3. A strategy of Gradle in multi-module

    app / ϚϧνϞδϡʔϧͱGradleઓུ 3. ֤moduleͷbuild.gradleΛηϚϯςΟΫεͰڞ௨Խ͢Δ ϞδϡʔϧΛ෼͚͍ͯ͘ͱɼԿ౓΋ಉ͡هड़Λ܁Γฦ͢͜ͱ͕͋Δ - minSdkVersion - sourceSets Gradle task ΍ pluginͱͯ͠੾Γग़͢ͱɼ࢖͍·ΘͤΔɽ 107
  103. ©2020 Wantedly, Inc. 4. Modularization as refactoring / ϦϑΝΫλϦϯάͱͯ͠ͷϚϧνϞδϡʔϧԽ •

    བྷΈ߹ͬͨෳࡶͳؔ܎Λղ͖΄͙ͨ͢ΊʹͰ͖Δ͜ͱ 5. Modularization and Android Jetpack / JetpackͱϚϧνϞδϡʔϧ • NavigationͷಋೖͱޮՌ • ࣄྫ঺հ 6. A continuous process of modularization with feature development
 / ܧଓతʹػೳ։ൃΛߦ͍ͳ͕ΒਐΊΔͨΊʹ • ҰาҰาਐΊΔϞδϡʔϧԽ
 Outline ( 2 / 2 ) 108
  104. ©2020 Wantedly, Inc. 4. Modularization as refactoring / ϦϑΝΫλϦϯάͱͯ͠ͷϚϧνϞδϡʔϧԽ •

    བྷΈ߹ͬͨෳࡶͳؔ܎Λղ͖΄͙ͨ͢ΊʹͰ͖Δ͜ͱ 5. Modularization and Android Jetpack / JetpackͱϚϧνϞδϡʔϧ • NavigationͷಋೖͱޮՌ • ࣄྫ঺հ 6. A continuous process of modularization with feature development
 / ܧଓతʹػೳ։ൃΛߦ͍ͳ͕ΒਐΊΔͨΊʹ • ҰาҰาਐΊΔϞδϡʔϧԽ
 Outline ( 2 / 2 ) 109
  105. ©2020 Wantedly, Inc. 4. Modularization as refactoring / ϦϑΝΫλͱͯ͠ͷϚϧνϞδϡʔϧԽ 1.

    core΍utilͷΑ͏ͳ΋ͷΛҾͬுΓग़͢ͱ͖ͷϦϑΝΫλϦϯά 2. ը໘ؒભҠͷͨΊͷϦϑΝΫλϦϯά 110
  106. ©2020 Wantedly, Inc. :app :legacy :legacy2 :legacy3 core΍utilͷΑ͏ͳ΋ͷΛҾͬுΓग़ͦ͏ͱࢼΈͨɽ ʹͳͬͯ͠·ͬͨɽ 1.

    core΍utilͷΑ͏ͳ΋ͷΛҾͬுΓग़͢ͱ͖ͷϦϑΝΫλϦϯά 4. Modularization as refactoring / ϦϑΝΫλͱͯ͠ͷϚϧνϞδϡʔϧԽ 114
  107. ©2020 Wantedly, Inc. :app :legacy :legacy2 :legacy3 core΍utilͷΑ͏ͳ΋ͷΛҾͬுΓग़ͦ͏ͱࢼΈͨɽ ͳͥʁ ʹͳͬͯ͠·ͬͨɽ

    1. core΍utilͷΑ͏ͳ΋ͷΛҾͬுΓग़͢ͱ͖ͷϦϑΝΫλϦϯά 4. Modularization as refactoring / ϦϑΝΫλͱͯ͠ͷϚϧνϞδϡʔϧԽ 115
  108. ©2020 Wantedly, Inc. :app :legacy :legacy2 :legacy3 core΍utilͷΑ͏ͳ΋ͷΛҾͬுΓग़ͦ͏ͱࢼΈͨɽ ͳͥʁ ʹͳͬͯ͠·ͬͨɽ

    ͳͥʁ طଘίʔυΛ
 ͦͷ··Ҡ২͠Α͏ͱ͔ͨ͠Βɽ 1. core΍utilͷΑ͏ͳ΋ͷΛҾͬுΓग़͢ͱ͖ͷϦϑΝΫλϦϯά 4. Modularization as refactoring / ϦϑΝΫλͱͯ͠ͷϚϧνϞδϡʔϧԽ 116
  109. ©2020 Wantedly, Inc. $MBTT# $MBTT% $MBTT& $MBTT* $MBTT' $MBTT$ $MBTT"

    $MBTT+ $MBTT) $MBTT( 1. core΍utilͷΑ͏ͳ΋ͷΛҾͬுΓग़͢ͱ͖ͷϦϑΝΫλϦϯά 4. Modularization as refactoring / ϦϑΝΫλͱͯ͠ͷϚϧνϞδϡʔϧԽ 117
  110. ©2020 Wantedly, Inc. $MBTT# $MBTT% $MBTT& $MBTT* $MBTT' $MBTT$ $MBTT"

    $MBTT+ $MBTT) $MBTT( coreͬΆ͍෦෼Λ ੾Γग़ͦ͏ʂ 1. core΍utilͷΑ͏ͳ΋ͷΛҾͬுΓग़͢ͱ͖ͷϦϑΝΫλϦϯά 4. Modularization as refactoring / ϦϑΝΫλͱͯ͠ͷϚϧνϞδϡʔϧԽ 118
  111. ©2020 Wantedly, Inc. $MBTT# $MBTT% $MBTT& $MBTT* $MBTT' $MBTT$ $MBTT"

    $MBTT+ $MBTT) $MBTT( coreͬΆ͍෦෼Λ ੾Γग़ͦ͏ʂ 1. core΍utilͷΑ͏ͳ΋ͷΛҾͬுΓग़͢ͱ͖ͷϦϑΝΫλϦϯά 4. Modularization as refactoring / ϦϑΝΫλͱͯ͠ͷϚϧνϞδϡʔϧԽ 119
  112. ©2020 Wantedly, Inc. $MBTT# $MBTT% $MBTT& $MBTT* $MBTT' $MBTT$ $MBTT"

    $MBTT+ $MBTT) $MBTT( coreͬΆ͍෦෼Λ ੾Γग़ͦ͏ʂ 1. core΍utilͷΑ͏ͳ΋ͷΛҾͬுΓग़͢ͱ͖ͷϦϑΝΫλϦϯά 4. Modularization as refactoring / ϦϑΝΫλͱͯ͠ͷϚϧνϞδϡʔϧԽ 120
  113. ©2020 Wantedly, Inc. $MBTT# $MBTT% $MBTT& $MBTT* $MBTT' $MBTT$ $MBTT"

    $MBTT+ $MBTT) $MBTT( coreͬΆ͍෦෼Λ ੾Γग़ͦ͏ʂ 1. core΍utilͷΑ͏ͳ΋ͷΛҾͬுΓग़͢ͱ͖ͷϦϑΝΫλϦϯά 4. Modularization as refactoring / ϦϑΝΫλͱͯ͠ͷϚϧνϞδϡʔϧԽ 121
  114. ©2020 Wantedly, Inc. $MBTT# $MBTT% $MBTT& $MBTT* $MBTT' $MBTT$ $MBTT"

    $MBTT+ $MBTT) $MBTT( coreͬΆ͍෦෼Λ ੾Γग़ͦ͏ʂ Class J,H,I͚͕ͩཉ͍͠ͷʹɼ ༨ܭʹD,F,G΋੾Γग़͢Ӌ໨ʹ 1. core΍utilͷΑ͏ͳ΋ͷΛҾͬுΓग़͢ͱ͖ͷϦϑΝΫλϦϯά 4. Modularization as refactoring / ϦϑΝΫλͱͯ͠ͷϚϧνϞδϡʔϧԽ 122
  115. ©2020 Wantedly, Inc. $MBTT# $MBTT% $MBTT& $MBTT* $MBTT' $MBTT$ $MBTT"

    $MBTT+ $MBTT) $MBTT( coreͬΆ͍෦෼Λ ੾Γग़ͦ͏ʂ Class J,H,I͚͕ͩཉ͍͠ͷʹɼ ༨ܭʹD,F,G΋੾Γग़͢Ӌ໨ʹ ҶͮΔࣜʹ૿৩ 1. core΍utilͷΑ͏ͳ΋ͷΛҾͬுΓग़͢ͱ͖ͷϦϑΝΫλϦϯά 4. Modularization as refactoring / ϦϑΝΫλͱͯ͠ͷϚϧνϞδϡʔϧԽ 123
  116. ©2020 Wantedly, Inc. 1. ໌֬ͳarchitectureΛࡦఆ͢Δ 2. DIPΛۦ࢖͢Δ ྫ͑͹MVVMͷΑ͏ͳΞʔΩςΫνϟΛఆΊɼͦΕʹԊ࣮ͬͯ૷ ݺͼग़͠ͷํ޲Λ੍ݶ͢Δ͜ͱͰɼ Ϟδϡʔϧ෼཭Λଅਐͤ͞Δɽ

    ΋ͱͷ࣮૷ʹΑͬͯ͸վमίετ૿ ղܾࡦ͸2ͭ 1. core΍utilͷΑ͏ͳ΋ͷΛҾͬுΓग़͢ͱ͖ͷϦϑΝΫλϦϯά 4. Modularization as refactoring / ϦϑΝΫλͱͯ͠ͷϚϧνϞδϡʔϧԽ 125
  117. ©2020 Wantedly, Inc. 1. ໌֬ͳarchitectureΛࡦఆ͢Δ 2. DIPΛۦ࢖͢Δ DIP(Dependency Inversion Principle,

    ґଘੑٯసͷ๏ଇ)͸
 ந৅ʹґଘͤ͞Δ͜ͱͰɼґଘํ޲Λٯʹ͢Δɽ ۩৅ͷ஫ೖ͸DIίϯςφΛ༻͍Δ͜ͱ͕AndroidͰ͸ଟ͍(ҹ৅)ɽ ղܾࡦ͸2ͭ 1. core΍utilͷΑ͏ͳ΋ͷΛҾͬுΓग़͢ͱ͖ͷϦϑΝΫλϦϯά 4. Modularization as refactoring / ϦϑΝΫλͱͯ͠ͷϚϧνϞδϡʔϧԽ 127
  118. ©2020 Wantedly, Inc. $MBTT# $MBTT% $MBTT& $MBTT* $MBTT' $MBTT$ $MBTT"

    $MBTT+ $MBTT) $MBTT( coreͬΆ͍෦෼Λ ੾Γग़ͦ͏ʂ 1. core΍utilͷΑ͏ͳ΋ͷΛҾͬுΓग़͢ͱ͖ͷϦϑΝΫλϦϯά 4. Modularization as refactoring / ϦϑΝΫλͱͯ͠ͷϚϧνϞδϡʔϧԽ 128
  119. ©2020 Wantedly, Inc. $MBTT# $MBTT% $MBTT& $MBTT* $MBTT' $MBTT$ $MBTT"

    $MBTT+ $MBTT) $MBTT( coreͬΆ͍෦෼Λ ੾Γग़ͦ͏ʂ * * * … Interface 1. core΍utilͷΑ͏ͳ΋ͷΛҾͬுΓग़͢ͱ͖ͷϦϑΝΫλϦϯά 4. Modularization as refactoring / ϦϑΝΫλͱͯ͠ͷϚϧνϞδϡʔϧԽ 129
  120. ©2020 Wantedly, Inc. $MBTT# $MBTT% $MBTT& $MBTT* $MBTT' $MBTT$ $MBTT"

    $MBTT+ $MBTT) $MBTT( coreͬΆ͍෦෼Λ ੾Γग़ͦ͏ʂ * * * … Interface 1. core΍utilͷΑ͏ͳ΋ͷΛҾͬுΓग़͢ͱ͖ͷϦϑΝΫλϦϯά 4. Modularization as refactoring / ϦϑΝΫλͱͯ͠ͷϚϧνϞδϡʔϧԽ 130
  121. ©2020 Wantedly, Inc. $MBTT# $MBTT% $MBTT& $MBTT* $MBTT' $MBTT$ $MBTT"

    $MBTT+ $MBTT) $MBTT( coreͬΆ͍෦෼Λ ੾Γग़ͦ͏ʂ * * ֎ͷmodule΁ͷґଘ͕ ͳ͘ͳΓ੾Γग़͠Մೳʹʂ * … Interface 1. core΍utilͷΑ͏ͳ΋ͷΛҾͬுΓग़͢ͱ͖ͷϦϑΝΫλϦϯά 4. Modularization as refactoring / ϦϑΝΫλͱͯ͠ͷϚϧνϞδϡʔϧԽ 131
  122. ©2020 Wantedly, Inc. 2. ը໘ؒભҠͷͨΊͷϦϑΝΫλϦϯά 'SBHNFOU # 'SBHNFOU % 'SBHNFOU

    & 'SBHNFOU $ 'SBHNFOU " 4. Modularization as refactoring / ϦϑΝΫλͱͯ͠ͷϚϧνϞδϡʔϧԽ 133
  123. ©2020 Wantedly, Inc. 2. ը໘ؒભҠͷͨΊͷϦϑΝΫλϦϯά 'SBHNFOU # 'SBHNFOU % 'SBHNFOU

    & 'SBHNFOU $ 'SBHNFOU " 4. Modularization as refactoring / ϦϑΝΫλͱͯ͠ͷϚϧνϞδϡʔϧԽ 134
  124. ©2020 Wantedly, Inc. 2. ը໘ؒભҠͷͨΊͷϦϑΝΫλϦϯά 'SBHNFOU # 'SBHNFOU % 'SBHNFOU

    & 'SBHNFOU $ 'SBHNFOU " DeepLink DeepLink 4. Modularization as refactoring / ϦϑΝΫλͱͯ͠ͷϚϧνϞδϡʔϧԽ 135
  125. ©2020 Wantedly, Inc. 2. ը໘ؒભҠͷͨΊͷϦϑΝΫλϦϯά 'SBHNFOU # 'SBHNFOU % 'SBHNFOU

    & 'SBHNFOU $ 'SBHNFOU " Feature X Feature Y DeepLink DeepLink 4. Modularization as refactoring / ϦϑΝΫλͱͯ͠ͷϚϧνϞδϡʔϧԽ 136
  126. ©2020 Wantedly, Inc. 2. ը໘ؒભҠͷͨΊͷϦϑΝΫλϦϯά 'SBHNFOU # 'SBHNFOU % 'SBHNFOU

    & 'SBHNFOU $ 'SBHNFOU " Feature X Feature Y ಛผͳinterfaceΛ༻ҙ͢Δ͜ͱͳ͘ભҠΛߦ͍ͬͯΔͱɼ Ϟδϡʔϧ෼ׂΛߦ͓͏ͱ͢Δͱ͖ʹোนͱͳΔɽ DeepLink DeepLink 4. Modularization as refactoring / ϦϑΝΫλͱͯ͠ͷϚϧνϞδϡʔϧԽ 137
  127. ©2020 Wantedly, Inc. 2. ը໘ؒભҠͷͨΊͷϦϑΝΫλϦϯά 'SBHNFOU # 'SBHNFOU % 'SBHNFOU

    & 'SBHNFOU $ 'SBHNFOU " Feature X Feature Y ಛผͳinterfaceΛ༻ҙ͢Δ͜ͱͳ͘ભҠΛߦ͍ͬͯΔͱɼ Ϟδϡʔϧ෼ׂΛߦ͓͏ͱ͢Δͱ͖ʹোนͱͳΔɽ DeepLink DeepLink → Routing༻ͷmoduleΛ௥Ճ͢Δͱྑ͍ 4. Modularization as refactoring / ϦϑΝΫλͱͯ͠ͷϚϧνϞδϡʔϧԽ 138
  128. ©2020 Wantedly, Inc. 2. ը໘ؒભҠͷͨΊͷϦϑΝΫλϦϯά 'SBHNFOU # 'SBHNFOU % 'SBHNFOU

    & 'SBHNFOU $ 'SBHNFOU " Feature X Feature Y 3PVUJOH *OUFSGBDF *OUFSGBDF 4. Modularization as refactoring / ϦϑΝΫλͱͯ͠ͷϚϧνϞδϡʔϧԽ 139
  129. ©2020 Wantedly, Inc. 2. ը໘ؒભҠͷͨΊͷϦϑΝΫλϦϯά 'SBHNFOU # 'SBHNFOU % 'SBHNFOU

    & 'SBHNFOU $ 'SBHNFOU " Feature X Feature Y 3PVUJOH *OUFSGBDF *OUFSGBDF ΋͠΋ಠࣗͷભҠϩδοΫ͕͋ͬͯ΋ɼ Navigation Component౳ʹ৐Γ׵͑ΒΕΔɽ 4. Modularization as refactoring / ϦϑΝΫλͱͯ͠ͷϚϧνϞδϡʔϧԽ 140
  130. ©2020 Wantedly, Inc. 2. ը໘ؒભҠͷͨΊͷϦϑΝΫλϦϯά 'SBHNFOU # 'SBHNFOU % 'SBHNFOU

    & 'SBHNFOU $ 'SBHNFOU " Feature X Feature Y 3PVUJOH *OUFSGBDF *OUFSGBDF ΋͠΋ಠࣗͷભҠϩδοΫ͕͋ͬͯ΋ɼ Navigation Component౳ʹ৐Γ׵͑ΒΕΔɽ ͜͜Ͱ΋DIPΛ׆༻͍ͯ͠Δʂ 4. Modularization as refactoring / ϦϑΝΫλͱͯ͠ͷϚϧνϞδϡʔϧԽ 141
  131. ©2020 Wantedly, Inc. 4. Modularization as refactoring / ϦϑΝΫλϦϯάͱͯ͠ͷϚϧνϞδϡʔϧԽ •

    བྷΈ߹ͬͨෳࡶͳؔ܎Λղ͖΄͙ͨ͢ΊʹͰ͖Δ͜ͱ 5. Modularization and Android Jetpack / JetpackͱϚϧνϞδϡʔϧ • NavigationͷಋೖͱޮՌ • ࣄྫ঺հ 6. A continuous process of modularization with feature development
 / ܧଓతʹػೳ։ൃΛߦ͍ͳ͕ΒਐΊΔͨΊʹ • ҰาҰาਐΊΔϞδϡʔϧԽ
 Outline ( 2 / 2 ) 142
  132. ©2020 Wantedly, Inc. 4. Modularization as refactoring / ϦϑΝΫλϦϯάͱͯ͠ͷϚϧνϞδϡʔϧԽ •

    བྷΈ߹ͬͨෳࡶͳؔ܎Λղ͖΄͙ͨ͢ΊʹͰ͖Δ͜ͱ 5. Modularization and Android Jetpack / JetpackͱϚϧνϞδϡʔϧ • NavigationͷಋೖͱޮՌ • ࣄྫ঺հ 6. A continuous process of modularization with feature development
 / ܧଓతʹػೳ։ൃΛߦ͍ͳ͕ΒਐΊΔͨΊʹ • ҰาҰาਐΊΔϞδϡʔϧԽ
 Outline ( 2 / 2 ) 143
  133. ©2020 Wantedly, Inc. 5. Modularization and Android Jetpack / Android

    JetpackͱϚϧνϞδϡʔϧ ϚϧνϞδϡʔϧͱ૬ੑ͕ྑ͍ͱߟ͑Δͷ͸ Navigation Component 144
  134. ©2020 Wantedly, Inc. Nested NavGraphͱ͸ʁ NavGraphͷதʹNavGraph͕͋Δߏ଄ @id/navigatoin_graph @id/navigatoin_home @id/navigatoin_register @id/navigatoin_me

    Ϟδϡʔϧͷߏ੒ͱ/BW(SBQIΛ
 ରԠͤ͞Δࣄ͕Ͱ͖Δʂ 156 5. Modularization and Android Jetpack / Android JetpackͱϚϧνϞδϡʔϧ
  135. ©2020 Wantedly, Inc. @id/navigatoin_graph @id/navigatoin_home @id/navigatoin_register @id/navigatoin_me :app :feature A

    :feature B :feature C :feature D 157 5. Modularization and Android Jetpack / Android JetpackͱϚϧνϞδϡʔϧ
  136. ©2020 Wantedly, Inc. @id/navigatoin_graph @id/navigatoin_home @id/navigatoin_register @id/navigatoin_me :app :feature A

    :feature B :feature C :feature D ରԠ 158 5. Modularization and Android Jetpack / Android JetpackͱϚϧνϞδϡʔϧ
  137. ©2020 Wantedly, Inc. @id/navigatoin_graph @id/navigatoin_home @id/navigatoin_register @id/navigatoin_me :app :feature A

    :feature B :feature C :feature D ରԠ ରԠ 159 5. Modularization and Android Jetpack / Android JetpackͱϚϧνϞδϡʔϧ
  138. ©2020 Wantedly, Inc. @id/navigatoin_graph @id/navigatoin_home @id/navigatoin_register @id/navigatoin_me :app :feature A

    :feature B :feature C :feature D ରԠ ରԠ ରԠ 160 5. Modularization and Android Jetpack / Android JetpackͱϚϧνϞδϡʔϧ
  139. ©2020 Wantedly, Inc. @id/navigatoin_graph @id/navigatoin_home @id/navigatoin_register @id/navigatoin_me :app :feature A

    :feature B :feature C :feature D ରԠ ରԠ ରԠ ɾ ɾ ɾ 161 5. Modularization and Android Jetpack / Android JetpackͱϚϧνϞδϡʔϧ
  140. ©2020 Wantedly, Inc. @id/navigatoin_graph @id/navigatoin_home @id/navigatoin_register @id/navigatoin_me :app :feature A

    :feature B :feature C :feature D ରԠ ରԠ ରԠ ɾ ɾ ɾ /BW(SBQIΛ௨ͯ͠ɼ
 GFBUVSFϞδϡʔϧͷؔ܎͕͸͖ͬΓͱ͢Δʂ 162 5. Modularization and Android Jetpack / Android JetpackͱϚϧνϞδϡʔϧ
  141. ©2020 Wantedly, Inc. 4. Modularization as refactoring / ϦϑΝΫλϦϯάͱͯ͠ͷϚϧνϞδϡʔϧԽ •

    བྷΈ߹ͬͨෳࡶͳؔ܎Λղ͖΄͙ͨ͢ΊʹͰ͖Δ͜ͱ 5. Modularization and Android Jetpack / JetpackͱϚϧνϞδϡʔϧ • NavigationͷಋೖͱޮՌ • ࣄྫ঺հ 6. A continuous process of modularization with feature development
 / ܧଓతʹػೳ։ൃΛߦ͍ͳ͕ΒਐΊΔͨΊʹ • ҰาҰาਐΊΔϞδϡʔϧԽ
 Outline ( 2 / 2 ) 163
  142. ©2020 Wantedly, Inc. 4. Modularization as refactoring / ϦϑΝΫλϦϯάͱͯ͠ͷϚϧνϞδϡʔϧԽ •

    བྷΈ߹ͬͨෳࡶͳؔ܎Λղ͖΄͙ͨ͢ΊʹͰ͖Δ͜ͱ 5. Modularization and Android Jetpack / JetpackͱϚϧνϞδϡʔϧ • NavigationͷಋೖͱޮՌ • ࣄྫ঺հ 6. A continuous process of modularization with feature development
 / ܧଓతʹػೳ։ൃΛߦ͍ͳ͕ΒਐΊΔͨΊʹ • ҰาҰาਐΊΔϞδϡʔϧԽ
 Outline ( 2 / 2 ) 164
  143. ©2020 Wantedly, Inc. 6. A continuous process of modularization with

    feature development ܧଓతʹػೳ։ൃΛߦ͍ͳ͕ΒਐΊΔͨΊʹ
  144. ©2020 Wantedly, Inc. 6. A continuous process of modularization with

    feature development / 
 ܧଓతʹػೳ։ൃΛਐΊͳ͕Βߦ͏ͨΊʹ ͦ͏͸͍ͬͯ΋ɼػೳ։ൃ΋ฒߦͯ͠ଓ͚Δඞཁ͕͋Δɽ ϚϧνϞδϡʔϧԽ͚ͩʹઐ೦Ͱ͖ΔΘ͚Ͱ͸ͳ͍…. 165
  145. ©2020 Wantedly, Inc. ͳΜͷͨΊʹ :legacy moduleΛ࡞ͬͨͷ͔ʁ 6. A continuous process

    of modularization with feature development / 
 ܧଓతʹػೳ։ൃΛਐΊͳ͕Βߦ͏ͨΊʹ 166
  146. ©2020 Wantedly, Inc. :legacyʹػೳΛ௥Ճ͢Δͷ͸΄ͱΜͲ
 ͜Ε·ͰͱมΘΒͳ͍։ൃମݧͰ͋Δɽ 6. A continuous process of

    modularization with feature development / 
 ܧଓతʹػೳ։ൃΛਐΊͳ͕Βߦ͏ͨΊʹ 167
  147. ©2020 Wantedly, Inc. 1. What is a multi-module app? /

    ϚϧνϞδϡʔϧԽͱ͸ʁ 2. The first step is :app to :legacy / ͸͡ΊͷҰา͸:app͔Β:legacy΁ 3. A strategy of Gradle in multi-module app / ϚϧνϞδϡʔϧͱGradleઓུ 4. Modularization as refactoring / ϦϑΝΫλϦϯάͱͯ͠ͷϚϧνϞδϡʔϧԽ 5. Modularization and Android Jetpack / JetpackͱϚϧνϞδϡʔϧ 6. A continuous process of modularization with feature development
 / ܧଓతʹػೳ։ൃΛߦ͍ͳ͕ΒਐΊΔͨΊʹ 
 6. A continuous process of modularization with feature development / 
 ܧଓతʹػೳ։ൃΛਐΊͳ͕Βߦ͏ͨΊʹ 168
  148. ©2020 Wantedly, Inc. 1. What is a multi-module app? /

    ϚϧνϞδϡʔϧԽͱ͸ʁ 2. The first step is :app to :legacy / ͸͡ΊͷҰา͸:app͔Β:legacy΁ 3. A strategy of Gradle in multi-module app / ϚϧνϞδϡʔϧͱGradleઓུ 4. Modularization as refactoring / ϦϑΝΫλϦϯάͱͯ͠ͷϚϧνϞδϡʔϧԽ 5. Modularization and Android Jetpack / JetpackͱϚϧνϞδϡʔϧ 6. A continuous process of modularization with feature development
 / ܧଓతʹػೳ։ൃΛߦ͍ͳ͕ΒਐΊΔͨΊʹ 
 6. A continuous process of modularization with feature development / 
 ܧଓతʹػೳ։ൃΛਐΊͳ͕Βߦ͏ͨΊʹ 169
  149. ©2020 Wantedly, Inc. 1. What is a multi-module app? /

    ϚϧνϞδϡʔϧԽͱ͸ʁ 2. The first step is :app to :legacy / ͸͡ΊͷҰา͸:app͔Β:legacy΁ 3. A strategy of Gradle in multi-module app / ϚϧνϞδϡʔϧͱGradleઓུ 4. Modularization as refactoring / ϦϑΝΫλϦϯάͱͯ͠ͷϚϧνϞδϡʔϧԽ 5. Modularization and Android Jetpack / JetpackͱϚϧνϞδϡʔϧ 6. A continuous process of modularization with feature development
 / ܧଓతʹػೳ։ൃΛߦ͍ͳ͕ΒਐΊΔͨΊʹ 
 ͜ͷ4UFQ͑͞৐Γ੾Ε͹ɼ
 جຊతʹ͸ฒߦ։ൃ͕Մೳʂ 6. A continuous process of modularization with feature development / 
 ܧଓతʹػೳ։ൃΛਐΊͳ͕Βߦ͏ͨΊʹ 170
  150. ©2020 Wantedly, Inc. 6. A continuous process of modularization with

    feature development / 
 ܧଓతʹػೳ։ൃΛਐΊͳ͕Βߦ͏ͨΊʹ 171 1. What is a multi-module app? / ϚϧνϞδϡʔϧԽͱ͸ʁ 2. The first step is :app to :legacy / ͸͡ΊͷҰา͸:app͔Β:legacy΁ 3. A strategy of Gradle in multi-module app / ϚϧνϞδϡʔϧͱGradleઓུ 4. Modularization as refactoring / ϦϑΝΫλϦϯάͱͯ͠ͷϚϧνϞδϡʔϧԽ 5. Modularization and Android Jetpack / JetpackͱϚϧνϞδϡʔϧ 6. A continuous process of modularization with feature development
 / ܧଓతʹػೳ։ൃΛߦ͍ͳ͕ΒਐΊΔͨΊʹ 

  151. ©2020 Wantedly, Inc. 1. What is a multi-module app? /

    ϚϧνϞδϡʔϧԽͱ͸ʁ 2. The first step is :app to :legacy / ͸͡ΊͷҰา͸:app͔Β:legacy΁ 3. A strategy of Gradle in multi-module app / ϚϧνϞδϡʔϧͱGradleઓུ 4. Modularization as refactoring / ϦϑΝΫλϦϯάͱͯ͠ͷϚϧνϞδϡʔϧԽ 5. Modularization and Android Jetpack / JetpackͱϚϧνϞδϡʔϧ 6. A continuous process of modularization with feature development
 / ܧଓతʹػೳ։ൃΛߦ͍ͳ͕ΒਐΊΔͨΊʹ 
 6. A continuous process of modularization with feature development / 
 ܧଓతʹػೳ։ൃΛਐΊͳ͕Βߦ͏ͨΊʹ 172
  152. ©2020 Wantedly, Inc. 1. What is a multi-module app? /

    ϚϧνϞδϡʔϧԽͱ͸ʁ 2. The first step is :app to :legacy / ͸͡ΊͷҰา͸:app͔Β:legacy΁ 3. A strategy of Gradle in multi-module app / ϚϧνϞδϡʔϧͱGradleઓུ 4. Modularization as refactoring / ϦϑΝΫλϦϯάͱͯ͠ͷϚϧνϞδϡʔϧԽ 5. Modularization and Android Jetpack / JetpackͱϚϧνϞδϡʔϧ 6. A continuous process of modularization with feature development
 / ܧଓతʹػೳ։ൃΛߦ͍ͳ͕ΒਐΊΔͨΊʹ 
 ͜Ε͸ஈ֊తʹϞδϡʔϧΛ෼ׂ͍ͯ͘͠ ख๏ͷྫɽ 6. A continuous process of modularization with feature development / 
 ܧଓతʹػೳ։ൃΛਐΊͳ͕Βߦ͏ͨΊʹ 173
  153. ©2020 Wantedly, Inc. 1. What is a multi-module app? /

    ϚϧνϞδϡʔϧԽͱ͸ʁ 2. The first step is :app to :legacy / ͸͡ΊͷҰา͸:app͔Β:legacy΁ 3. A strategy of Gradle in multi-module app / ϚϧνϞδϡʔϧͱGradleઓུ 4. Modularization as refactoring / ϦϑΝΫλϦϯάͱͯ͠ͷϚϧνϞδϡʔϧԽ 5. Modularization and Android Jetpack / JetpackͱϚϧνϞδϡʔϧ 6. A continuous process of modularization with feature development
 / ܧଓతʹػೳ։ൃΛߦ͍ͳ͕ΒਐΊΔͨΊʹ 
 ͜Ε͸ஈ֊తʹϞδϡʔϧΛ෼ׂ͍ͯ͘͠ ख๏ͷྫɽ ͜ΕΒΛ౷߹ͨ͠ҠߦखॱྫΛࣔ͢ɽ 6. A continuous process of modularization with feature development / 
 ܧଓతʹػೳ։ൃΛਐΊͳ͕Βߦ͏ͨΊʹ 174
  154. ©2020 Wantedly, Inc. 1. :legacy -> :legacy΁ͷΞʔΩςΫνϟվม΍ϦϑΝΫλϦϯά 2. ੾Γग़͞ΕΔ૝ఆͰ࣮૷ΛਐΊΔ 3.

    ԼͷϨΠϠʔͱͳΔϞδϡʔϧ͔ΒҠߦ 5. ը໘ؒͷભҠγεςϜ͕׬੒͔ͯ͠ΒfeatureΛ෼ׂ 4. :legacy΁ͷdependencyΛ࣋ͨͳ͍Α͏ʹ࣮૷ 6. A continuous process of modularization with feature development / 
 ܧଓతʹػೳ։ൃΛਐΊͳ͕Βߦ͏ͨΊʹ 175
  155. ©2020 Wantedly, Inc. 1. :legacy -> :legacy΁ͷΞʔΩςΫνϟվม΍ϦϑΝΫλϦϯά 2. ੾Γग़͞ΕΔ૝ఆͰ࣮૷ΛਐΊΔ 3.

    ԼͷϨΠϠʔͱͳΔϞδϡʔϧ͔ΒҠߦ 5. ը໘ؒͷભҠγεςϜ͕׬੒͔ͯ͠ΒfeatureΛ෼ׂ 4. :legacy΁ͷdependencyΛ࣋ͨͳ͍Α͏ʹ࣮૷ 6. A continuous process of modularization with feature development / 
 ܧଓతʹػೳ։ൃΛਐΊͳ͕Βߦ͏ͨΊʹ 176
  156. ©2020 Wantedly, Inc. 1. :legacy -> :legacy΁ͷΞʔΩςΫνϟվม΍ϦϑΝΫλϦϯά 4. Modularization as

    refactoring / ϦϑΝΫλͱͯ͠ͷϚϧνϞδϡʔϧԽ ΛਐΊΔ 1. ໌֬ͳarchitectureΛࡦఆ͢Δ 2. DIPΛۦ࢖͢Δ 6. A continuous process of modularization with feature development / 
 ܧଓతʹػೳ։ൃΛਐΊͳ͕Βߦ͏ͨΊʹ 177
  157. ©2020 Wantedly, Inc. 1. :legacy -> :legacy΁ͷΞʔΩςΫνϟվม΍ϦϑΝΫλϦϯά 1. ໌֬ͳarchitectureΛࡦఆ͢Δ 2.

    DIPΛۦ࢖͢Δ ͜͜Ͱɼ৽ͨͳarchitectureʹଇͬͨ৔߹͸ PackageΛ෼͚Δͱྑ͍ɽ ΛਐΊΔ 6. A continuous process of modularization with feature development / 
 ܧଓతʹػೳ։ൃΛਐΊͳ͕Βߦ͏ͨΊʹ 178 4. Modularization as refactoring / ϦϑΝΫλͱͯ͠ͷϚϧνϞδϡʔϧԽ
  158. ©2020 Wantedly, Inc. 1. :legacy -> :legacy΁ͷΞʔΩςΫνϟվม΍ϦϑΝΫλϦϯά 3. ԼͷϨΠϠʔͱͳΔϞδϡʔϧ͔ΒҠߦ 5.

    ը໘ؒͷભҠγεςϜ͕׬੒͔ͯ͠ΒfeatureΛ෼ׂ 4. :legacy΁ͷdependencyΛ࣋ͨͳ͍Α͏ʹ࣮૷ 2. ੾Γग़͞ΕΔ૝ఆͰ࣮૷ΛਐΊΔ 6. A continuous process of modularization with feature development / 
 ܧଓతʹػೳ։ൃΛਐΊͳ͕Βߦ͏ͨΊʹ 179
  159. ©2020 Wantedly, Inc. 2. ੾Γग़͞ΕΔ૝ఆͰ࣮૷ΛਐΊΔ - internalम০ࢠΛ͚ͭΔ͜ͱͰείʔϓͷՄࢹൣғΛ੍ݶ͢Δɽ - ಉ͡Ϟδϡʔϧʹ੾Γग़͍ͨ͠΋ͷಉ࢜͸ಉ͡package໊Ͱ੾Γग़͢ɽ -

    :legacyʹ௥Ճͤͣʹ࣮ݱͰ͖ͦ͏ͳΒੵۃతʹϞδϡʔϧΛ࡞ͬͯΈΔɽ ػցతʹ஄͘ͷ͕ͳ͔ͳ͔೉͍͠ͷͰPRͷϨϏϡʔͳͲͰҙࣝ͢Δɽ νʔϜͱͯ͠ϞδϡʔϧԽʹऔΓ૊ΜͰ͍Δ͜ͱΛҙࣝ͢Δʂ 6. A continuous process of modularization with feature development / 
 ܧଓతʹػೳ։ൃΛਐΊͳ͕Βߦ͏ͨΊʹ 180
  160. ©2020 Wantedly, Inc. 1. :legacy -> :legacy΁ͷΞʔΩςΫνϟվม΍ϦϑΝΫλϦϯά 5. ը໘ؒͷભҠγεςϜ͕׬੒͔ͯ͠ΒfeatureΛ෼ׂ 4.

    :legacy΁ͷdependencyΛ࣋ͨͳ͍Α͏ʹ࣮૷ 2. ੾Γग़͞ΕΔ૝ఆͰ࣮૷ΛਐΊΔ 3. ԼͷϨΠϠʔͱͳΔϞδϡʔϧ͔ΒҠߦ 6. A continuous process of modularization with feature development / 
 ܧଓతʹػೳ։ൃΛਐΊͳ͕Βߦ͏ͨΊʹ 181
  161. ©2020 Wantedly, Inc. 3. ԼͷϨΠϠʔͱͳΔϞδϡʔϧ͔ΒҠߦ 6. A continuous process of

    modularization with feature development / 
 ܧଓతʹػೳ։ൃΛਐΊͳ͕Βߦ͏ͨΊʹ 182
  162. ©2020 Wantedly, Inc. :app :feature A :feature B :feature C

    :feature D :library X :library Y :library Z :core :constants :hoge :piyo 3. ԼͷϨΠϠʔͱͳΔϞδϡʔϧ͔ΒҠߦ :app :legacy 6. A continuous process of modularization with feature development / 
 ܧଓతʹػೳ։ൃΛਐΊͳ͕Βߦ͏ͨΊʹ 183
  163. ©2020 Wantedly, Inc. :app :feature A :feature B :feature C

    :feature D :library X :library Y :library Z :core :constants :hoge :piyo :app :legacy 3. ԼͷϨΠϠʔͱͳΔϞδϡʔϧ͔ΒҠߦ 6. A continuous process of modularization with feature development / 
 ܧଓతʹػೳ։ൃΛਐΊͳ͕Βߦ͏ͨΊʹ 184
  164. ©2020 Wantedly, Inc. :app :feature A :feature B :feature C

    :feature D :library X :library Y :library Z :core :constants :hoge :piyo :app :legacy 3. ԼͷϨΠϠʔͱͳΔϞδϡʔϧ͔ΒҠߦ ԼҐͷϨΠϠʔ͔ΒϞδϡʔϧ෼͚Λߦ͏ ͜ͱͰɼMFHBDZΛ΋ͭඞཁ͕ͳ͍ʂ 6. A continuous process of modularization with feature development / 
 ܧଓతʹػೳ։ൃΛਐΊͳ͕Βߦ͏ͨΊʹ 185
  165. ©2020 Wantedly, Inc. :app :feature A :feature B :feature C

    :feature D :library X :library Y :library Z :core :constants :hoge :piyo :app :legacy 3. ԼͷϨΠϠʔͱͳΔϞδϡʔϧ͔ΒҠߦ ԼҐͷϨΠϠʔ͔ΒϞδϡʔϧ෼͚Λߦ͏ ͜ͱͰɼMFHBDZΛ΋ͭඞཁ͕ͳ͍ʂ "OESPJE"1*Ҏ֎ͷΈͰߏ੒͞ΕΔॴ ΍DPOTU஋ͳͲҠߦ͠΍͍͢ʂ 6. A continuous process of modularization with feature development / 
 ܧଓతʹػೳ։ൃΛਐΊͳ͕Βߦ͏ͨΊʹ 186
  166. ©2020 Wantedly, Inc. 2. ੾Γग़͞ΕΔ૝ఆͰ࣮૷ΛਐΊΔ 3. ԼͷϨΠϠʔͱͳΔϞδϡʔϧ͔ΒҠߦ 5. ը໘ؒͷભҠγεςϜ͕׬੒͔ͯ͠ΒfeatureΛ෼ׂ 1.

    :legacy -> :legacy΁ͷΞʔΩςΫνϟվม΍ϦϑΝΫλϦϯά 4. :legacy΁ͷdependencyΛ࣋ͨͳ͍Α͏ʹ࣮૷ 6. A continuous process of modularization with feature development / 
 ܧଓతʹػೳ։ൃΛਐΊͳ͕Βߦ͏ͨΊʹ 187
  167. ©2020 Wantedly, Inc. 5. ը໘ؒͷભҠγεςϜ͕׬੒͔ͯ͠ΒfeatureΛ෼ׂ 6. A continuous process of

    modularization with feature development / 
 ܧଓతʹػೳ։ൃΛਐΊͳ͕Βߦ͏ͨΊʹ 189
  168. ©2020 Wantedly, Inc. 5. ը໘ؒͷભҠγεςϜ͕׬੒͔ͯ͠ΒfeatureΛ෼ׂ 5. Modularization and Android Jetpack

    / Android JetpackͱϚϧνϞδϡʔϧ ΛਐΊΔ 6. A continuous process of modularization with feature development / 
 ܧଓతʹػೳ։ൃΛਐΊͳ͕Βߦ͏ͨΊʹ 190
  169. ©2020 Wantedly, Inc. 1. :legacy -> :legacy΁ͷΞʔΩςΫνϟվม΍ϦϑΝΫλϦϯά 2. ੾Γग़͞ΕΔ૝ఆͰ࣮૷ΛਐΊΔ 3.

    ԼͷϨΠϠʔͱͳΔϞδϡʔϧ͔ΒҠߦ 5. ը໘ؒͷભҠγεςϜ͕׬੒͔ͯ͠ΒfeatureΛ෼ׂ 4. :legacy΁ͷdependencyΛ࣋ͨͳ͍Α͏ʹ࣮૷ 6. A continuous process of modularization with feature development / 
 ܧଓతʹػೳ։ൃΛਐΊͳ͕Βߦ͏ͨΊʹ 191
  170. ©2020 Wantedly, Inc. Conclusion / ·ͱΊ 1. :app → :legacyʹಈ͔͢ͷ͕େ੾ͳୈҰา

    2. ϦϑΝΫλϦϯάͱͯ͠ͷจ຺͕ͱͯ΋େ͖͍ɽ 3. νʔϜͰίϛϡχέʔγϣϯΛద੾ʹऔΓͳ͕ΒਐΊΑ͏ 192