はじめに
こんにちは。STORES 決済 Androidアプリ・SDKの開発をしている id:n-seki です。
Androidアプリの開発においては、Googleが開発・提供しているライブラリはもちろん、デファクトなものを中心にサードパーティのライブラリもよく使われます。
ライブラリは便利でありますが、一度導入したらそれっきりという性質のものではなく、定期的にアップデートを行って、なるべく最新で安定したバージョンを使うことが求められます。
Androidアプリ開発においてはライブラリをアップデートする際にはいくつか気をつけるべきポイントがあると考えており、この記事ではそのポイントを含め、id:n-sekiが普段やっているライブラリのアップデート手順をまとめたものになります。
ではさっそくですが、自分はだいたい以下の記載順にライブラリアップデートの対応を進めて行くことが多いです。
アップデート対象のライブラリの確認
まず、どのライブラリがアップデート可能なのかを知る必要があります。大きく2パターンがありそうです。
- Android Studioの通知で知った
- 依存関係を
build.gradle
に直接定義している場合には、アップデートがあるときにAndroid Studioが通知を出してくれますね
- 依存関係を
- 自力で見つける
- Version Catelogを使っている場合にはAndroid Studioの通知が出ないので、version-catalog-update-pluginみたいなプラグインを使うと良さそうですね
- buildSrcを使っている場合も同様でAndroid Studioは教えてくれないので、例えばcom.github.ben-manes.versionsのようなプラグインを利用するとアップデート可能なライブラリを一覧できて便利です
変更点の確認
ライブラリをアップデートした際にどのような変更点が入ってくるのかを確認します。
AndroidXならAndroid Developersを、その他のライブラリならGitHubのreleases
を確認するといいですね。
例えば STORES 決済 では最近 Dagger
を最新化しましたが、Dagger
のバージョンごとの変更点はGitHubで確認できます。
確認するポイント
変更点の確認では、とくに破壊的変更 Breaking Change
の有無を確認するのが重要だと思います。
破壊的変更が入ることによって
- アプリの挙動が変わる
- インターフェースが変わることでビルドができなくなる
というような事態が起きるかもしれません。
後者についてはビルドをすれば分かりますが、前者はそういうワケにはいきません。ドキュメントにはしっかり目を通して、予期しない変更がアプリに加わるのを回避したいですね。
推移的な依存関係の確認
このステップはもっと後に実施しても良いと思いますが、自分は早めにやってしまうことが多いです。推移的な依存関係に変化があるのかを確認します。
「推移的な依存関係」について、Android Developerでは以下のように書かれていました。
アプリの規模が大きくなるにつれ、直接的な依存関係や推移的な依存関係(アプリがインポートしたライブラリが依存するライブラリ)など、多くの依存関係が含まれる可能性があります。
https://developer.android.com/studio/build/dependencies?hl=ja#exclude_dependencies
またビルドツールGradleにおいては、依存関係の中で同一のライブラリが複数バージョン存在する場合には一番新しいバージョンが選択されます*1*2。
これにより「とあるライブラリをアップデートしたら別のライブラリのバージョンも変わっていた!」ということがたびたび発生します。
推移的な依存関係の変化を確認する
この予期せぬバージョンアップを事前に検出しましょう。
Gradleには依存関係を出力するコマンドがあるので、出力結果をライブラリアップデートの前後で比較することで確認できます。
その際https://github.com/JakeWharton/dependency-tree-diffのようなツールを使うと差分が分かりやすく出力されます。 個人的にはhttps://github.com/careem/dependency-diff-tldrを使うことが多いです。
ここで得た差分をPull Requestに貼るとレビュアーにとっても依存の変化が一目瞭然になるのでオススメです。
実装修正
インターフェースに破壊的な変更が入っているケースではアプリの実装を修正してビルドが通るようにしてあげます。
また、例えば今まで使っていたメソッドが非推奨となって代替メソッドが追加されている場合なども早めに対応してしまうのがいいと思います。
動作確認
とくに破壊的な変更が入っていた場合には動作確認もしておきたいですね。
適切な動作確認を行うためにも、ライブラリの変更点について正確に把握することが重要かと思います。
問題がなければリリース準備に進みましょう!
まとめ
ライブラリアップデートの直接的な対応は「build.gradle
のdependencies
を書き換えるだけ」のことが多いですが、気をつけて行わないとアプリにバグを入れてしまう可能性もあります。安全にアップデートすることを心がけたいです。
もちろんここに書いたステップは絶対というわけではなく、プロジェクトやチームによっては過不足があるかもしれません。またステップは自動化することも可能です。プロジェクトやチームにマッチしたアップデート手順を整備し、ライブラリたちと安全に過ごしていきたいですね!