LoginSignup
6
4

推移的依存関係をわかりやすくみよう

Last updated at Posted at 2024-02-22

推移的依存関係とは

ライブラリの中でさらにライブラリが使われてたりしますよね。

例えばAというライブラリの中でv1.0.0のBというライブラリが使われていたとします。
gradleを通してAのバージョンをアップデートして、Bはv1.0.0のままにしていたとしても、
アプデ後のAの中でもしv1.2.0のBが使われている場合、アプリではv1.2.0のBが使用されます。

20240222_205516.jpg

そーゆー感じのことを推移的依存関係と言います。
「推移的」に関しては「つられてバージョンあがっちゃった💦」みたいに解釈してます。私は。

どんなシチュエーションで知りたくなる

業務で何かしらのライブラリのバージョンをアップデートするときに、つられて上がっちゃう他のライブラリちゃんがないか調べておきたいですよね。

つられてあがっちゃったライブラリに破壊的変更が含まれていたら悲しいですから、アップデートして大丈夫そうかどうか確認しておきたいです。

どんなツールでわかりやすく見れる

dependency-diff-tldr を使いましょう。

こんな感じで簡単に推移的依存関係のアップグレードを確認できます

New Dependencies
com.careem.identity:user-profile:0.0.63
project :miniapp:thirdparty

Upgraded Dependencies
androidx.annotation:annotation-experimental:1.0.0, (upgraded from 1.0.0-rc01)
androidx.constraintlayout:constraintlayout:2.0.2, (upgraded from 2.0.1)
androidx.constraintlayout:constraintlayout-solver:2.0.2, (upgraded from 2.0.1)
com.careem.care:helpcenter:0.0.17, (upgraded from 0.0.16)
com.careem.chat:core:3.1.6, (upgraded from 3.1.4)

これをプルリクのコメントとかにもはっちゃったりして、レビュアーに親切なプルリクを作れます :heart: :hear_no_evil:

導入方法

githubのReleasesを見にいきます。

そして最新バージョンのAssetsからdependency-diff-tldr-r8.jarをクリックしてダウンロードします。
スクリーンショット 2024-02-22 21.10.34.png

使い方

ライブラリアップデート前の状態で以下のコマンドを叩きます。

このコマンドで、old.txtというファイルを作成し、appモジュールの実行時に関連するライブラリの依存関係を取得してファイルに書き出します。

(実際に書き出せているかはvim old.txtで確認してみましょう。)

./gradlew :app:dependencies --configuration releaseRuntimeClasspath > old.txt

releaseRuntimeClasspathは実行中のアプリケーションがクラスやリソースを検索する場所(実行時クラスパス)を示すものです。

通常、リリースタスクの実行時クラスパスと実際に取り込んでいるライブラリは一致します。

なので、アプリが使用しているライブラリの一覧を知るためにはreleaseRuntimeClasspathを見れば良いことになります。

[ビルドバリアント]RuntimeClasspathとすることでそのビルドバリアントでの実行時のクラスパスを指定します。

参考:モジュールの依存関係を表示する

次に、ライブラリのバージョンをアップデートして、以下のコマンドを叩きます。

このコマンドでも同様に新しいバージョン後の実行時に関連するライブラリの依存関係を取得してnew.txtファイルに書き出します。

./gradlew :app:dependencies --configuration releaseRuntimeClasspath > old.txt

最後に、以下のコマンドでold.txtnew.txtを比較します。

java -jar dependency-diff-tldr-r8.jar old.txt new.txt

old.txtnew.txtdependency-diff-tldr-r8.jarが同じディレクトリにあることを確認してください。異なる場所にある場合はそれぞれのフルパスを明記してください

java -jar [dependency-diff-tldr-r8.jarのパス] [old.txtのパス] [new.txtのパス]

そしたらターミナル上に次のような一覧が表示されるはずです。

Upgraded Dependencies
androidx.room:room-common:2.6.1, (changed from 2.5.2)
androidx.sqlite:sqlite:2.4.0, (changed from 2.3.1)
org.jetbrains.kotlin:kotlin-stdlib:1.9.22, (changed from 1.7.21)
org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.1, (changed from 1.6.4)
...

org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.1, (changed from 1.6.4)

coroutineのバージョンが1.6.4から1.7.1にアップグレードされていルナあとかが分かりますね。 :eyes:

6
4
4

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
6
4