kapt から KSP に移行する

Kapt(Kotlin Annotation Processing Tool)を使用すると、Java アノテーション プロセッサが Kotlin をサポートしていない場合でも、Java アノテーション プロセッサを使用して Kotlin コードを処理できます。ただし、そのためには、Kotlin ファイルから、Java アノテーション プロセッサが読み取れる Java スタブを生成する必要があります。このスタブ生成は高コストのオペレーションのため、ビルド速度に大きく影響します。

KSP(Kotlin Symbol Processing)は、kapt に代わる Kotlin 対応の処理方法です。KSP は Kotlin コードを直接分析できるため、最大 2 倍速くなります。また、Kotlin の言語構造も詳細に把握しています。

Kapt は現在メンテナンス モードになっています。できるだけ kapt から KSP に移行することをおすすめします。ほとんどの場合、プロジェクトのビルド構成を変更するだけで移行できます。

移行中は、プロジェクト内で kapt と KSP を並行して利用できます。移行は、モジュールごとまたはライブラリごとに行えます。

移行手順は主に次のとおりです。

  1. 使用しているライブラリが KSP をサポートしているかを確認する
  2. KSP プラグインをプロジェクトに追加する
  3. アノテーション プロセッサを KSP に置き換える
  4. kapt プラグインを削除する

使用しているライブラリが KSP をサポートしているかを確認する

まず、kapt で使用しているライブラリが、すでに KSP をサポートしているかどうかを確認します。これは、多くの一般的なライブラリ( DaggerGlideRoomMoshi など)による支援も追加されています。

こちらのドキュメントでサポートされているライブラリのリストを確認できます。また、使用しているライブラリのドキュメントや Issue Tracker も参照してください。

KSP プラグインをプロジェクトに追加する

まず、最上位の build.gradle.kts ファイルで KSP プラグインを宣言します。 プロジェクトの Kotlin バージョンに適した KSP バージョンを選択してください。リリースのリストについては、KSP GitHub ページをご覧ください。

Kotlin

plugins {
    id("com.google.devtools.ksp") version "1.8.10-1.0.9" apply false
}

Groovy

plugins {
    id 'com.google.devtools.ksp' version '1.8.10-1.0.9' apply false
}

次に、モジュール レベルの build.gradle.kts ファイルで KSP を有効にします。

Kotlin

plugins {
    id("com.google.devtools.ksp")
}

Groovy

plugins {
    id 'com.google.devtools.ksp'
}

アノテーション プロセッサを KSP に置き換える

KSP を有効にすると、kapt を KSP に置き換えられます。ほとんどのライブラリでは、アノテーション プロセッサと KSP プロセッサが同じアーティファクトで出荷されるため、依存関係の宣言時に kapt を ksp に変更するだけで済みます。

Kotlin

dependencies {
    kapt("androidx.room:room-compiler:2.5.0")
    ksp("androidx.room:room-compiler:2.5.0")
}

Groovy

dependencies {
    kapt 'androidx.room:room-compiler:2.5.0'
    ksp 'androidx.room:room-compiler:2.5.0'
}

KSP に移行したら、プロジェクトを同期してビルドし、引き続き正しく動作することを確認します。

注意すべき一般的な問題は次のとおりです。

  • 一部のライブラリでは、kapt と KSP でサポートしている機能セットが異なる場合があります。移行後にコードが機能しない場合は、ライブラリのドキュメントを確認してください。
  • KSP は kapt よりも正確な Kotlin 型情報(null 可能性など)を把握しているため、KSP プロセッサのほうが型要件に正確に対応できます。そのためには、ビルドファイルの更新に加え、ソースコードも一部修正しなければならない場合があります。
  • これまでアノテーション プロセッサに引数を渡していたのであれば、場合によっては、今度は KSP に渡す必要があります。引数の形式は kapt と KSP で異なる場合があるので注意してください。詳細については、KSP のドキュメントと、使用しているライブラリのドキュメントをご覧ください。

kapt プラグインを削除する

モジュール内に kapt との依存関係がなくなったら、kapt プラグインを削除します。

プラグイン ブロックで kapt が宣言されている場合:

Kotlin

plugins {
    id("org.jetbrains.kotlin.kapt")
}

Groovy

plugins {
    id 'org.jetbrains.kotlin.kapt'
}

Groovy を使用して apply プラグイン構文を使用していた場合:

apply plugin: 'kotlin-kapt'

また、kapt に関連する残りの設定も削除します。

Kotlin

kapt {
    correctErrorTypes = true
    useBuildCache = true
}

Groovy

kapt {
    correctErrorTypes true
    useBuildCache true
}

参考情報