Composeコンパイラプラグイン設定エラーの解決
問題の概要
Kotlin 1.9+とJetpack Composeを使用するAndroidプロジェクトで、ビルド時に以下のエラーが発生するケースがあります:
Starting in Kotlin 2.0, the Compose Compiler Gradle plugin is required when compose is enabled.
このエラーが表示される典型的な設定例:
buildscript {
ext.kotlin_version = '1.9.0'
dependencies {
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:2.0.20"
}
}
android {
buildFeatures.compose = true
composeOptions.kotlinCompilerExtensionVersion = "1.5.14"
}
表面的な矛盾点:
プロジェクトではKotlin 1.9を宣言しているのに「Kotlin 2.0+」に関連するエラーが発生しています。問題はkotlin-gradle-plugin:2.0.20
のように2.0系プラグインを使用していることです。Kotlin 2.0ではCompose Compilerがコアから分離され、明示的な構成が必要になりました。
根本原因
Kotlin 2.0以降で導入されたアーキテクチャ変更が原因です:
- Kotlin 1.9まではComposeコンパイラが標準でバンドルされていました
- Kotlin 2.0+ではComposeコンパイラが独立したプラグインとして分離
compose = true
が有効な場合、明示的なプラグイン宣言が必須に変更
提供された設定ではkotlin-gradle-plugin 2.0.20
(Kotlin 2.0系)を使っているためエラーが発生しています。
解決手法
重要な共通手順: composeOptions
のバージョンをKotlinプラグインバージョンに合わせる必要があります
(kotlinCompilerExtensionVersion = "2.0.0"
のようにバージョン形式が変更)
方法1: Gradleバージョンカタログ利用 (推奨, 最新プロジェクト向け)
libs.versions.toml
を使った方法です。Android Studioの新規プロジェクトで標準採用されています。
- gradle/libs.versions.toml にバージョン定義
[versions]
kotlin = "2.1.0" # 実際に使用するKotlinバージョン
[plugins]
compose-compiler = { id = "org.jetbrains.kotlin.plugin.compose", version.ref = "kotlin" }
- プロジェクトレベルの build.gradle.kts でプラグイン宣言
plugins {
alias(libs.plugins.compose.compiler) apply false
}
- アプリモジュールの build.gradle.kts でプラグイン適用
plugins {
alias(libs.plugins.compose.compiler)
}
android {
composeOptions {
kotlinCompilerExtensionVersion = libs.versions.kotlin.get()
}
}
TIP
kotlinCompilerExtensionVersion
はCompose Kotlinコンパイラのバージョンを指定します。Kotlin本体バージョンと一致させることが推奨されます
方法2: 従来型build.gradle設定 (レガシープロジェクト向け)
Gradleカタログ未使用の場合の対応方法です。
- プロジェクトレベルの build.gradle 変更
buildscript {
ext {
kotlin_version = '2.1.0' // Kotlin本体バージョン
compose_compiler_version = kotlin_version // 互換バージョン指定
}
dependencies {
classpath "org.jetbrains.kotlin.plugin.compose:org.jetbrains.kotlin.plugin.compose.gradle.plugin:$kotlin_version"
}
}
- アプリモジュールの build.gradle 変更
plugins {
id "org.jetbrains.kotlin.plugin.compose"
}
android {
composeOptions {
kotlinCompilerExtensionVersion compose_compiler_version
}
}
dependencies {
implementation "org.jetbrains.kotlin:kotlin-compose-compiler-plugin-embeddable:$compose_compiler_version"
}
注意点
古いプロジェクトでandroidx.compose.compiler:compiler
依存関係がある場合、必ず削除してください。これはKotlin 2.0+で非推奨となりました
設定後の確認ポイント
- KotlinプラグインバージョンとComposeコンパイラーバージョンが一致していること
- 全モジュールで
org.jetbrains.kotlin.plugin.compose
プラグインが適用されていること com.android.application
プラグインがkotlin-android
より前に宣言されていること
// 正しい宣言順序例
plugins {
id "com.android.application"
id "org.jetbrains.kotlin.android"
id "org.jetbrains.kotlin.plugin.compose" // この位置に追加
}
変更背景と公式参考情報
この変更はComposeとKotlinの開発サイクルを独立させるために導入されました:
- Compilerの更新がKotlin本体リリースに依存しない
- Compose固有の改良を迅速に提供可能
- ビルドパフォーマンスの改善
公式ドキュメント:
Android Developers - Composeコンパイラ
トラブルシューティング
ビルドエラーが解消しない場合のチェックリスト:
- [ ] プロジェクトのKotlinバージョンが全て統一されているか (
ext.kotlin_version
) - [ ] キャッシュクリーン実行:
File > Invalidate Caches / Restart
- [ ] Gradle同期:
Sync Project with Gradle Files
- [ ] 依存関係更新:
use Gradle version 8.5+
新しい構成への移行後は、Compose関連機能が正常動作するかコンパイルして確認してください。設定変更によって、Kotlin 2.0+環境でのCompose開発が可能になります。