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

## はじめに

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


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

### 1. `libs.versions.toml`を確認

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

```kotlin
[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. プロジェクト全体を調査

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

```kotlin
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で指定されたバージョンが適用されます。

```kotlin
[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-bom`の`version.ref = "composeBom"`がすべてのCompose関連ライブラリに適用されます。


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

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

2. **一貫性の確保**
   - BOMを使用すると、すべてのCompose関連ライブラリが同じバージョンで統一されるため、互換性の問題を防げます。

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


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

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

- [Composeのバージョン](https://developer.android.com/jetpack/androidx/releases/compose?hl=ja&_gl=1*16w4wsu*_up*MQ..*_ga*MTM3NTIwODI4Ny4xNzQ2MDE4ODU0*_ga_6HH9YJMN9M*MTc0NjAxODg1NC4xLjAuMTc0NjAxODg1NC4wLjAuMTkzODEwODczNg..#versions)
- [BOM とライブラリ バージョンのマッピング](https://developer.android.com/develop/ui/compose/bom/bom-mapping?hl=ja&_gl=1*1ts1ipp*_up*MQ..*_ga*MTM3NTIwODI4Ny4xNzQ2MDE4ODU0*_ga_6HH9YJMN9M*MTc0NjAxODg1NC4xLjAuMTc0NjAxODg1NC4wLjAuMTkzODEwODczNg..)
- [Maven Repository -Compose BOM](https://mvnrepository.com/artifact/androidx.compose/compose-bom)


## 注意点

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

### 問題例

```kotlin
[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を使用しない場合、バージョンの不一致による問題が発生する可能性がある。

## 公式ページ
https://developer.android.com/develop/ui/compose/bom?hl=ja