目次 非表示
この記事は
Android公式ドキュメントでモジュール構成についてのガイダンスが、新しく投稿されました。
2022/9 現在は、2ページ構成となっていますが、今後読者の意見を交えながら刷新されていくようです。
今回は、現在発表されているに関する2ページの要点を抑えてどんな事が書かれているのかご紹介したいと思います。
詳しい内容に関しましては、本編であるAndroid Developersをご参照頂ければと思います。
https://developer.android.com/topic/modularization
マルチモジュールを導入によるメリット
- MainActivity等が含まれるappモジュール部分を差し替えるだけで一つのプロジェクトから複数のアプリを作成できる
- 参照できるモジュールを設定することで依存関係が明確になる
- 他のモジュールから参照させるコード以外はinternal / privateにすることで変更の影響範囲を抑えられる
- Play Feature Deliveryと相性が良い
- モジュールごとに独立したコンポーネントを作成することになるので、テスタビリティの高いコードになりやすい
- 実装の役割分担がしやすくなる
- 差分ビルドによりビルド時間の短縮につながる
1 ~ 4がモジュール特有のメリットで、5以降はモジュール化以外でも達成できます。
いくつか触れると、2に関してはディレクトリを切るだけでは同じ階層のコードを参照できてしまいますが、モジュールを分けることで依存関係を明示的に制御することが出来ます。
また、モジュールごとにビルドが行われるのでキャッシュを活かし、ビルド時間の短縮を実現します。
よくあるモジュール
ドメインモデルやカプセル化したビジネスロジック、Repositoryの実装クラス、外部に公開するRepository Interfaceなどを置く場所
アプリの一機能を置く場所
各タブごとに一機能とする場合が多い
アプリのエントリーポイントを置く場所
例)カスタムView / ログ関連のクラスなど / テストのダミーメソッド / ヘルパーメソッド
注意点
- モジュール分けが細かすぎると複雑化して運用が難しくなる
- 小さなプロジェクトだとappモジュール内で完結させても問題ない
- ビルド設定の一貫性を保つ
- apiよりも伝播しないimplementationを優先して使う
- モジュール同士が循環参照を起こす場合は、メディエーターとしてのモジュールを提供する
- Androidモジュールよりもjava / kotlinモジュールを優先して使う
そもそもマルチモジュールを採用するかどうかを考える必要があります。
前述したマルチモジュールを導入によるメリットのいくつかを享受したいという目的がない場合は、不要である場合があります。
また、モジュールごとにbuild.gradleを作成するのでライブラリのバージョン管理を一元化したりやビルドロジックを共有することを検討すると良いです。