0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Jetpack Composeのバージョン確認とcompose-bomとは

Posted at

はじめに

Jetpack Composeを使用しているプロジェクトで、依存関係のバージョンを確認しようとしたことはありませんか?例えば、androidx.compose.uiandroidx.compose.materialのバージョンを確認しようとした際に、明示的なバージョン指定が見当たらず困惑することがありませんか?

Jetpack Composeのバージョンを確認しようとしたら…

1. libs.versions.tomlを確認

Jetpack Composeのバージョンを確認するために、libs.versions.tomlファイルを開いて依存関係を確認しました。

[libraries]
androidx-ui = { group = "androidx.compose.ui", name = "ui" }
androidx-ui-graphics = { group = "androidx.compose.ui", name = "ui-graphics" }
androidx-ui-tooling = { group = "androidx.compose.ui", name = "ui-tooling" }
androidx-ui-tooling-preview = { group = "androidx.compose.ui", name = "ui-tooling-preview" }
androidx-ui-test-manifest = { group = "androidx.compose.ui", name = "ui-test-manifest" }
androidx-ui-test-junit4 = { group = "androidx.compose.ui", name = "ui-test-junit4" }
androidx-material3 = { group = "androidx.compose.material3", name = "material3" }

しかし、ここにはバージョン番号が記載されていません。通常であれば、version.ref = "compose"のようなバージョン番号が指定されているはずですが、見当たりません。

2. プロジェクト全体を調査

次に、プロジェクト全体を調査して、どこかでバージョンが指定されていないか探しました。その結果、以下のような記述を発見しました。

dependencies {
    implementation(platform(libs.androidx.compose.bom))
    implementation(libs.androidx.ui)
    implementation(libs.androidx.ui.graphics)
    implementation(libs.androidx.ui.tooling.preview)
    implementation(libs.androidx.material3)
}

ここで、platform(libs.androidx.compose.bom)という記述がありました。この記述が、Jetpack Composeのバージョンを一括管理している compose-bom です。

compose-bomとは?

compose-bomは、Jetpack Compose関連の依存関係のバージョンを一括で管理するための BOM(Bill of Materials) です。BOMを使用すると、複数の依存関係に対して個別にバージョンを指定する必要がなくなり、すべての依存関係が同じバージョンで統一されます。

compose-bomの仕組み

compose-bomを使用すると、以下のように依存関係のバージョンを明示的に指定しなくても、BOMで指定されたバージョンが適用されます。

[versions]
composeBom = "2025.04.01"
[libraries]
androidx-compose-bom = { group = "androidx.compose", name = "compose-bom", version.ref = "composeBom" } // BOMを追加
androidx-ui = { group = "androidx.compose.ui", name = "ui" } // バージョンはBOMで管理
androidx-ui-graphics = { group = "androidx.compose.ui", name = "ui-graphics" } // バージョンはBOMで管理
androidx-ui-tooling = { group = "androidx.compose.ui", name = "ui-tooling" } // バージョンはBOMで管理
androidx-ui-tooling-preview = { group = "androidx.compose.ui", name = "ui-tooling-preview" } // バージョンはBOMで管理
androidx-ui-test-manifest = { group = "androidx.compose.ui", name = "ui-test-manifest" } // バージョンはBOMで管理
androidx-ui-test-junit4 = { group = "androidx.compose.ui", name = "ui-test-junit4" } // バージョンはBOMで管理
androidx-material3 = { group = "androidx.compose.material3", name = "material3" } // バージョンはBOMで管理

この場合、compose-bomversion.ref = "composeBom"がすべてのCompose関連ライブラリに適用されます。

compose-bomを使用するメリット

  1. バージョンの一括管理

    • BOMを使用すると、Jetpack Compose関連の依存関係のバージョンを一括で管理できます。これにより、複数の依存関係を追加する際にバージョンを個別に指定する必要がなくなります。
  2. 一貫性の確保

    • BOMを使用すると、すべてのCompose関連ライブラリが同じバージョンで統一されるため、互換性の問題を防げます。
  3. メンテナンス性の向上

    • バージョンを更新する際に、BOMのバージョンを変更するだけで済むため、メンテナンスが簡単になります。

BOMのバージョンを確認する方法

Jetpack Composeの最新のBOMバージョンを確認するには、以下の公式リソースを利用できます。

注意点

  1. BOMを使用しない場合のリスク
    • BOMを使用しない場合、依存関係のバージョンが異なることで互換性の問題が発生する可能性があります。

問題例

[versions]
compose = "1.5.0"
material3 = "1.4.0"
[libraries]
androidx-ui = { group = "androidx.compose.ui", name = "ui", version.ref = "compose" }
androidx-material3 = { group = "androidx.compose.material3", name = "material3",version.ref = "material3"  } // バージョンが異なる

このように異なるバージョンを指定すると、ランタイムエラーやビルドエラーが発生する可能性があります。
各librariesで最新のバージョン等も異なります。

まとめ

  • compose-bomとは:
    • Jetpack Compose関連の依存関係のバージョンを一括で管理するためのBOM(Bill of Materials)。
  • メリット:
    • バージョンの一括管理、一貫性の確保、メンテナンス性の向上。
  • 注意点:
    • BOMを使用しない場合、バージョンの不一致による問題が発生する可能性がある。

公式ページ

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?