$30 off During Our Annual Pro Sale. View Details »

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

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

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
    ܧଓతʹ

    ػೳ։ൃΛਐΊͳ͕Βߦ͏

    ϚϧνϞδϡʔϧԽ

    View Slide

  2. ©2020 Wantedly, Inc.
    A continuous process of
    modularization with
    feature development
    Feb 20, 2020 - Kazuki Chigita (@chigichan24)
    Room AppBars

    View Slide

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

    View Slide

  4. ©2020 Wantedly, Inc.
    Kazuki Chigita / @chigichan24
    Graduate student at University of Tsukuba
    #Android #Kotlin #ApplicationArchitecture
    #BeyondLegacyCode #MobileInfra #ImageProcessing
    2
    Πϯλʔϯγοϓ

    Ͱͷ੒Ռ

    View Slide

  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

    View Slide

  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

    View Slide

  7. ©2020 Wantedly, Inc.
    Outline
    5
    Section2
    Section3 Section4 Section5
    Section6
    Section 1

    View Slide

  8. ©2020 Wantedly, Inc.
    Outline
    6
    Section 1
    ϚϧνϞδϡʔϧԽͱ͸ʁ
    ؆୯ʹ֓ཁ΍ར఺ʹ͍ͭͯ৮Ε·͢ɽ
    Section2
    Section3 Section4 Section5
    Section6

    View Slide

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

    View Slide

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

    View Slide

  11. ©2020 Wantedly, Inc.
    Section4
    Outline
    9
    Section5
    ϚϧνϞδϡʔϧԽ͢ΔͨΊͷ
    ϦϑΝΫλϦϯάํ๏΍ࣄྫ
    Section2
    Section3
    Section6
    Section 1

    View Slide

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

    View Slide

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

    View Slide

  14. ©2020 Wantedly, Inc.
    Outline
    12
    Section2
    Section3 Section4 Section5
    Section6
    Section 1
    શମͷ࿩ͷྲྀΕͱͯ͜͠ͷΑ͏ͳϑϩʔΛ

    ҙࣝ͢Δͱશମͱͯ͠εοΩϦ͠·͢ɽ

    View Slide

  15. ©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

    View Slide

  16. ©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

    View Slide

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

    View Slide

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

    View Slide

  19. ©2020 Wantedly, Inc.
    :app




    1. What is a multi-module app? / ϚϧνϞδϡʔϧԽͱ͸ʁ
    16

    View Slide

  20. ©2020 Wantedly, Inc.



    :app

    1. What is a multi-module app? / ϚϧνϞδϡʔϧԽͱ͸ʁ
    17

    View Slide

  21. ©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

    View Slide

  22. ©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

    View Slide

  23. ©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

    View Slide

  24. ©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

    View Slide

  25. ©2020 Wantedly, Inc.
    Why? / ͳͥ΍Δͷ͔ʁ

    View Slide

  26. ©2020 Wantedly, Inc.
    1. ϞϊϦγοΫͳ؀ڥͰ͸Ͱ͖ͳ͍͜ͱ͕૿͍͑ͯΔ
    2. Ϗϧυ͕͔͔࣌ؒΔ
    3. ΑΓڧ੍͍໿Λ͔͚͍ͨ
    1. What is a multi-module app? / ϚϧνϞδϡʔϧԽͱ͸ʁ
    22

    View Slide

  27. ©2020 Wantedly, Inc.
    1. ϞϊϦγοΫͳ؀ڥͰ͸Ͱ͖ͳ͍͜ͱ͕૿͍͑ͯΔ
    2. Ϗϧυ͕͔͔࣌ؒΔ
    3. ΑΓڧ੍͍໿Λ͔͚͍ͨ
    1. What is a multi-module app? / ϚϧνϞδϡʔϧԽͱ͸ʁ
    23

    View Slide

  28. ©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

    View Slide

  29. ©2020 Wantedly, Inc.
    1. ϞϊϦγοΫͳ؀ڥͰ͸Ͱ͖ͳ͍͜ͱ͕૿͍͑ͯΔ
    2. Ϗϧυ͕͔͔࣌ؒΔ
    3. ΑΓڧ੍͍໿Λ͔͚͍ͨ
    1. What is a multi-module app? / ϚϧνϞδϡʔϧԽͱ͸ʁ
    25

    View Slide

  30. ©2020 Wantedly, Inc.
    2. Ϗϧυ͕͔͔࣌ؒΔ
    mainframerͷΑ͏ͳ֎෦Ϗϧυ؀ڥΛ࡞ͬͯϚγϯεϖοΫʹΑͬͯղܾ͢Δ
    → ݶք͕͋Δ
    → ମݧͱͯ͠ѱ͍ɾมͳϋϚΓํΛ͢Δ͜ͱ΋͋Δɽ
    ΄ͱΜͲมߋͷͳ͍΋ͷʹରͯ͠Ϟδϡʔϧ·Δ͝ͱϏϧυ͢Δͷ͸΋͍ͬͨͳ͍ɽ
    (ͱ͍ͬͯ΋cache͸͋Δఔ౓ޮ͍͍ͯΔ)
    ಠཱ͍ͯ͠ΔϞδϡʔϧ͸ฒྻʹϏϧυ͕Ͱ͖Δ͸ͣͳͷʹɼ

    γϯάϧΞϓϦέʔγϣϯͩͱͰ͖ͳ͍
    1. What is a multi-module app? / ϚϧνϞδϡʔϧԽͱ͸ʁ
    26

    View Slide

  31. ©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

    View Slide

  32. ©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

    View Slide

  33. ©2020 Wantedly, Inc.
    1. ϞϊϦγοΫͳ؀ڥͰ͸Ͱ͖ͳ͍͜ͱ͕૿͍͑ͯΔ
    2. Ϗϧυ͕͔͔࣌ؒΔ
    3. ΑΓڧ੍͍໿Λ͔͚͍ͨ
    1. What is a multi-module app? / ϚϧνϞδϡʔϧԽͱ͸ʁ
    29

    View Slide

  34. ©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

    View Slide

  35. ©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

    View Slide

  36. ©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

    View Slide

  37. ©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

    View Slide

  38. ©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

    View Slide

  39. ©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

    View Slide

  40. ©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

    View Slide

  41. ©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

    View Slide

  42. ©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

    View Slide

  43. ©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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    ࢓૊Έ͕࡞Γ΍͍͢ɽ(্Ґmodule͕ཉ͍͠)
    2. Ϗϧυ࣌͸ϞδϡʔϧΛෳ਺ʹ੾Γग़͠
    ͯ΋ɼඞͣ:appΛ௨ΔͷͰେ͖͍ͱ

    ߴ଎Խʹد༩͠ʹ͍͘
    43

    View Slide

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

    View Slide

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

    View Slide

  51. ©2020 Wantedly, Inc.
    ੎͍Ͱ΍ͬͨΒࣦഊͨ͠ :app to :legacy ࣄނू

    View Slide

  52. ©2020 Wantedly, Inc.
    2. The first step is :app to :legacy / ͸͡ΊͷҰา͸:app͔Β:legacy΁
    1. Android Library͔ΒpackageΛ

    ࡞ͬͯ:appͷϑΝΠϧΛcopy & paste
    ͢Δͱ൵ࢂʹͳΔɽ
    46

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    ࣦഊ͢Δɽ
    53

    View Slide

  60. ©2020 Wantedly, Inc.
    2. The first step is :app to :legacy / ͸͡ΊͷҰา͸:app͔Β:legacy΁
    Epoxyͱ͸ʁ
    RecyclerViewͷϨΠΞ΢τ૊ΈΛ
    ؆қʹ͢Δ΋ͷ Groupie ͱ͔͕ྨࣅ
    @EpoxyDataBindingLayouts ͸
    Epoxyʹରͯ͠resourceΛඥ෇͚ɼ
    BindingModelΫϥεΛ

    ࣗಈੜ੒ͤ͞ΔͨΊͷΞϊςʔγϣϯ
    54

    View Slide

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

    ࣦഊ͢Δɽ
    55

    View Slide

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

    ࣦഊ͢Δɽ
    :app͔Β:legacyʹ

    ಈ͔͚ͨͩ͠ͳͷʹɽɽɽɽ
    56

    View Slide

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

    ࣦഊ͢Δɽ
    :app͔Β:legacyʹ

    ಈ͔͚ͨͩ͠ͳͷʹɽɽɽɽ
    -JCSBSZ.PEVMFͰͷSFTPVSDFTͷ࢓૊ΈΛ

    ਖ਼͘͠ཧղ͍ͯ͠Δඞཁ͕͋Δʂ
    57

    View Slide

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

    View Slide

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

    View Slide

  66. ©2020 Wantedly, Inc.
    2. The first step is :app to :legacy / ͸͡ΊͷҰา͸:app͔Β:legacy΁
    :library moduleͷresource͸finalఆٛ͞Εͳ͍
    (ޙʹϏϧυ࣌ʹ֤ϞδϡʔϧͷresourceͷmergeΛߦ͏ͨΊ)

    Javaͷ࢓༷ͷ໰୊ͳͷͰɼϥΠϒϥϦଆ͔Β͸Ͳ͏ʹ΋Ͱ͖ͳ͍

    ίϯύΠϧΤϥʔͷൃੜ
    60

    View Slide

  67. ©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

    View Slide

  68. ©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

    View Slide

  69. ©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

    View Slide

  70. ©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

    View Slide

  71. ©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

    View Slide

  72. ©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

    View Slide

  73. ©2020 Wantedly, Inc.
    খ·ͱΊ

    View Slide

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

    ࣦഊ͢Δɽ
    1. Android Library͔ΒpackageΛ࡞ͬͯ

    :appͷϑΝΠϧΛmove͢Δͱ൵ࢂʹͳΔɽ ΞϓϦέʔγϣϯϞδϡʔϧͱ
    ϥΠϒϥϦϞδϡʔϧͷࡉ͔ͳҧ͍ʹ
    ஫ҙ͠ͳ͕ΒҠͦ͏ʂ
    67

    View Slide

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

    View Slide

  76. ©2020 Wantedly, Inc.
    2. The first step is :app to :legacy / ͸͡ΊͷҰา͸:app͔Β:legacy΁
    :app
    :app
    :legacy
    ඞཁ࠷௿ݶͷapplication
    ͜Ε·Ͱ:appͩͬͨ΋ͷ
    69

    View Slide

  77. ©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

    View Slide

  78. ©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

    View Slide

  79. ©2020 Wantedly, Inc.
    3. A strategy of Gradle in multi-module app
    ϚϧνϞδϡʔϧͱGradleઓུ

    View Slide

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

    View Slide

  81. ©2020 Wantedly, Inc.
    3. A strategy of Gradle in multi-module app / ϚϧνϞδϡʔϧͱGradleઓུ
    :app
    :legacy
    1. BuildConfigͱͷ޲͖߹͍ํ
    2. ֤moduleΛͲ͏΍ͬͯͭͳ͙͔
    3. ֤moduleͷbuild.gradleΛ

    ηϚϯςΟΫεͰڞ௨Խ͢Δ
    73

    View Slide

  82. ©2020 Wantedly, Inc.
    3. A strategy of Gradle in multi-module app / ϚϧνϞδϡʔϧͱGradleઓུ
    :app
    :legacy
    1. BuildConfigͱͷ޲͖߹͍ํ
    2. ֤moduleΛͲ͏΍ͬͯͭͳ͙͔
    3. ֤moduleͷbuild.gradleΛ

    ηϚϯςΟΫεͰڞ௨Խ͢Δ
    74

    View Slide

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

    View Slide

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

    View Slide

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

    ͞ΕΔͨΊɼڞ௨ͯ͠࢖͏ʹ͸޻෉͕ඞཁʂ
    1. BuildConfigͱͷ޲͖߹͍ํ
    77

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  89. ©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

    View Slide

  90. ©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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  94. ©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

    View Slide

  95. ©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

    View Slide

  96. ©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

    View Slide

  97. ©2020 Wantedly, Inc.
    3. A strategy of Gradle in multi-module app / ϚϧνϞδϡʔϧͱGradleઓུ
    :app
    :legacy
    1. BuildConfigͱͷ޲͖߹͍ํ
    2. ֤moduleΛͲ͏΍ͬͯͭͳ͙͔
    3. ֤moduleͷbuild.gradleΛ

    ηϚϯςΟΫεͰڞ௨Խ͢Δ
    89

    View Slide

  98. ©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

    View Slide

  99. ©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

    View Slide

  100. ©2020 Wantedly, Inc.
    3. A strategy of Gradle in multi-module app / ϚϧνϞδϡʔϧͱGradleઓུ
    2. ֤moduleΛͲ͏΍ͬͯͭͳ͙͔
    ҧ͍͸
    ϞδϡʔϧΛލ͍Ͱ ਪҠతʹ

    ݺͼग़͠Λڐ༰͢Δ͔ʁ
    92

    View Slide

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

    View Slide

  102. ©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

    View Slide

  103. ©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

    View Slide

  104. ©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

    View Slide

  105. ©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

    View Slide

  106. ©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

    View Slide

  107. ©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

    View Slide

  108. ©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

    View Slide

  109. ©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

    View Slide

  110. ©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

    View Slide

  111. ©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

    View Slide

  112. ©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

    View Slide

  113. ©2020 Wantedly, Inc.
    3. A strategy of Gradle in multi-module app / ϚϧνϞδϡʔϧͱGradleઓུ
    :app
    :legacy
    1. BuildConfigͱͷ޲͖߹͍ํ
    2. ֤moduleΛͲ͏΍ͬͯͭͳ͙͔
    3. ֤moduleͷbuild.gradleΛ

    ηϚϯςΟΫεͰڞ௨Խ͢Δ
    105

    View Slide

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

    View Slide

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

    View Slide

  116. ©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

    View Slide

  117. ©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

    View Slide

  118. ©2020 Wantedly, Inc.
    4. Modularization as refactoring
    ϦϑΝΫλϦϯάͱͯ͠ͷϚϧνϞδϡʔϧԽ

    View Slide

  119. ©2020 Wantedly, Inc.
    4. Modularization as refactoring / ϦϑΝΫλͱͯ͠ͷϚϧνϞδϡʔϧԽ
    1. core΍utilͷΑ͏ͳ΋ͷΛҾͬுΓग़͢ͱ͖ͷϦϑΝΫλϦϯά
    2. ը໘ؒભҠͷͨΊͷϦϑΝΫλϦϯά
    110

    View Slide

  120. ©2020 Wantedly, Inc.
    1. core΍utilͷΑ͏ͳ΋ͷΛҾͬுΓग़͢ͱ͖ͷϦϑΝΫλϦϯά
    2. ը໘ؒભҠͷͨΊͷϦϑΝΫλϦϯά
    4. Modularization as refactoring / ϦϑΝΫλͱͯ͠ͷϚϧνϞδϡʔϧԽ
    111

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  125. ©2020 Wantedly, Inc.
    :app
    :legacy
    :legacy2 :legacy3
    core΍utilͷΑ͏ͳ΋ͷΛҾͬுΓग़ͦ͏ͱࢼΈͨɽ
    ͳͥʁ
    ʹͳͬͯ͠·ͬͨɽ
    ͳͥʁ
    طଘίʔυΛ

    ͦͷ··Ҡ২͠Α͏ͱ͔ͨ͠Βɽ
    1. core΍utilͷΑ͏ͳ΋ͷΛҾͬுΓग़͢ͱ͖ͷϦϑΝΫλϦϯά
    4. Modularization as refactoring / ϦϑΝΫλͱͯ͠ͷϚϧνϞδϡʔϧԽ
    116

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  131. ©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

    View Slide

  132. ©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

    View Slide

  133. ©2020 Wantedly, Inc.
    ղܾࡦ͸2ͭ
    1. ໌֬ͳarchitectureΛࡦఆ͢Δ
    2. DIPΛۦ࢖͢Δ
    1. core΍utilͷΑ͏ͳ΋ͷΛҾͬுΓग़͢ͱ͖ͷϦϑΝΫλϦϯά
    4. Modularization as refactoring / ϦϑΝΫλͱͯ͠ͷϚϧνϞδϡʔϧԽ
    124

    View Slide

  134. ©2020 Wantedly, Inc.
    1. ໌֬ͳarchitectureΛࡦఆ͢Δ
    2. DIPΛۦ࢖͢Δ
    ྫ͑͹MVVMͷΑ͏ͳΞʔΩςΫνϟΛఆΊɼͦΕʹԊ࣮ͬͯ૷
    ݺͼग़͠ͷํ޲Λ੍ݶ͢Δ͜ͱͰɼ
    Ϟδϡʔϧ෼཭Λଅਐͤ͞Δɽ
    ΋ͱͷ࣮૷ʹΑͬͯ͸վमίετ૿
    ղܾࡦ͸2ͭ
    1. core΍utilͷΑ͏ͳ΋ͷΛҾͬுΓग़͢ͱ͖ͷϦϑΝΫλϦϯά
    4. Modularization as refactoring / ϦϑΝΫλͱͯ͠ͷϚϧνϞδϡʔϧԽ
    125

    View Slide

  135. ©2020 Wantedly, Inc.
    1. ໌֬ͳarchitectureΛࡦఆ͢Δ
    2. DIPΛۦ࢖͢Δ
    ղܾࡦ͸2ͭ
    1. core΍utilͷΑ͏ͳ΋ͷΛҾͬுΓग़͢ͱ͖ͷϦϑΝΫλϦϯά
    4. Modularization as refactoring / ϦϑΝΫλͱͯ͠ͷϚϧνϞδϡʔϧԽ
    126

    View Slide

  136. ©2020 Wantedly, Inc.
    1. ໌֬ͳarchitectureΛࡦఆ͢Δ
    2. DIPΛۦ࢖͢Δ
    DIP(Dependency Inversion Principle, ґଘੑٯసͷ๏ଇ)͸

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  141. ©2020 Wantedly, Inc.
    1. core΍utilͷΑ͏ͳ΋ͷΛҾͬுΓग़͢ͱ͖ͷϦϑΝΫλϦϯά
    2. ը໘ؒભҠͷͨΊͷϦϑΝΫλϦϯά
    4. Modularization as refactoring / ϦϑΝΫλͱͯ͠ͷϚϧνϞδϡʔϧԽ
    132

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  151. ©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

    View Slide

  152. ©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

    View Slide

  153. ©2020 Wantedly, Inc.
    5. Modularization and Android Jetpack
    Android JetpackͱϚϧνϞδϡʔϧ

    View Slide

  154. ©2020 Wantedly, Inc.
    5. Modularization and Android Jetpack / Android JetpackͱϚϧνϞδϡʔϧ
    ϚϧνϞδϡʔϧͱ૬ੑ͕ྑ͍ͱߟ͑Δͷ͸
    Navigation Component
    144

    View Slide

  155. ©2020 Wantedly, Inc.
    ϚϧνϞδϡʔϧͱ૬ੑ͕ྑ͍ͱߟ͑Δͷ͸
    Navigation Component
    145
    5. Modularization and Android Jetpack / Android JetpackͱϚϧνϞδϡʔϧ

    View Slide

  156. ©2020 Wantedly, Inc.
    ϚϧνϞδϡʔϧͱ૬ੑ͕ྑ͍ͱߟ͑Δͷ͸
    Navigation Component
    146
    5. Modularization and Android Jetpack / Android JetpackͱϚϧνϞδϡʔϧ

    View Slide

  157. ©2020 Wantedly, Inc.
    ϚϧνϞδϡʔϧͱ૬ੑ͕ྑ͍ͱߟ͑Δͷ͸
    Navigation Component
    ը໘ભҠΛAS্Ͱ
    άϥϑΟΧϧʹදݱͰ͖Δɽ
    147
    5. Modularization and Android Jetpack / Android JetpackͱϚϧνϞδϡʔϧ

    View Slide

  158. ©2020 Wantedly, Inc.
    ϚϧνϞδϡʔϧͱ૬ੑ͕ྑ͍ͱߟ͑Δͷ͸
    Navigation Component
    ը໘ભҠΛAS্Ͱ
    άϥϑΟΧϧʹදݱͰ͖Δɽ
    xmlͰهड़͞ΕΔ
    148
    5. Modularization and Android Jetpack / Android JetpackͱϚϧνϞδϡʔϧ

    View Slide

  159. ©2020 Wantedly, Inc.
    ϚϧνϞδϡʔϧͱ૬ੑ͕ྑ͍ͱߟ͑Δͷ͸
    Navigation Component
    ը໘ભҠΛAS্Ͱ
    άϥϑΟΧϧʹදݱͰ͖Δɽ
    xmlͰهड़͞ΕΔ
    ભҠ࣌ʹ஋Λ
    ஋Λ౉͢͜ͱ͕Ͱ͖Δ
    149
    5. Modularization and Android Jetpack / Android JetpackͱϚϧνϞδϡʔϧ

    View Slide

  160. ©2020 Wantedly, Inc.
    ϚϧνϞδϡʔϧͱ૬ੑ͕ྑ͍ͱߟ͑Δͷ͸
    Navigation Component
    ը໘ભҠΛAS্Ͱ
    άϥϑΟΧϧʹදݱͰ͖Δɽ
    xmlͰهड़͞ΕΔ
    ભҠ࣌ʹ஋Λ
    ஋Λ౉͢͜ͱ͕Ͱ͖Δ
    150
    5. Modularization and Android Jetpack / Android JetpackͱϚϧνϞδϡʔϧ

    View Slide

  161. ©2020 Wantedly, Inc.
    ϚϧνϞδϡʔϧͱ૬ੑ͕ྑ͍ͱߟ͑Δͷ͸
    Navigation Component
    ৄ͘͠͸ɽɽɽ
    ͪ͜Βͷηογϣϯ͕
    ྑͦ͞͏
    151
    5. Modularization and Android Jetpack / Android JetpackͱϚϧνϞδϡʔϧ

    View Slide

  162. ©2020 Wantedly, Inc.
    Nested NavGraphͱϚϧνϞδϡʔϧΛ͏·͘׆༻͢Δ
    152
    5. Modularization and Android Jetpack / Android JetpackͱϚϧνϞδϡʔϧ

    View Slide

  163. ©2020 Wantedly, Inc.
    Nested NavGraphͱ͸ʁ
    153
    5. Modularization and Android Jetpack / Android JetpackͱϚϧνϞδϡʔϧ

    View Slide

  164. ©2020 Wantedly, Inc.
    Nested NavGraphͱ͸ʁ
    NavGraphͷதʹNavGraph͕͋Δߏ଄
    154
    5. Modularization and Android Jetpack / Android JetpackͱϚϧνϞδϡʔϧ

    View Slide

  165. ©2020 Wantedly, Inc.
    Nested NavGraphͱ͸ʁ
    @id/navigatoin_graph
    @id/navigatoin_home
    @id/navigatoin_register
    @id/navigatoin_me
    NavGraphͷதʹNavGraph͕͋Δߏ଄
    155
    5. Modularization and Android Jetpack / Android JetpackͱϚϧνϞδϡʔϧ

    View Slide

  166. ©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ͱϚϧνϞδϡʔϧ

    View Slide

  167. ©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ͱϚϧνϞδϡʔϧ

    View Slide

  168. ©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ͱϚϧνϞδϡʔϧ

    View Slide

  169. ©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ͱϚϧνϞδϡʔϧ

    View Slide

  170. ©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ͱϚϧνϞδϡʔϧ

    View Slide

  171. ©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ͱϚϧνϞδϡʔϧ

    View Slide

  172. ©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ͱϚϧνϞδϡʔϧ

    View Slide

  173. ©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

    View Slide

  174. ©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

    View Slide

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

    View Slide

  176. ©2020 Wantedly, Inc.
    6. A continuous process of modularization with feature development / 

    ܧଓతʹػೳ։ൃΛਐΊͳ͕Βߦ͏ͨΊʹ
    ͦ͏͸͍ͬͯ΋ɼػೳ։ൃ΋ฒߦͯ͠ଓ͚Δඞཁ͕͋Δɽ
    ϚϧνϞδϡʔϧԽ͚ͩʹઐ೦Ͱ͖ΔΘ͚Ͱ͸ͳ͍….
    165

    View Slide

  177. ©2020 Wantedly, Inc.
    ͳΜͷͨΊʹ :legacy moduleΛ࡞ͬͨͷ͔ʁ
    6. A continuous process of modularization with feature development / 

    ܧଓతʹػೳ։ൃΛਐΊͳ͕Βߦ͏ͨΊʹ
    166

    View Slide

  178. ©2020 Wantedly, Inc.
    :legacyʹػೳΛ௥Ճ͢Δͷ͸΄ͱΜͲ

    ͜Ε·ͰͱมΘΒͳ͍։ൃମݧͰ͋Δɽ
    6. A continuous process of modularization with feature development / 

    ܧଓతʹػೳ։ൃΛਐΊͳ͕Βߦ͏ͨΊʹ
    167

    View Slide

  179. ©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

    View Slide

  180. ©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

    View Slide

  181. ©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

    View Slide

  182. ©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

    / ܧଓతʹػೳ։ൃΛߦ͍ͳ͕ΒਐΊΔͨΊʹ

    View Slide

  183. ©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

    View Slide

  184. ©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

    View Slide

  185. ©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

    View Slide

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

    ܧଓతʹػೳ։ൃΛਐΊͳ͕Βߦ͏ͨΊʹ
    175

    View Slide

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

    ܧଓతʹػೳ։ൃΛਐΊͳ͕Βߦ͏ͨΊʹ
    176

    View Slide

  188. ©2020 Wantedly, Inc.
    1. :legacy -> :legacy΁ͷΞʔΩςΫνϟվม΍ϦϑΝΫλϦϯά
    4. Modularization as refactoring / ϦϑΝΫλͱͯ͠ͷϚϧνϞδϡʔϧԽ
    ΛਐΊΔ
    1. ໌֬ͳarchitectureΛࡦఆ͢Δ
    2. DIPΛۦ࢖͢Δ
    6. A continuous process of modularization with feature development / 

    ܧଓతʹػೳ։ൃΛਐΊͳ͕Βߦ͏ͨΊʹ
    177

    View Slide

  189. ©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 / ϦϑΝΫλͱͯ͠ͷϚϧνϞδϡʔϧԽ

    View Slide

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

    ܧଓతʹػೳ։ൃΛਐΊͳ͕Βߦ͏ͨΊʹ
    179

    View Slide

  191. ©2020 Wantedly, Inc.
    2. ੾Γग़͞ΕΔ૝ఆͰ࣮૷ΛਐΊΔ
    - internalम০ࢠΛ͚ͭΔ͜ͱͰείʔϓͷՄࢹൣғΛ੍ݶ͢Δɽ
    - ಉ͡Ϟδϡʔϧʹ੾Γग़͍ͨ͠΋ͷಉ࢜͸ಉ͡package໊Ͱ੾Γग़͢ɽ
    - :legacyʹ௥Ճͤͣʹ࣮ݱͰ͖ͦ͏ͳΒੵۃతʹϞδϡʔϧΛ࡞ͬͯΈΔɽ
    ػցతʹ஄͘ͷ͕ͳ͔ͳ͔೉͍͠ͷͰPRͷϨϏϡʔͳͲͰҙࣝ͢Δɽ
    νʔϜͱͯ͠ϞδϡʔϧԽʹऔΓ૊ΜͰ͍Δ͜ͱΛҙࣝ͢Δʂ
    6. A continuous process of modularization with feature development / 

    ܧଓతʹػೳ։ൃΛਐΊͳ͕Βߦ͏ͨΊʹ
    180

    View Slide

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

    ܧଓతʹػೳ։ൃΛਐΊͳ͕Βߦ͏ͨΊʹ
    181

    View Slide

  193. ©2020 Wantedly, Inc.
    3. ԼͷϨΠϠʔͱͳΔϞδϡʔϧ͔ΒҠߦ
    6. A continuous process of modularization with feature development / 

    ܧଓతʹػೳ։ൃΛਐΊͳ͕Βߦ͏ͨΊʹ
    182

    View Slide

  194. ©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

    View Slide

  195. ©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

    View Slide

  196. ©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

    View Slide

  197. ©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

    View Slide

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

    ܧଓతʹػೳ։ൃΛਐΊͳ͕Βߦ͏ͨΊʹ
    187

    View Slide

  199. ©2020 Wantedly, Inc.
    4. :legacy΁ͷdependencyΛ࣋ͨͳ͍Α͏ʹ࣮૷
    MFHBDZ΁ͷґଘ͸ɼࠩ෼Ϗϧυ࣌ʹڊେͳ

    Ϟδϡʔϧ΁ͷࢀরΛੜΉ͜ͱʹͳΔͷͰආ͚Δ
    6. A continuous process of modularization with feature development / 

    ܧଓతʹػೳ։ൃΛਐΊͳ͕Βߦ͏ͨΊʹ
    188

    View Slide

  200. ©2020 Wantedly, Inc.
    5. ը໘ؒͷભҠγεςϜ͕׬੒͔ͯ͠ΒfeatureΛ෼ׂ
    6. A continuous process of modularization with feature development / 

    ܧଓతʹػೳ։ൃΛਐΊͳ͕Βߦ͏ͨΊʹ
    189

    View Slide

  201. ©2020 Wantedly, Inc.
    5. ը໘ؒͷભҠγεςϜ͕׬੒͔ͯ͠ΒfeatureΛ෼ׂ
    5. Modularization and Android Jetpack / Android JetpackͱϚϧνϞδϡʔϧ
    ΛਐΊΔ
    6. A continuous process of modularization with feature development / 

    ܧଓతʹػೳ։ൃΛਐΊͳ͕Βߦ͏ͨΊʹ
    190

    View Slide

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

    ܧଓతʹػೳ։ൃΛਐΊͳ͕Βߦ͏ͨΊʹ
    191

    View Slide

  203. ©2020 Wantedly, Inc.
    Conclusion / ·ͱΊ
    1. :app → :legacyʹಈ͔͢ͷ͕େ੾ͳୈҰา
    2. ϦϑΝΫλϦϯάͱͯ͠ͷจ຺͕ͱͯ΋େ͖͍ɽ
    3. νʔϜͰίϛϡχέʔγϣϯΛద੾ʹऔΓͳ͕ΒਐΊΑ͏
    192

    View Slide