0Pricing
Kotlin Academy · レッスン

GradleビルドへのKSPプロセッサーの統合

GradleでKSPを設定し、生成ソースを追加して、プロセッサーの出力をデバッグします。

「GradleビルドへのKSPプロセッサーの統合」はCoddyKit上の無料Kotlin Academyレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはKotlin Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Kotlin Academyコースには全4レッスンが含まれています。

マルチモジュール構成

一般的なKSPセットアップには、少なくとも2つのモジュールがあります。:annotation(アノテーションクラスを含む)と、SymbolProcessorを含む :processor です。利用側のモジュールではKSPプラグインを適用し、ksp と implementation の依存関係を宣言します。

KSPプラグインの適用

利用側モジュールの build.gradle.kts で次のように設定します。

plugins {
    kotlin("jvm")  // or android, multiplatform
    id("com.google.devtools.ksp") version "2.0.0-1.0.21"
}

ksp依存関係の宣言

KSPプロセッサを追加するには、implementation ではなく ksp 構成を使用します。プロセッサはビルド時にのみ実行され、最終成果物には含まれません。

dependencies {
    implementation(project(":annotation"))
    ksp(project(":processor"))
}

生成ソースディレクトリ

KSPは生成ファイルを build/generated/ksp/<sourceSet>/kotlin/ 以下に書き込みます。KSPプラグインはこれらのディレクトリをKotlinのソースセットに自動的に追加するため、手動で設定しなくても生成されたクラスをコードから参照できます。

プロセッサへのオプションの渡し方

ksp { arg("key", "value") } を使用すると、ビルド時のオプションをGradleからプロセッサに渡せます。プロセッサでは environment.options["key"] を使用して読み取ります。

// build.gradle.kts (consumer)
ksp {
    arg("generateMocks", "true")
    arg("outputPackage", "com.example.generated")
}

プロセッサでのオプションの読み取り

SymbolProcessorProvider.create() メソッドでは、環境からオプションにアクセスします。

class MyProcessorProvider : SymbolProcessorProvider {
    override fun create(environment: SymbolProcessorEnvironment): SymbolProcessor {
        val genMocks = environment.options["generateMocks"] == "true"
        return MyProcessor(environment.codeGenerator, environment.logger, genMocks)
    }
}

インクリメンタルビルド

KSPは入力と出力の依存関係を追跡します。codeGenerator.createNewFile() を呼び出す際に、生成する各ファイルを元のシンボルに関連付けてください。これにより、追跡対象の入力に変更がなければ、KSPは再処理をスキップします。

val deps = Dependencies(aggregating = false, *symbols.map { it.containingFile!! }.toTypedArray())
codeGenerator.createNewFile(deps, packageName, fileName)

AndroidでのKSP

Androidプロジェクトでは、プラグインと依存関係の宣言の両方で kapt を ksp に置き換えます。ビルドタイプごとにプロセッサの動作を変える必要がある場合は、kspDebug や kspRelease など、バリアント対応の構成を使用します。

Kotlin MultiplatformでのKSP

KMPプロジェクトでは、KSPプラグインを適用し、プロセッサが対応するターゲットに応じて、add(kotlinCompilation.defaultSourceSetName + "ksp", project(":processor")) または簡略記法の kspCommonMainMetadata、kspJvmMain などを使用します。

生成ファイルの表示

./gradlew build(Androidの場合は kspKotlin または kspDebugKotlin)を実行した後、build/generated/ksp/ を確認します。IntelliJとAndroid Studioはこれらのフォルダーを生成ソースとしてマークし、使用箇所から生成された宣言へ移動できるようにします。

プロセッサのデバッグ

Gradleタスクを --debug 付きで実行するか、ksp 構成に jvmArgs("-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5005") を追加して、アノテーション処理用JVMにリモートデバッガーを接続します。

確認問題

ビルド時に実行されるものの、実行時のクラスパスには含まれないKSPプロセッサを追加するには、どのGradle構成を使用しますか。

振り返り:KSPのGradleビルドへの統合

要点:

  • com.google.devtools.ksp プラグインを適用し、ksp() 依存関係でプロセッサを追加します
  • 生成ソースは build/generated/ksp/ に配置され、ソースセットに自動的に追加されます
  • Gradleから ksp { arg() } でオプションを渡し、environment.options で読み取ります
  • 正確なインクリメンタル再ビルドのため、createNewFile() と Dependencies を使用します
  • Android(バリアント構成)とKotlin Multiplatformに対応しています

よくある質問

「GradleビルドへのKSPプロセッサーの統合」レッスンは無料ですか?

はい。「GradleビルドへのKSPプロセッサーの統合」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Kotlin Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Kotlin Academyコースには全4レッスンが含まれています。

「GradleビルドへのKSPプロセッサーの統合」で何を学びますか?

GradleでKSPを設定し、生成ソースを追加して、プロセッサーの出力をデバッグします。 ブラウザで直接実行するハンズオンコードでKotlin Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Kotlin Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのKotlin Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。

「GradleビルドへのKSPプロセッサーの統合」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このKotlin Academyレッスンでコードを書いて実行できますか?

はい。すべてのKotlin Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. KSPとKAPT:KSPが高速な理由
  2. 最初のSymbolProcessorを作成する
  3. KotlinPoetによるKotlinソースファイルの生成
  4. GradleビルドへのKSPプロセッサーの統合
← Kotlin Academyに戻る