1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Androidテンプレートレポジトリ作ったので晒す

Posted at

はじめに

こんにちは!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を見てもらえれば分かりますが、CompsoseHiltは使えるようにしています。
この二つはどのようなケースのAndroidアプリを作るにしても使いたいですし、使えると思っています。
ネットで見つけたよさげなサンプルコードを実際に動かしてみたい!って思った時にHiltがなくてもできなくはないですが、やはり本番さながらのコードに近い状態で書けます。Applicationクラスを作って、@HiltApplicationを設定して...など毎回やるのは面倒なので、定義していた方が良いと思います。

ビルドロジックについて

最近はComposite Buildで各モジュールのビルドロジックをまとめるのが流行りでしょうか? (Compposing build)
大きなプロジェクトでは恩恵を受けられるのかもしれませんが、私はやりすぎなのかと考えています。
まぁ一度設定すればあまり修正の必要がないとはいえ、どうしてもやや複雑になるので避けました。

ただしビルドロジックの集約という観点ではSDKバージョンは集約できるようにしました。個人的にモジュール事にこの値を変更するのはやや面倒なので。。

あまりネットにはない?ような気がするのですが、 build.gradleで定義するminSdktargetSdkはバージョンカタログの値を利用できます。

バージョンカタログで以下のように記述します。

[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をそのままいれるのは怖いので、

  1. 自動PR内ののリンクにあるRelease Noteを自分で読んで問題なさそう
  2. CIが通る

が確認できたらPRをmergeするようにしています。

PULL_REQUEST_TEMPLATE

Android関係ないので書くか悩みましたが、念のため書いておきますw
設定はこちらです。
まぁ個人開発でもこのくらいは書いておくと、後で見返しやすいので便利です。この実装どうやってやったんだっけ?みたいなときにたまに使えます。

おまけ: Template Repositryを実際に利用する。

  1. リポジトリの設定からTemplate repositoryにチェックを入れる
    image.png

  2. レポジトリのTOPで「Use this template」→「Create a new repository」を選択する。
    image.png

  3. 各種設定を新プロジェクト用に変更する。
    READMEに書きました。
    (この辺りの設定変更、スクリプトとかで自動でできるのか?)

終わりに

今回は結構前からやりたいと思っていた、Androidテンプレートリポジトリを作って紹介してみました。

結構前の転職活動でアプリ制作の課題があったのですが、オレオレのビルド設定やプロジェクト設定をしていたらそれだけで一日使ってしまい、後悔しました。簡単なアプリを作ろうと思った時もどうしても毎回設定することってありますし、テンプレートリポジトリがあるだけで、ストレスなく本当にやりたい作業に入れると感じております。

他にもおすすめのAndroidテンプレートリポジトリの設定などあったら教えてください!

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?