Kotlin 2.1.20の新機能
Kotlin 2.1.20がリリースされました!主なハイライトは以下の通りです。
- K2コンパイラの更新: 新しいkaptおよびLombokプラグインへの更新
- Kotlin Multiplatform: GradleのApplicationプラグインを置き換える新しいDSL
- Kotlin/Native: Xcode 16.3のサポートと新しいインライン化最適化
- Kotlin/Wasm: デフォルトのカスタムフォーマッタ、DWARFのサポート、Provider APIへの移行
- Gradleサポート: GradleのIsolated Projectsとの互換性、カスタムパブリケーションバリアント
- 標準ライブラリ: 共通のアトミック型、UUIDサポートの改善、新しい時間追跡機能
- Composeコンパイラ:
@Composable
関数の制限緩和とその他の更新 - ドキュメント: Kotlinドキュメントの注目すべき改善。
IDEサポート
2.1.20をサポートするKotlinプラグインは、最新のIntelliJ IDEAおよびAndroid Studioにバンドルされています。 IDEでKotlinプラグインを更新する必要はありません。 ビルドスクリプトでKotlinのバージョンを2.1.20に変更するだけです。
詳細については、新しいリリースへの更新を参照してください。
OSGiサポートを使用するプロジェクトにおけるKotlinアーティファクトのソースのダウンロード
kotlin-osgi-bundle
ライブラリのすべての依存関係のソースが、そのディストリビューションに含まれるようになりました。これにより、 IntelliJ IDEAはこれらのソースをダウンロードして、Kotlinシンボルのドキュメントを提供し、デバッグエクスペリエンスを向上させることができます。
Kotlin K2コンパイラ
新しいKotlin K2コンパイラに対するプラグインのサポートを改善し続けています。このリリースでは、新しいkaptおよびLombokプラグインの更新が含まれています。
新しいデフォルトのkaptプラグイン
Kotlin 2.1.20より、kaptコンパイラプラグインのK2実装がすべてのプロジェクトでデフォルトで有効になります。
JetBrainsチームは、Kotlin 1.9.20でK2コンパイラとともにkaptプラグインの新しい実装をリリースしました。 それ以来、私たちはK2 kaptの内部実装をさらに開発し、その動作をK1バージョンと同様にしつつ、 パフォーマンスも大幅に改善しました。
K2コンパイラでkaptを使用中に問題が発生した場合は、 一時的に以前のプラグイン実装に戻すことができます。
そのためには、プロジェクトのgradle.properties
ファイルに以下のオプションを追加してください。
kapt.use.k2=false
問題がありましたら、イシュートラッカーにご報告ください。
Lombokコンパイラプラグイン: `@SuperBuilder`のサポートと`@Builder`の更新
Kotlin Lombokコンパイラプラグインが@SuperBuilder
アノテーションをサポートし、クラス階層用のビルダーをより簡単に作成できるようになりました。以前は、KotlinでLombokを使用する開発者は、継承を扱う際にビルダーを手動で定義する必要がありました。@SuperBuilder
を使用すると、ビルダーが自動的にスーパークラスのフィールドを継承し、オブジェクト構築時にそれらを初期化できるようになります。
さらに、この更新にはいくつかの改善とバグ修正が含まれています。
@Builder
アノテーションがコンストラクタで動作するようになり、より柔軟なオブジェクト作成が可能になりました。詳細については、関連するYouTrackイシューを参照してください。- KotlinにおけるLombokのコード生成に関連するいくつかの問題が解決され、全体的な互換性が向上しました。詳細については、GitHub changelogを参照してください。
@SuperBuilder
アノテーションの詳細については、公式のLombokドキュメントを参照してください。
Kotlin Multiplatform: GradleのApplicationプラグインを置き換える新しいDSL
Gradle 8.7以降、Applicationプラグインは Kotlin Multiplatform Gradleプラグインと互換性がなくなりました。Kotlin 2.1.20では、同様の機能を実現するためのExperimentalな DSLが導入されました。新しいexecutable {}
ブロックは、JVMターゲットの実行タスクとGradleのディストリビューションを設定します。
ビルドスクリプトのexecutable {}
ブロックの前に、以下の@OptIn
アノテーションを追加してください。
@OptIn(ExperimentalKotlinGradlePluginApi::class)
例:
kotlin {
jvm {
@OptIn(ExperimentalKotlinGradlePluginApi::class)
binaries {
// Configures a JavaExec task named "runJvm" and a Gradle distribution for the "main" compilation in this target
executable {
mainClass.set("foo.MainKt")
}
// Configures a JavaExec task named "runJvmAnother" and a Gradle distribution for the "main" compilation
executable(KotlinCompilation.MAIN_COMPILATION_NAME, "another") {
// Set a different class
mainClass.set("foo.MainAnotherKt")
}
// Configures a JavaExec task named "runJvmTest" and a Gradle distribution for the "test" compilation
executable(KotlinCompilation.TEST_COMPILATION_NAME) {
mainClass.set("foo.MainTestKt")
}
// Configures a JavaExec task named "runJvmTestAnother" and a Gradle distribution for the "test" compilation
executable(KotlinCompilation.TEST_COMPILATION_NAME, "another") {
mainClass.set("foo.MainAnotherTestKt")
}
}
}
}
この例では、GradleのDistributionプラグインが、最初のexecutable {}
ブロックに適用されています。
問題が発生した場合は、イシュートラッカーにご報告いただくか、公開Slackチャンネルでお知らせください。
Kotlin/Native
Xcode 16.3のサポート
Kotlin 2.1.21以降、Kotlin/NativeコンパイラはXcodeの最新安定バージョンであるXcode 16.3をサポートします。 Xcodeを更新して、Appleオペレーティングシステム向けのKotlinプロジェクトの作業を続けることができます。
2.1.21リリースでは、Kotlin Multiplatformプロジェクトでコンパイルエラーを引き起こしていた関連するcinteropのイシューも修正されています。
新しいインライン化最適化
Kotlin 2.1.20では、実際のコード生成フェーズの前に実行される新しいインライン化最適化パスが導入されました。
Kotlin/Nativeコンパイラにおける新しいインライン化パスは、標準のLLVMインライナーよりも優れたパフォーマンスを発揮し、生成されたコードのランタイムパフォーマンスを向上させるはずです。
新しいインライン化パスは現在Experimentalです。試すには、 以下のコンパイラオプションを使用してください。
-Xbinary=preCodegenInlineThreshold=40
私たちの実験では、閾値を40トークン(コンパイラによって解析されるコード単位)に設定すると、コンパイル最適化にとって妥当な妥協点となることが示されています。私たちのベンチマークによると、これにより全体的なパフォーマンスが9.5%向上します。もちろん、他の値を試すこともできます。
バイナリサイズやコンパイル時間の増加を経験した場合は、YouTrack経由で問題を報告してください。
Kotlin/Wasm
このリリースでは、Kotlin/Wasmのデバッグとプロパティの使用が改善されています。カスタムフォーマッタが開発 ビルドでそのまま動作するようになり、DWARFデバッグはコードの検査を容易にします。さらに、Provider APIは Kotlin/WasmおよびKotlin/JSにおけるプロパティの使用を簡素化します。
カスタムフォーマッタがデフォルトで有効に
以前は、Kotlin/Wasmコードを扱う際にWebブラウザでのデバッグを改善するために、カスタムフォーマッタを手動で設定する必要がありました。
このリリースでは、開発ビルドでカスタムフォーマッタがデフォルトで有効になるため、追加のGradle設定は不要です。
この機能を使用するには、ブラウザの開発者ツールでカスタムフォーマッタが有効になっていることを確認するだけです。
Chrome DevToolsでは、Settings | Preferences | Consoleでカスタムフォーマッタのチェックボックスを見つけます。
Firefox DevToolsでは、Settings | Advanced settingsでカスタムフォーマッタのチェックボックスを見つけます。
この変更は主にKotlin/Wasmの開発ビルドに影響します。プロダクションビルドに特定の要件がある場合は、 それに応じてGradle設定を調整する必要があります。そのためには、wasmJs {}
ブロックに以下のコンパイラオプションを追加します。
// build.gradle.kts
kotlin {
wasmJs {
// ...
compilerOptions {
freeCompilerArgs.add("-Xwasm-debugger-custom-formatters")
}
}
}
Kotlin/WasmコードをデバッグするためのDWARFのサポート
Kotlin 2.1.20では、Kotlin/WasmでDWARF(debugging with arbitrary record format)のサポートが導入されました。
この変更により、Kotlin/Wasmコンパイラは生成されたWebAssembly (Wasm) バイナリにDWARFデータを埋め込むことができるようになります。 多くのデバッガや仮想マシンは、このデータを読み取ってコンパイルされたコードに関する洞察を提供できます。
DWARFは、主にスタンドアロンのWasm仮想マシン(VM)内でKotlin/Wasmアプリケーションをデバッグするのに役立ちます。この機能を 使用するには、Wasm VMとデバッガがDWARFをサポートしている必要があります。
DWARFのサポートにより、Kotlin/Wasmアプリケーションをステップ実行したり、変数を検査したり、コードの洞察を得ることができます。この機能を有効にするには、 以下のコンパイラオプションを使用してください。
-Xwasm-generate-dwarf
Kotlin/WasmおよびKotlin/JSプロパティのProvider APIへの移行
以前、Kotlin/WasmおよびKotlin/JS拡張機能のプロパティはミュータブル(var
)であり、ビルドスクリプトで直接代入されていました。
the<NodeJsExtension>().version = "2.0.0"
現在、プロパティはProvider APIを介して公開されており、 値を代入するには.set()
関数を使用する必要があります。
the<NodeJsEnvSpec>().version.set("2.0.0")
Provider APIは、値が遅延計算され、タスクの依存関係と適切に統合されることを保証し、ビルドパフォーマンスを向上させます。
この変更により、NodeJsEnvSpec
やYarnRootEnvSpec
などの*EnvSpec
クラスに有利な直接のプロパティ代入は非推奨になりました。
さらに、混乱を避けるためにいくつかのエイリアスタスクが削除されました。
Deprecated task | Replacement |
---|---|
wasmJsRun | wasmJsBrowserDevelopmentRun |
wasmJsBrowserRun | wasmJsBrowserDevelopmentRun |
wasmJsNodeRun | wasmJsNodeDevelopmentRun |
wasmJsBrowserWebpack | wasmJsBrowserProductionWebpack or wasmJsBrowserDistribution |
jsRun | jsBrowserDevelopmentRun |
jsBrowserRun | jsBrowserDevelopmentRun |
jsNodeRun | jsNodeDevelopmentRun |
jsBrowserWebpack | jsBrowserProductionWebpack or jsBrowserDistribution |
ビルドスクリプトでKotlin/JSまたはKotlin/Wasmのみを使用している場合、Gradleが自動的に代入を処理するため、何もアクションは必要ありません。
ただし、Kotlin Gradle Pluginをベースとしたプラグインをメンテナンスしており、そのプラグインがkotlin-dsl
を適用していない場合は、 プロパティの代入を.set()
関数を使用するように更新する必要があります。
Gradle
Kotlin 2.1.20はGradle 7.6.3から8.11までと完全に互換性があります。最新のGradle リリースまでのGradleバージョンも使用できます。ただし、そうすると非推奨の警告が表示されたり、新しいGradle機能の一部が動作しない可能性があることに注意してください。
このバージョンのKotlinには、Kotlin GradleプラグインのGradleのIsolated Projectsとの互換性、およびカスタムGradleパブリケーションバリアントのサポートが含まれています。
GradleのIsolated Projectsと互換性のあるKotlin Gradleプラグイン
この機能は現在、Gradleでプレアルファ(pre-Alpha)状態です。JSおよびWasmターゲットは現在サポートされていません。 Gradleバージョン8.10以降でのみ、評価目的でご利用ください。
Kotlin 2.1.0以降、プロジェクトでGradleのIsolated Projects機能をプレビューできるようになりました。
以前は、この機能を試す前に、Kotlin Gradleプラグインを設定してプロジェクトをIsolated Projects機能と互換性があるようにする必要がありました。Kotlin 2.1.20では、この追加の手順は不要になりました。
現在、Isolated Projects機能を有効にするには、システムプロパティを設定するだけで済みます。
GradleのIsolated Projects機能は、マルチプラットフォームプロジェクトと、JVMまたはAndroidターゲットのみを含むプロジェクトの両方で、Kotlin Gradleプラグインでサポートされています。
特にマルチプラットフォームプロジェクトの場合、アップグレード後にGradleビルドで問題が発生した場合は、 以下の行を追加することで新しいKotlin Gradleプラグインの動作をオプトアウトできます。
kotlin.kmp.isolated-projects.support=disable
ただし、マルチプラットフォームプロジェクトでこのGradleプロパティを使用すると、Isolated Projects機能は使用できません。
この機能に関するご意見は、YouTrackでお知らせください。
カスタムGradleパブリケーションバリアントの追加のサポート
この機能では、既存のGradleバリアントを変更することはできません。
この機能はExperimentalです。 オプトインするには、@OptIn(ExperimentalKotlinGradlePluginApi::class)
アノテーションを使用します。
カスタムGradleパブリケーションバリアントを追加するには、adhocSoftwareComponent()
関数を呼び出します。この関数は、 Kotlin DSLで設定可能なAdhocComponentWithVariants
のインスタンスを返します。
plugins {
// Only JVM and Multiplatform are supported
kotlin("jvm")
// or
kotlin("multiplatform")
}
kotlin {
@OptIn(ExperimentalKotlinGradlePluginApi::class)
publishing {
// Returns an instance of AdhocSoftwareComponent
adhocSoftwareComponent()
// Alternatively, you can configure AdhocSoftwareComponent in the DSL block as follows
adhocSoftwareComponent {
// Add your custom variants here using the AdhocSoftwareComponent API
}
}
}
バリアントの詳細については、Gradleのカスタマイズパブリッシングガイドを参照してください。
標準ライブラリ
このリリースでは、共通のアトミック型、UUIDサポートの改善、新しい時間追跡機能といった、標準ライブラリの新しいExperimental機能が導入されています。
共通のアトミック型
Kotlin 2.1.20では、標準ライブラリのkotlin.concurrent.atomics
パッケージに共通のアトミック型が導入され、 スレッドセーフな操作のための共有されたプラットフォーム非依存のコードが可能になります。これにより、 ソースセット間でアトミック依存ロジックを重複させる必要がなくなり、Kotlin Multiplatformプロジェクトの開発が簡素化されます。
kotlin.concurrent.atomics
パッケージとそのプロパティはExperimentalです。 オプトインするには、@OptIn(ExperimentalAtomicApi::class)
アノテーションまたはコンパイラオプション-opt-in=kotlin.ExperimentalAtomicApi
を使用します。
以下は、AtomicInt
を使用して複数のスレッド間で処理済みアイテムを安全にカウントする方法を示す例です。
// Imports the necessary libraries
import kotlin.concurrent.atomics.*
import kotlinx.coroutines.*
@OptIn(ExperimentalAtomicApi::class)
suspend fun main() {
// Initializes the atomic counter for processed items
var processedItems = AtomicInt(0)
val totalItems = 100
val items = List(totalItems) { "item$it" }
// Splits the items into chunks for processing by multiple coroutines
val chunkSize = 20
val itemChunks = items.chunked(chunkSize)
coroutineScope {
for (chunk in itemChunks) {
launch {
for (item in chunk) {
println("Processing $item in thread ${Thread.currentThread()}")
processedItems += 1 // Increment counter atomically
}
}
}
}
// Prints the total number of processed items
println("Total processed items: ${processedItems.load()}")
}
Kotlinのアトミック型とJavaのjava.util.concurrent.atomic
アトミック型とのシームレスな相互運用を可能にするために、APIは.asJavaAtomic()
および.asKotlinAtomic()
拡張関数を提供します。JVM上では、Kotlinのアトミック型とJavaのアトミック型はランタイムで同じ型であるため、オーバーヘッドなしでJavaのアトミック型をKotlinのアトミック型に、またはその逆に変換できます。
以下は、KotlinとJavaのアトミック型が連携して動作する方法を示す例です。
// Imports the necessary libraries
import kotlin.concurrent.atomics.*
import java.util.concurrent.atomic.*
@OptIn(ExperimentalAtomicApi::class)
fun main() {
// Converts Kotlin AtomicInt to Java's AtomicInteger
val kotlinAtomic = AtomicInt(42)
val javaAtomic: AtomicInteger = kotlinAtomic.asJavaAtomic()
println("Java atomic value: ${javaAtomic.get()}")
// Java atomic value: 42
// Converts Java's AtomicInteger back to Kotlin's AtomicInt
val kotlinAgain: AtomicInt = javaAtomic.asKotlinAtomic()
println("Kotlin atomic value: ${kotlinAgain.load()}")
// Kotlin atomic value: 42
}
UUIDのパース、フォーマット、比較可能性の変更
JetBrainsチームは、2.0.20で標準ライブラリに導入されたUUIDのサポートを改善し続けています。
以前は、parse()
関数は16進数とダッシュ形式のUUIDのみを受け入れていました。Kotlin 2.1.20では、 16進数とダッシュ形式 および プレーンな16進数形式(ダッシュなし)の 両方 にparse()
を使用できます。
このリリースでは、16進数とダッシュ形式での操作に特化した関数も導入されました。
parseHexDash()
は、16進数とダッシュ形式からUUIDをパースします。toHexDashString()
は、Uuid
を16進数とダッシュ形式のString
に変換します(toString()
の機能をミラーリング)。
これらの関数は、以前16進数形式のために導入されたparseHex()
およびtoHexString()
と同様に機能します。 パースおよびフォーマット機能の明示的な命名は、コードの明確性とUUIDの全体的なエクスペリエンスを向上させるはずです。
KotlinのUUIDはComparable
になりました。Kotlin 2.1.20以降、Uuid
型の値を直接比較したりソートしたりできます。 これにより、<
および>
演算子、およびComparable
型またはそのコレクション(sorted()
など)専用に利用可能な標準ライブラリの拡張機能の使用が可能になり、 また、Comparable
インターフェースを必要とするあらゆる関数やAPIにUUIDを渡すこともできます。
標準ライブラリにおけるUUIDのサポートはまだExperimentalであることに注意してください。 オプトインするには、@OptIn(ExperimentalUuidApi::class)
アノテーションまたはコンパイラオプション-opt-in=kotlin.uuid.ExperimentalUuidApi
を使用します。
import kotlin.uuid.ExperimentalUuidApi
import kotlin.uuid.Uuid
@OptIn(ExperimentalUuidApi::class)
fun main() {
// parse() accepts a UUID in a plain hexadecimal format
val uuid = Uuid.parse("550e8400e29b41d4a716446655440000")
// Converts it to the hex-and-dash format
val hexDashFormat = uuid.toHexDashString()
// Outputs the UUID in the hex-and-dash format
println(hexDashFormat)
// Outputs UUIDs in ascending order
println(
listOf(
uuid,
Uuid.parse("780e8400e29b41d4a716446655440005"),
Uuid.parse("5ab88400e29b41d4a716446655440076")
).sorted()
)
}
新しい時間追跡機能
Kotlin 2.1.20以降、標準ライブラリは時刻の瞬間を表す機能を提供します。この機能は 以前は公式Kotlinライブラリであるkotlinx-datetime
でのみ利用可能でした。
kotlinx.datetime.Clock
インターフェースは 標準ライブラリにkotlin.time.Clock
として導入され、kotlinx.datetime.Instant
クラスは kotlin.time.Instant
として導入されました。これらの概念は、より複雑なカレンダーやタイムゾーン機能がkotlinx-datetime
に残るのに対し、 時刻の瞬間にのみ関心があるため、標準ライブラリのtime
パッケージと自然に整合します。
Instant
とClock
は、タイムゾーンや日付を考慮せずに正確な時間追跡が必要な場合に役立ちます。例えば、 タイムスタンプ付きでイベントを記録したり、2つの時点間の期間を測定したり、システムプロセス用の現在の 瞬間を取得したりするのに使用できます。
他の言語との相互運用性を提供するために、追加の変換関数が利用可能です。
.toKotlinInstant()
は、時刻値をkotlin.time.Instant
インスタンスに変換します。.toJavaInstant()
は、kotlin.time.Instant
値をjava.time.Instant
値に変換します。Instant.toJSDate()
は、kotlin.time.Instant
値をJSDate
クラスのインスタンスに変換します。この変換は 正確ではありません。JSは日付を表すのにミリ秒精度を使用しますが、Kotlinはナノ秒解像度を許容します。
標準ライブラリの新しい時間機能はまだExperimentalです。 オプトインするには、@OptIn(ExperimentalTime::class)
アノテーションを使用します。
import kotlin.time.*
@OptIn(ExperimentalTime::class)
fun main() {
// Get the current moment in time
val currentInstant = Clock.System.now()
println("Current time: $currentInstant")
// Find the difference between two moments in time
val pastInstant = Instant.parse("2023-01-01T00:00:00Z")
val duration = currentInstant - pastInstant
println("Time elapsed since 2023-01-01: $duration")
}
実装に関する詳細情報は、このKEEP提案を参照してください。
Composeコンパイラ
2.1.20では、Composeコンパイラは以前のリリースで導入された@Composable
関数に対する一部の制限を緩和します。 さらに、ComposeコンパイラのGradleプラグインは、Androidとのすべてのプラットフォームでの動作を合わせるため、 ソース情報をデフォルトで含めるように設定されています。
openな@Composable
関数におけるデフォルト値を持つパラメーターのサポート
以前、コンパイラは、不正確なコンパイラ出力により、ランタイムでクラッシュを引き起こす可能性があったため、open
な@Composable
関数におけるデフォルト値を持つパラメーターを制限していました。この根本的な問題は解決され、Kotlin 2.1.20以降で使用する場合、デフォルト値を持つパラメーターは完全にサポートされます。
Composeコンパイラは、バージョン1.5.8より前にopen
な関数でデフォルト値を持つパラメーターを許可していたため、 そのサポートはプロジェクト構成に依存します。
open
なコンポーザブル関数がKotlinバージョン2.1.20以降でコンパイルされた場合、コンパイラはデフォルト値を持つパラメーターに対して正しいラッパーを生成します。これには、1.5.8より前のバイナリと互換性のあるラッパーが含まれ、ダウンストリームライブラリもこのopen
関数を使用できるようになります。open
なコンポーザブル関数がKotlin 2.1.20より古いバージョンでコンパイルされた場合、Composeは互換性モードを使用し、ランタイムでクラッシュが発生する可能性があります。互換性モードを使用している場合、コンパイラは潜在的な問題を強調するために警告を発します。
finalでオーバーライドされた関数は再起動可能に
仮想関数(インターフェースを含むopen
およびabstract
のオーバーライド)は、2.1.0リリースで再起動不可とされていました。 この制限は、final
クラスのメンバーであるか、それ自体がfinal
である関数に対して緩和され、 通常どおり再起動またはスキップされます。
Kotlin 2.1.20にアップグレードした後、影響を受ける関数でいくつかの動作変更が見られるかもしれません。以前のバージョンの再起動不可ロジックを強制するには、 関数に@NonRestartableComposable
アノテーションを適用してください。
ComposableSingletons
が公開APIから削除
ComposableSingletons
は、@Composable
ラムダを最適化する際にComposeコンパイラによって作成されるクラスです。 パラメーターをキャプチャしないラムダは一度割り当てられ、クラスのプロパティにキャッシュされるため、ランタイムでのアロケーションを節約します。 このクラスは内部可視性で生成され、コンパイル単位(通常はファイル)内のラムダを最適化することのみを目的としています。
しかし、この最適化はinline
関数本体にも適用され、シングルトンラムダインスタンスが 公開APIに漏洩するという問題を引き起こしていました。この問題を解決するため、2.1.20以降、@Composable
ラムダは インライン関数内でシングルトンに最適化されなくなりました。同時に、Composeコンパイラは、 以前のモデルでコンパイルされたモジュールのバイナリ互換性をサポートするために、 インライン関数用のシングルトンクラスとラムダの生成を継続します。
ソース情報がデフォルトで含まれるように
ComposeコンパイラGradleプラグインは、Androidではすでにソース情報を含める機能がデフォルトで有効になっています。 Kotlin 2.1.20以降、この機能はすべてのプラットフォームでデフォルトで有効になります。
このオプションをfreeCompilerArgs
を使用して設定していないか確認してください。この方法は、 プラグインと併用された場合に、オプションが事実上2回設定されることになり、ビルドが失敗する原因となる可能性があります。
破壊的変更と非推奨
- Kotlin MultiplatformをGradleの今後の変更に合わせるため、
withJava()
関数を段階的に廃止しています。 Javaソースセットはデフォルトで作成されるようになりました。JavaテストフィクスチャGradleプラグインを使用している場合は、 互換性の問題を避けるため、直接Kotlin 2.1.21にアップグレードしてください。 - JetBrainsチームは
kotlin-android-extensions
プラグインの非推奨化を進めています。プロジェクトでこれを使用しようとすると、 設定エラーが発生し、プラグインコードは実行されなくなります。 - レガシープロパティ
kotlin.incremental.classpath.snapshot.enabled
がKotlin Gradleプラグインから削除されました。 このプロパティは、JVMで組み込みのABIスナップショットにフォールバックする機会を提供していました。現在、プラグインは 不要な再コンパイルを検出して回避するために他の方法を使用しており、このプロパティは廃止されました。
ドキュメントの更新
Kotlinドキュメントにはいくつかの注目すべき変更が加えられました。
改良されたページと新しいページ
- Kotlinロードマップ – Kotlinの言語とエコシステムの進化における優先順位の更新されたリストをご覧ください。
- Gradleのベストプラクティスページ – Gradleビルドを最適化し、パフォーマンスを向上させるための重要なベストプラクティスを学びましょう。
- Compose MultiplatformとJetpack Compose – 2つのUIフレームワーク間の関係の概要。
- Kotlin MultiplatformとFlutter – 2つの人気のあるクロスプラットフォームフレームワークの比較をご覧ください。
- Cとの相互運用 – KotlinとCの相互運用の詳細を探りましょう。
- 数値型 – 数値を表現するためのさまざまなKotlin型について学びましょう。
新しく更新されたチュートリアル
- Maven Centralにライブラリを公開する – 最も人気のあるMavenリポジトリにKMPライブラリアーティファクトを公開する方法を学びましょう。
- Kotlin/Nativeを動的ライブラリとして使用する – 動的Kotlinライブラリを作成します。
- Kotlin/NativeをAppleフレームワークとして使用する – 独自のフレームワークを作成し、macOSおよびiOS上のSwift/Objective-CアプリケーションからKotlin/Nativeコードを使用します。
Kotlin 2.1.20へのアップデート方法
IntelliJ IDEA 2023.3およびAndroid Studio Iguana (2023.2.1) Canary 15以降、KotlinプラグインはIDEにバンドルされた プラグインとして配布されます。これは、JetBrains Marketplaceからプラグインをインストールできなくなったことを意味します。
新しいKotlinバージョンに更新するには、ビルドスクリプトでKotlinのバージョンを2.1.20に変更してください。