はじめに
こんにちは!Androidエンジニア3年目のgotlinです。
今回はAndroidのテンプレートレポジトリを作ってみたので、晒してみます。
チームで育てるAndroidアプリ設計を読んでからずっとAndroidのテンプレートレポジトリを作りたかったのですが、どの機能までをテンプレートにいれるか結構悩んだりしてて、最近まぁこのくらいでいいかっていうのが、見えてきたところです。
個人開発レベルのテンプレートリポジトリなので、そぎ落としている部分もあります。
作成したリポジトリは以下です。
移植時の方法もREADMEにあるので良かったら使ってみてください!
設定したこと
Gradle設定周り
バージョンカタログ
設定はこちらです。
Gradle7.4から安定版になりました、バージョンカタログを利用します。メリットとしては
- 後述するRenovateが利用できる。
- モジュール分割していても、バージョンなどの宣言を一か所に集約できる。
-
buildSrc
を利用した方法よりビルドが速いらしい(この規模だと体感差はありませんが..) - pluginsやbundlesの定義(関連ライブラリをまとめられる)が可能
導入も簡単で、Gradle7.4からはファイルを作成するだけで勝手に読み込んでくれます。
バージョンカタログに記述す名前は、パッケージ名を全て入れるか、モジュール名だけを入れるかで、いつも悩みます。最近以下の方法で落ち着いてきました。
-
appcompatなどのモジュール名だけだと分かりずらい場合
→ パッケージ名の中で一番グルーピングできそうなandroidx
だけとって、androidx-appcompat
にする -
hiltなどモジュール名だけでも比較的分かりやすい場合
→ そのままhilt-android
初期ライブラリについて
build.gradleを見てもらえれば分かりますが、Compsose
とHilt
は使えるようにしています。
この二つはどのようなケースのAndroidアプリを作るにしても使いたいですし、使えると思っています。
ネットで見つけたよさげなサンプルコードを実際に動かしてみたい!って思った時にHiltがなくてもできなくはないですが、やはり本番さながらのコードに近い状態で書けます。Application
クラスを作って、@HiltApplication
を設定して...など毎回やるのは面倒なので、定義していた方が良いと思います。
ビルドロジックについて
最近はComposite Build
で各モジュールのビルドロジックをまとめるのが流行りでしょうか? (Compposing build)
大きなプロジェクトでは恩恵を受けられるのかもしれませんが、私はやりすぎなのかと考えています。
まぁ一度設定すればあまり修正の必要がないとはいえ、どうしてもやや複雑になるので避けました。
ただしビルドロジックの集約という観点ではSDKバージョンは集約できるようにしました。個人的にモジュール事にこの値を変更するのはやや面倒なので。。
あまりネットにはない?ような気がするのですが、 build.gradle
で定義するminSdk
やtargetSdk
はバージョンカタログの値を利用できます。
バージョンカタログで以下のように記述します。
[versions]
...
compileSdkVersion = "33"
minSdkVersion = "26"
targetSdkVersion = "33"
...
そしてbuild.gradle
側では以下のように設定します。
minSdk = libs.versions.minSdkVersion.get().toInt()
targetSdk = libs.versions.targetSdkVersion.get().toInt()
build.gradle
のkts化
ここはたいして説明することはないですが、最近はほどほどのケースでkts化しておいた方が良いのではないでしょうか?サンプルなどもktsのものが増えてきたと思いますし、プロジェクト作成時にktsに変更するのも面倒なので、テンプレートレポジトリでkts化しておくと楽です。
Renovateの導入
ここが公式ドキュメントです。ポチポチ設定してたら、自動でこんな感じの設定PRを作ってくれます。
そしてライブラリバージョン更新のためのPRをこんな感じで自動で作ってくれます。
個人開発はライブラリバージョン上げ等がおろそかになりがちなので非常に助かりますし、自分でRelease Noteを見に行かなくてもある程度把握できるのでとても便利です。
CIの設定
設定はこちらです。
Lintチェックやビルド、ローカルテスト、インストルメントテストなどを回しています。個人ではこのくらいチェックしておけば十分だと思っています。(本当はスクショチェックとかも導入してみたいなぁ。。)
前述したRenovateが作成したPRをそのままいれるのは怖いので、
- 自動PR内ののリンクにあるRelease Noteを自分で読んで問題なさそう
- CIが通る
が確認できたらPRをmergeするようにしています。
PULL_REQUEST_TEMPLATE
Android関係ないので書くか悩みましたが、念のため書いておきますw
設定はこちらです。
まぁ個人開発でもこのくらいは書いておくと、後で見返しやすいので便利です。この実装どうやってやったんだっけ?みたいなときにたまに使えます。
おまけ: Template Repositryを実際に利用する。
-
レポジトリのTOPで「Use this template」→「Create a new repository」を選択する。
-
各種設定を新プロジェクト用に変更する。
READMEに書きました。
(この辺りの設定変更、スクリプトとかで自動でできるのか?)
終わりに
今回は結構前からやりたいと思っていた、Androidテンプレートリポジトリを作って紹介してみました。
結構前の転職活動でアプリ制作の課題があったのですが、オレオレのビルド設定やプロジェクト設定をしていたらそれだけで一日使ってしまい、後悔しました。簡単なアプリを作ろうと思った時もどうしても毎回設定することってありますし、テンプレートリポジトリがあるだけで、ストレスなく本当にやりたい作業に入れると感じております。
他にもおすすめのAndroidテンプレートリポジトリの設定などあったら教えてください!