Renovateを導入するためにあれこれした話
こんにちは。Android アプリエンジニアをしているぽんです。
SHOWROOM の Android アプリでは Renovate を導入してライブラリの管理をしやすくしています。
Renovate の導入自体はすごく簡単なんですが、それまでにやっておきたいこと等で幾つかの作業を経たので紹介しようと思います。
導入手順を考える
build.gradle を Groovy から KTS に移行する
Version Catalog を導入する
Renovate を導入する
1. 導入手順を考える
Renovate は Gradle File Support があるため、実際には一般的な Android のビルド環境であればそのまま Renovate を導入して動かすことはできます。
しかし、せっかくビルドツール周りを弄るのであれば、ついでに今後のことも考えて変更を加えておきたいです。
現在の Android アプリ本体はマルチモジュール構成ではなく、当時は app/build.gradle に直接依存先とバージョンが指定されていました。
今後マルチモジュール構成を取る場合、依存ライブラリの管理のしやすさは考えておきたいです。そこで今回は Version Catalog を使って依存ライブラリの定義をすることにしました。
Version Catalog は特に何もせず使えますが、Groovyの場合に補完が効きませんでした。そこで、これを機に build.gradle も build.gradle.kts へマイグレートすることにしました。
つまり今回の手順は
build.gradle の KTS 移行
Version Catalog 導入
Renovate 設定
となります。
2. build.gradle を Groovy から KTS に移行する
作業方針決め
build.gradle の KTS 移行はなかなか厳しい(面倒)という話をよく聞きます。Groovy -> KTS の構文の違いくらいの修正であればさほど問題ないのですが、恐らくそう簡単にはいかないだろうなという感覚がありました。そこで今回立てた方針がこちらです。
とりあえず丸っと移行してビルドができるようにする
明らかに不要だとわかるもの以外の内容の精査はしない
僕がこのタスクに着手し始めたのは転職してから1ヶ月ほどの頃だったため、ビルド周りもほぼ理解できておらず、どれが必要/不要なのかはあまり分かりませんでした。そのため、まず動く段階でプルリクエストを作り、不要なものがあればコメント書いてくださいという方式を取ることにしました。結果的にこの方針はうまくいって、「ビルドが成功すること」に集中でき、思ったよりすんなりと移行が完了したと思います。
実作業
ここから実際の作業に入るわけですが、ここで大事なポイントは Gradle Sync をまず通そうです。
Sync が通ることにより、補完も効くようになり、型を見ながら書くことができます。知識も十分にない場合の Groovy では、(自分の環境では)型がよくわからないものが出てきたり、そもそもこれは何?みたいなことがよく起こりました。Sync が通れば IDE 上で容易にコードを追うことができ、何をやっているのかいまいちよくわからないものに対しての理解の助けになります。
僕は Sync 時に動かなくて良いところは一度コメントアウトし、Sync を通した後にコメントを外しながら理解しつつKTSで動くように変更を加えていきました。
その中でハマったポイントはこちら↓
Any のものを使っていて、その型をエスパーするしかない箇所があった
kapt の arguments {} 内で variant: Any? の中にある outputs を使っている箇所があり、variant を InternalBaseVariant にキャストして使うようにしました
後に Kotlin のアップデートで this が KaptAnnotationProcessorOptions から KaptArguments に代わったので動かなくなり、buildOutputs を使うように変更しました(本来使うべきだったもの?)
submodule 側の build.gradle で Array を必要としているもの(abiFilters 等)を使っている場合、extra に入れる値は Array にキャストしなければいけなかった
幸いなことに複雑なことをあまりしていなかったため、Gradle Sync を通してしまえば動くくようにするだけであればそこまで苦労することはなかったです。
3. ライブラリ管理を Version Catalog にする
こちらに関しては導入記事や公式ドキュメントを見て導入するだけで、ハマりポイントはありませんでした。
https://docs.gradle.org/current/userguide/platforms.html
Version Catalog の toml ファイルを手動で管理するのは手間という場合には Version catalog update plugin https://github.com/littlerobots/version-catalog-update-plugin を使うと楽になるかもしれません。
4. Renovate を導入する
導入
導入はすごく簡単で、公式からぽちぽちで入れることができます。
https://www.mend.io/free-developer-tools/renovate/
ぽちぽちすると `Configure Renovate` というタイトルのプルリクエストが対象リポジトリに対して自動で作られます。内容は `renovate.json` を追加するものです。
設定を変更する場合はこのブランチで変更すると良いと思います。(もちろん後で変更することもできます)
デフォルトでは以下の内容で `renovate.json` が作られました。
{
"extends": [
"config:base"
]
}
これに対していくつかの設定を追加し、現在はこんな感じの設定にしています。
{
"$schema": "https://docs.renovatebot.com/renovate-schema.json",
"extends": [
"config:base",
":timezone(Asia/Tokyo)"
],
"labels": [
"Update library"
],
"prConcurrentLimit": 5,
"schedule": [
"every weekend"
],
"packageRules": [
{
"matchDatasources": ["maven"],
"registryUrls": [
"https://maven.google.com",
"https://repo1.maven.org/maven2/",
"https://plugins.gradle.org/m2/",
"https://jitpack.io"
]
}
],
"ignorePaths": [
// 無視したいパス
],
"major": {
"stabilityDays": 7
},
"minor": {
"stabilityDays": 3
}
}
プルリクエスト作成上限は5個、週末に動く、ラベルをつける・・・等。詳しい設定に関してはこちらをご覧ください。
https://docs.renovatebot.com/configuration-options/
運用
現在弊チームでは「チーム内二人が Approve でマージ」というルールを設けています。
しかし、この運用ルールでは「Approve が一人で止まってしまい、結局ライブラリアップデート PR が溜まりがち」という問題が発生してしまいました。最初の方こそ継続してマージできていましたが、一回止まってしまうとずるずるとそのままになってしまいました。
この問題の解決案として、Renovate には automerge という設定があるため、これを使うのも良いかもしれません。
まとめ
今回は Renovate を導入してみた話でした。今回は「Renovate を導入するならついでに」の部分に結構時間を掛けてしまいましたが、実際の導入に関してはすごく楽でした。
運用面でまだ課題があるので改善しないといけないなとは思いますが、少なくともライブラリアップデートの情報を意識的に取りにいかなくても取得してくれる時点でだいぶ楽にはなったと思います。
Renovate は本当におすすめなので是非使ってみてください。そして良い運用方法とかあればよければ教えてください!
SHOWROOM株式会社では、エンジニア職を絶賛募集中です。
・ライブ配信サービス「SHOWROOM」
・バーティカルシアターアプリ「smash.」
以下の求人内容をご確認の上、ご興味あればご応募ください。
心よりご応募お待ちしております。
■求人は以下になります
SHOWROOM株式会社採用情報
■その他SHOWROOM株式会社の情報
・ note(代表前田取材記事です!)
・ 社員インタビュー記事
・ SHOWROOM
・ smash.
・ SHOWROOM最新記事一覧(PRTimes)