メインコンテンツまでスキップ

KSP FAQ

KSP を選ぶ理由

KSP には、kapt よりもいくつかの利点があります。

  • より高速です。
  • Kotlin ユーザーにとって API がより使いやすいです。
  • 生成された Kotlin ソースに対する複数ラウンド処理をサポートしています。
  • マルチプラットフォームとの互換性を考慮して設計されています。

KSP はなぜ kapt より高速なのですか?

kapt は、Java スタブを生成するためにすべての型参照を解析して解決する必要がありますが、KSP は必要に応じて参照を解決します。 javac に委譲するのにも時間がかかります。

さらに、KSP のインクリメンタル処理モデルは、分離と集約だけでなく、より細かい粒度を持っています。 すべてを再処理することを避ける機会がより多くあります。また、KSP はシンボルの解決を動的に追跡するため、ファイル内の変更が他のファイルを汚染する可能性が低くなり、再処理されるファイルのセットが小さくなります。これは、kapt が処理を javac に委譲するため不可能です。

KSP は Kotlin 固有のものですか?

KSP は Java ソースも処理できます。API は統一されており、Java クラスと Kotlin クラスを解析すると、KSP で統一されたデータ構造が得られます。

KSP はどのようにアップグレードしますか?

KSP には API と実装があります。API はほとんど変更されず、下位互換性があります。新しいインターフェースが追加されることはありますが、古いインターフェースが変更されることはありません。実装は特定のコンパイラバージョンに関連付けられています。新しいリリースでは、サポートされるコンパイラバージョンが変更される可能性があります。

プロセッサは API のみに依存するため、コンパイラバージョンに関連付けられていません。 ただし、プロセッサのユーザーは、プロジェクトでコンパイラバージョンを上げる際に KSP バージョンを上げる必要があります。 そうしないと、次のエラーが発生します。

ksp-a.b.c is too old for kotlin-x.y.z. Please upgrade ksp or downgrade kotlin-gradle-plugin
注記

プロセッサのユーザーは、プロセッサが API のみに依存するため、プロセッサのバージョンを上げる必要はありません。

たとえば、一部のプロセッサが KSP 1.0.1 でリリースおよびテストされ、Kotlin 1.6.0 に厳密に依存しているとします。 Kotlin 1.6.20 で動作させるために必要なのは、Kotlin 1.6.20 用にビルドされたバージョン(たとえば、KSP 1.1.0)に KSP を上げることだけです。

古い Kotlin コンパイラで新しい KSP 実装を使用できますか?

言語バージョンが同じ場合、Kotlin コンパイラは下位互換性があるはずです。 Kotlin コンパイラを上げることは、ほとんどの場合、簡単です。新しい KSP 実装が必要な場合は、それに応じて Kotlin コンパイラをアップグレードしてください。

KSP はどのくらいの頻度で更新されますか?

KSP は、可能な限りSemantic Versioning に準拠しようとしています。 KSP バージョン major.minor.patch では、

  • major は、互換性のない API の変更のために予約されています。これに対する事前定義されたスケジュールはありません。
  • minor は、新機能のために予約されています。これは、およそ四半期ごとに更新される予定です。
  • patch は、バグ修正と新しい Kotlin リリースのために予約されています。これは、ほぼ毎月更新されます。

通常、新しい Kotlin バージョンがリリースされてから数日以内に、対応する KSP リリースが利用可能になります。 プレリリース(Beta または RC)も含まれます。

Kotlin の他に、ライブラリに必要なバージョンはありますか?

ライブラリ/インフラストラクチャの要件のリストを次に示します。

  • Android Gradle Plugin 7.1.3+
  • Gradle 6.8.3+

KSP の今後のロードマップは何ですか?

次の項目が計画されています。

  • 新しい Kotlin コンパイラのサポート
  • マルチプラットフォームのサポートを改善します。たとえば、ターゲットのサブセットで KSP を実行したり、ターゲット間で計算を共有したりします。
  • パフォーマンスを向上させます。行うべき最適化がたくさんあります!
  • バグを修正し続けます。

何かアイデアがあれば、お気軽にKotlin Slack の #ksp チャンネルにご連絡ください。 (招待状を入手する) GitHub issues/feature requestsを提出したり、プルリクエストを送信したりすることも歓迎します。