BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース Kotlin/NativeとKAPIが改善されたKotlin 1.3.30

Kotlin/NativeとKAPIが改善されたKotlin 1.3.30

原文(投稿日:2019/04/29)へのリンク

JetBrainsがKotlin 1.3.30をリリースした。Kotlin 1.3での新たなバグの修正と、ツーリングのアップデートを中心に、Kotlin/NativeとKAPTの改良、符号なし型や配列に関するオペレーションのサポート、IntelliJ IDEAでのデバッグ改良などが行われている。

Kotlin/Nativeは、Windows 32bitターゲット(mingw_x86)をサポートする。さらに、macOSとWindowsのユーザは、Kotlin/NativeプログラムをLinux x86-64、arm32、Android、Raspberry PIデバイスにクロスコンパイルすることもできる。

Appleプラットフォームは、Kotlin/Nativeからいくつかの改良が行われている。例外に関して、未処理の例外がiOSのクラッシュログに記録されるようになった。また、デバッグモードでは、例外のバックトレースにiOSとmacOSに関するシンボル情報が含まれるようになった。

Apple関連の開発では、-Xstatic-frameworkコマンドラインパラメータを指定するか、マルチプラットフォームプロジェクトで以下のGradleスクリプトを使用することで、静的なフレームワークの生成も可能になった。

kotlin {
    macosX64 {
        binaries {
            framework {
                isStatic = true
            }
        }
    }
}

Gradleプラグインを使用すれば、CocoaPodとの統合を実現する実験的機能を利用することも可能だ。この機能は、Kotlin/Nativeプロジェクトを.podfile依存関係に変換して、Podfileにインクルード可能にする。これによって開発者は、XCodeでSwiftやObjective-Cのpodを使用する場合と同じエクスペリエンスを持つことができる。さらに、CocoaPodの依存関係をKotlin/Nativeプロジェクトにインポートすることも可能だ。その機能を担当するgradleプラグインが、フレームワークをKotlin/Nativeプロジェクトにインポートするために必要な、すべての設定を処理してくれる。

// Apply plugins.
plugins {
    id("org.jetbrains.kotlin.multiplatform") version "1.3.30"
    /// the new plugin for CocoaPods support
    id("org.jetbrains.kotlin.native.cocoapods") version "1.3.30"
}

// CocoaPods requires the podspec to have a version.
version = "1.0"

kotlin {
    cocoapods {
        summary = "a Kotlin/Native module"
        homepage = "homepage"

        pod("AFNetworking", "~> 3.2.0")
    }
}

既存のXcodeプロジェクトにKotlin/Nativeモジュールをインポートするには、次のような手順が必要となる。

  • CocoaPodがインストールされていることを確認する
  • gladleプロジェクトを次のように設定する - org.jetbrains.kotlin.native.cocoapodsプラグインの適用、ターゲットの追加と設定、必要なpodspecフィールドの指定
  • podspecタスクを実行すると、上記のpodspecファイルが生成される
  • XcodeプロジェクトのPodfileに、生成されたpodspecへの参照を追加する
    target 'my-ios-app' do
        pod 'my_kotlin_library', :path => 'path/to/my-kotlin-library'
    end
    
  • Xcodeプロジェクトに対して、pod installを実行する

KAPTコンパイラプラグインによってすでにKotlinでサポートされていた、アノテーションプロセッサ(JSR 269)が改善された。今回のKAPTでは、インクリメンタルアノテーションプロセッサを可能にする実験的機能がサポートされている。試用を望む開発者は、gradle.propertiesに次の定義を追加する必要がある。

kapt.incremental.apt=true

KAPTに関するもうひとつの興味深い機能は、メソッド本体のみが変更された場合にアノテーション処理をスキップするCompile Avoidanceだ。この機能は、すべてのKAPT依存関係がアノテーション処理クラスパスで明示的に宣言されている場合にのみ可能となる。Compile Avoidanceを有効にするには、 gradle.propertiesに次の定義を追加する。

kapt.include.compile.classpath=false

Kotlin 1.3.30では、符号なし型、および符号なしタイプの配列を対象とした、新たなオペレーションがサポートされている。


fun main() {
    val u1 = 2_147_483_649u
    val u2 = 4_000_000_000u
    println(u1.toDouble())
    println(minOf(u1, u2))

    val array: UIntArray = uintArrayOf(u1, u2)
    println(array.max())
    println(array.all { it > Int.MAX_VALUE.toUInt() })
}

符号なし配列はCollectionを実装している(例えばUIntArrayではCollection<UInt>)ので、filtermapのような操作が可能である。

Kotlin 1.3.30では、IntelliJ IDEAによるサポートが改善され、コルーチンを簡単にデバッグできるようになった。独立した"Async stack trace"に、中断時に格納されていた変数が表示される。

IntelliJ IDEAでのデバッグに関する、もうひとつの改善点は"Kotlin"モードだ。これによって開発者は、付加的なJVM名ではなく、Kotlinの名称で変数を参照することが可能になる。


(画像はhttps://blog.jetbrains.comより)

IntelliJ IDEAに関して注目すべき機能とバグ修正には、他に次のものがある。

  • isEmpty/isNotEmptyメソッドの否定に代わるインテンションが追加された。例: isEmpty() -> isNotEmpty()、!isNotEmpty() -> isEmpty()
  • Collection.count()から.sizeへのリプレースがインスペクション + quickfixに追加された。例: listOf(1,2).count() -> listOf(1,2).size
  • Java 8のMap.forEachをKotlinのforEachに置き換えるインスペクションが追加された。
  • 冗長なrequireNotNullおよびcheckNotNullの使用法に関する警告が追加された。
  • KT elvis式のデバッガでの評価の誤りが修正された。
  • Multiline TODOコメントのサポート。

変更点の全リストはchangelogにある。Kotlin 1.3.30にアップデートするには、IntelliJ IDEAおよびAndroid Studioのユーザは、Tools>Kotlin>Configure Kotlin Plugin Updatesを選択して、"Check for updates now"をクリックすればよい。Eclipseユーザは、 Marketplaceを使用してプラグインをインストールするか、あるいはmaven、Gradle、npmからのアップデートで、コンパイラおよび標準ライブラリのバージョン番号に1.3.30を指定する必要がある。詳細な資料はこちらから入手可能だ。

この記事に星をつける

おすすめ度
スタイル

BT