見出し画像

ビルド構成を Version Catalog と KTS に移行しました

はじめに

こんにちは。くふう AI スタジオで Android 版 Zaim の開発を担当している kiyosuke です。
Zaim では日々メンテナンスや改善を続けています。
今年の頭にライブラリ管理を Version Catalog へ、build.gradle を kts へと移行を行いました。

移行前の状態

Version Catalogへの移行前は、特に運用ルールがなく、必要に応じて都度 dependencies にライブラリを直接追加していました。
その結果、モジュール間で異なるバージョンのライブラリに依存するケースが発生していました。
ライブラリを集約した dependencies.gradle というファイルが用意されていたものの、実質使用されなくなっており、形骸化していました。
さらに、補完機能が働かない問題や、ライブラリの更新があった際にそれを検知できないといった課題が残っていました。

ビルド構成は Zaim もこれまでは Groovy で書かれていました。
こちらについては、特に強い課題感はありませんでしたが、可読性や IDE の補完の恩恵、更にはAndroid Studio Giraffe 以降ではデフォルトが kts になっていることも考慮し kts へと移行しました。

Version Catalog への移行

基本的には公式ドキュメントのビルドをバージョンカタログに移行するを参考に移行作業を進め、特に躓く箇所もなく移行できました。

あえて上げるとしたら、名前を考えるのが面倒だったことと、IDE の自動置き換えを使うと group, name, version という書き方ではなく module, version という書き方になるため結局手動で置き換える必要があったことくらいでしょうか。

1. `gradle/` 配下に `libs.versions.toml` ファイルを作成する

2. dependencies.gradle に定義されていたものを移行する。

dependencies.gradle
libs.verions.toml
build.gradle

3. 各モジュールに定義されていたものを移行する。

4. プラグインを移行する。

libs.versions.toml
build.gradle

ほぼ全てのプラグインは問題なく移行できましたが、唯一 `oss-licenses-plugin` だけはエラーが発生し移行できませんでした。
同様の事象についてすでに Issue が立てられており解消方法も記載されていましたが、クリーンさを保つことを優先したかったため今回は見送りました。

KTS への移行

Groovy から Kotlin への移行も公式ドキュメントのビルド構成を Groovy から Kotlin に移行するに従って作業し移行しました。

大まかに Groovy の時点でなるべく Kotlin の構文に寄せる。拡張子を kts に変更する。ビルドして発生したエラーを潰す。の手順で移行していきました。
構文を寄せる感覚を掴むためにも `settings.gradle` など小さいファイルから着手することをお勧めします。

Kotlin の構文に寄せる

  • メソッド呼び出しにかっこを追加する

Groovy ではメソッド呼び出しのかっこを省略できますが、Kotlin では必須のため追加します。

compileSdkVersion 34

compileSdkVersion(34)

※ compileSdkVersion は Deprecated のため kts 移行後に `compileSdk = 34` に置き換えました。Kotlin 化したおかげか、build.gradle でも Deprecated なメソッドやプロパティに打ち消し線が引かれるようになり、修正漏れを防ぐことができました。

  • 代入呼び出しに = を追加する

メソッド呼び出し同様に `=` も省略できますが、これも Kotlin では必須です。

buildFeatures {
    compose true
    viewBinding true
    buildConfig true
}

buildFeatures {
    compose = true
    viewBinding = true
    buildConfig = true
}
  • 文字列を変換する

Groovy はシングルクォーテーション、ダブルクォーテーションどちらでも定義できますが Kotlin ではダブルクォーテーションを使用するため置き換えます。

  • def を置き換える

Groovy ではメソッドや変数を `def` で宣言します。Kotlin では変数は `val` または `var` メソッドは `fun` で宣言します。

下記は、VersionCode を計算する処理での例です。

def computeVersionCode(xxx) {
    def versions = xxxxx
    def versionCode = xxxxx // VersionCode を計算する
    return versionCode
}

fun computeVersionCode(xxx: Int): Int {
    val versions = xxxxx
    val versionCode = xxxxx // VersionCode を計算する
    return versionCode
}

ビルドファイルの拡張子を .kts に変更する

一通り Kotlin の構文に寄せ終わったらファイルの拡張子を `.kts` に変更します。
例えば `build.gradle` が移行対象なら `build.gradle.kts` に変更し Build します。おそらくここでは失敗しますが、エラーが出ている行が出力されますので 1 つずつ修正していきます。

余談ですが、ビルドが通っていない状態では補完も効かないので、手当たり次第修正していましたが、1 度ビルドが通れば補完が効くのでもっと楽に移行できたのでは?と終わってから気付きました。まずはビルドを通すことに注力していれば、もっとスムーズに行えたかもしれません。

まとめ

調査しながらの作業でしたが、公式の移行ガイドがあるおかげでそれぞれ 1 日かからない程度で移行できました。

Version Catalog の導入によって、依存関係を一元管理できるようになり、従来抱えていたモジュール間の差分を解消できました。
標準的な手段に移行したため、特段ルールを設けなくても運用できそうという期待を感じています。

今後も日々プロジェクトの改善を行い、より良い環境作りを目指していきます。

くふうAIスタジオでは、採用活動を行っています。

当社は「AX で 暮らしに ひらめきを」をビジョンに、2023年7月に設立されました。
(AX=AI eXperience(UI/UX における AI/AX)とAI Transformation(DX におけるAX)の意味を持つ当社が唱えた造語)
くふうカンパニーグループのサービスの企画開発運用を主な事業とし、非エンジニアさえも当たり前にAIを使いこなせるよう、積極的なAI利活用を推進しています。
(サービスの一例:累計DL数1,000万以上の家計簿アプリ「Zaim」、月間利用者数1,600万人のチラシアプリ「トクバイ」等)
AXを活用した未来を一緒に作っていく仲間を募集中です。
ご興味がございましたら、以下からカジュアル面談のお申込みやご応募等お気軽にお問合せください。


#中途採用 #エンジニア採用 #採用広報 #株式会社くふうAIスタジオ #テックブログ

いいなと思ったら応援しよう!