Skip to content

KSP に関するよくある質問

KSP はなぜ必要なのか?

KSP には、kapt に比べていくつかの利点があります。

  • 高速です。
  • API が Kotlin ユーザーにとってより直感的です。
  • 生成された 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 バージョンを上げる必要があります。 そうしないと、次のエラーが発生します。

text
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 で動作させるには、KSP を Kotlin 1.6.20 用にビルドされたバージョン(例えば KSP 1.1.0)に上げるだけです。

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

言語バージョンが同じであれば、Kotlin コンパイラは後方互換性があるとされています。 Kotlin コンパイラのバージョンアップはほとんどの場合、容易なはずです。より新しい KSP 実装が必要な場合は、Kotlin コンパイラをそれに合わせてアップグレードしてください。

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

KSP はセマンティックバージョニングに可能な限り従うようにしています。 KSP のバージョンが major.minor.patch の場合、

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

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

Kotlin 以外に、ライブラリのバージョン要件はありますか?

以下は、ライブラリ/インフラストラクチャの要件リストです。

  • Android Gradle Plugin 7.1.3+
  • Gradle 6.8.3+

KSP の今後のロードマップは?

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

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

ご意見がある場合は、お気軽に Kotlin Slack の #ksp チャンネル招待状を入手する)までご連絡ください。GitHub の issue/機能リクエスト の提出やプルリクエストも歓迎します!