LoginSignup
10
3

More than 3 years have passed since last update.

AndroidライブラリでBill of Materials (BOM) を使ってみよう

Last updated at Posted at 2020-12-23

Bill of Materials (BOM) とは?

プロジェクトで利用するライブラリーのバージョンを指定して同期させるMavenの仕組み

つまり?

BOMを使うと、最適な依存ライブラリのバージョンを自動指定してくれる!

なにがお得?

  • バージョンを個別に指定する記載が不要になり、build.gradleがスッキリする
  • ライブラリの特定バージョンの組み合わせによる不具合がなくなる

※ ちなみに、Bill of Materials を直訳すると「部品表」という意味

MavenのBOMドキュメント
http://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html#bill-of-materials-bom-poms

BOM List

Android開発で使えそうなBOMを集めてみた

Android

Firebase-BOM
https://mvnrepository.com/artifact/com.google.firebase/firebase-bom

Kotlin Libraries Bill of Materials
https://mvnrepository.com/artifact/org.jetbrains.kotlin/kotlin-bom

Kotlinx Coroutines BOM
https://mvnrepository.com/artifact/org.jetbrains.kotlinx/kotlinx-coroutines-bom

Squareup.okhttp3
https://mvnrepository.com/artifact/com.squareup.okhttp3/okhttp-bom

オマケ

Spring Framework BOM
https://mvnrepository.com/artifact/org.springframework/spring-framework-bom

AWS SDK For Java
https://mvnrepository.com/artifact/com.amazonaws/aws-java-sdk-pom

JUnit 5
https://mvnrepository.com/artifact/org.junit/junit-bom

依存関係を実際に確認してみよう

空のAndroidプロジェクトを作成
BOMライブラリをdependenciesに追加
dependencies tree を眺めて差分を確認してみる

./gradlew app:dependencies --configuration debugCompileClasspath | grep coroutine

今回は coroutin を使用する
https://mvnrepository.com/artifact/org.jetbrains.kotlinx/kotlinx-coroutines-bom

app/build.gradle
dependencies {

    // Before : 個々にバージョン管理する必要がある
    implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.4.2'
    implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.4.2'
    implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-play-services:1.4.2'
    implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-test:1.4.2'

    // After : BOM化するとバージョン指定は1つだけ
    implementation platform("org.jetbrains.kotlinx:kotlinx-coroutines-bom:1.4.2")
    implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core'
    implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android'
    implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-play-services'
    implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-test'

使用コード
https://github.com/ikemura23/Android-BOM-Sample/blob/main/app/build.gradle#L44-L48

BOMを有効活用しよう

BOMについてある程度理解はできた

さっそく、プロジェクトに導入いきましょう!

ここから妄想

社内専用のBOMを作ってみてはどうだろう?

例えば新規Androidプロジェクトを作る時に
「okhttpとretrofitとcoroutineを追加して〜」
これが「このBOM1つで解決やで!」
と、ならないだろうか

メリット

  • ライブラリ選定が楽(同じライブラリしか使わない場合)
  • プロジェクトの初期構築がスピードアップする

デメリット

  • 社内にBOM環境を作る必要がある(GitHubのみでOK?)
  • BOMバージョンのメンテナンスが大変そう

うーん、ちょっと考えてみたけど、長く使うとなればメンテのコストが大きい。

毎週のように新規プロジェクトが作成される状況や、自社でライブラリを作成/配布している場合には有効かも!

10
3
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
10
3