Kotlin Multiplatformライブラリの作成 - チュートリアル
このチュートリアルではIntelliJ IDEAを使用しますが、Android Studioでも同様に進めることができます。どちらのIDEもコア機能とKotlin Multiplatformのサポートを共有しています。
このチュートリアルでは、IntelliJ IDEAでマルチプラットフォームライブラリを作成し、ローカルのMavenリポジトリに公開し、別のプロジェクトで依存関係として追加する方法を学びます。
このチュートリアルは、フィボナッチ数列を生成する関数を含むシンプルなライブラリである、当社のマルチプラットフォームライブラリテンプレートに基づいています。
環境をセットアップする
必要なツールをすべてインストールし、最新バージョンに更新します。
プロジェクトを作成する
IntelliJ IDEAで、File | New | Project from Version Control を選択します。
マルチプラットフォームライブラリテンプレートプロジェクトのURLを入力します。
texthttps://github.com/Kotlin/multiplatform-library-template
Clone をクリックします。
プロジェクト構造を確認する
Kotlin Multiplatformライブラリテンプレートプロジェクトは、Kotlin Multiplatformライブラリを開発するための基礎的な構造を提供します。このテンプレートは、様々なプラットフォームで動作するライブラリの作成に役立ちます。
テンプレートプロジェクトでは、library
がコアモジュールとして機能し、Multiplatformライブラリのメインソースコードとビルドリソースを含んでいます。
library
モジュールは、共有コードとプラットフォーム固有の実装を収容するように構築されています。その主要なソースコード (src
) の内容は次のとおりです。
commonMain
: すべてのターゲットプラットフォームで共有されるKotlinコードが含まれています。ここでは、プラットフォーム固有のAPIに依存しないコードを配置します。androidMain
、iosMain
、jvmMain
、linuxX64Main
: Android、iOS、JVM、Linuxプラットフォーム固有のコードが含まれています。ここでは、これらのプラットフォームに固有の機能を実装します。commonTest
、androidUnitTest
、iosTest
、jvmTest
、linuxX64Test
: 共有されたcommonMain
コードのテストと、それぞれAndroid、iOS、JVM、Linuxプラットフォームに固有のテストが含まれています。
すべてのプラットフォームで共有される library
コードに焦点を当てましょう。src/commonMain/kotlin
ディレクトリ内には、フィボナッチ数列ジェネレーターを定義するKotlin Multiplatformコードを含む CustomFibi.kt
ファイルがあります。
package io.github.kotlin.fibonacci
// Defines the function to generate the Fibonacci sequence
fun generateFibi() = sequence {
var a = firstElement
yield(a)
var b = secondElement
yield(b)
while (true) {
val c = a + b
yield(c)
a = b
b = c
}
}
// Declares the expected values for `firstElement` and `secondElement`
expect val firstElement: Int
expect val secondElement: Int
firstElement
と secondElement
プロパティは、プラットフォーム固有のコードが実装できるプレースホルダーです。 各ターゲットは、それぞれのソースセットで actual
キーワードを使用して実際の値を提供する必要があります。
expect
宣言は、actual
実装とマッチングされます。 このメカニズムは、プラットフォーム固有の動作を必要とするクロスプラットフォームコードを作成する際に役立ちます。
このケースでは、マルチプラットフォームライブラリテンプレートには firstElement
と secondElement
プロパティのプラットフォーム固有の実装が含まれています。androidMain
、iosMain
、jvmMain
、linuxX64Main
ディレクトリには、これらのプロパティに値を提供する actual
宣言が含まれています。
例えば、androidMain/kotlin/fibiprops.android.kt
に含まれるAndroidの実装は次のとおりです。
package io.github.kotlin.fibonacci
actual val firstElement: Int = 1
actual val secondElement: Int = 2
他のプラットフォームも同様のパターンに従い、firstElement
および secondElement
プロパティの値にバリエーションがあります。
新しいプラットフォームを追加する
テンプレートで共有コードとプラットフォーム固有コードがどのように機能するかを理解したところで、追加のプラットフォームのサポートを追加してプロジェクトを拡張しましょう。
expect
/actual
メカニズムを使用して、Kotlin/Wasmプラットフォームのサポートを設定します。firstElement
とsecondElement
プロパティのプラットフォーム固有の機能を実装できます。
Kotlin/Wasmターゲットをプロジェクトに追加する
library/build.gradle.kts
ファイルに、Kotlin/Wasmターゲット (wasmJs
) とソースセットを追加します。kotlinkotlin { // ... @OptIn(org.jetbrains.kotlin.gradle.ExperimentalWasmDsl::class) wasmJs { browser() // ... binaries.executable() } // ... sourceSets { //... val wasmJsMain by getting { dependencies { // Wasm-specific dependencies } } } }
ビルドファイルに表示されるSync Gradle Changesアイコン (
)をクリックしてGradleファイルを同期します。または、Gradleツールウィンドウのリフレッシュボタンをクリックします。
Wasm用のプラットフォーム固有コードを作成する
Wasmターゲットを追加した後、firstElement
とsecondElement
のプラットフォーム固有の実装を保持するためのWasmディレクトリが必要です。
library/src
ディレクトリを右クリックし、New | Directory を選択します。Gradle Source Sets リストから wasmJsMain/kotlin を選択します。
新しく作成された
wasmJsMain/kotlin
ディレクトリを右クリックし、New | Kotlin Class/File を選択します。ファイル名として fibiprops.wasm を入力し、File を選択します。
fibiprops.wasm.kt
ファイルに以下のコードを追加します。kotlinpackage io.github.kotlin.fibonacci actual val firstElement: Int = 3 actual val secondElement: Int = 5
このコードはWasm固有の実装を設定し、
firstElement
のactual
値を3
に、secondElement
のactual
値を5
に定義します。
プロジェクトをビルドする
新しいプラットフォームでプロジェクトが正しくコンパイルされることを確認してください。
View | Tool Windows | Gradle を選択してGradleツールウィンドウを開きます。
multiplatform-library-template | library | Tasks | build の中で、build タスクを実行します。
または、
multiplatform-library-template
のルートディレクトリからターミナルで以下のコマンドを実行します。bash./gradlew build
Build ツールウィンドウで成功した出力を確認できます。
ライブラリをローカルのMavenリポジトリに公開する
これで、マルチプラットフォームライブラリをローカルに公開し、同じマシン上の他のプロジェクトで使用する準備ができました。
ライブラリを公開するには、maven-publish
Gradleプラグインを次のように使用します。
library/build.gradle.kts
ファイル内のplugins { }
ブロックを見つけ、maven-publish
プラグインを適用します。kotlinplugins { // ... // Add the following line: id("maven-publish") }
mavenPublishing { }
ブロックを見つけ、公開がローカルのみであることを示すためにsignAllPublications()
メソッドをコメントアウトします。kotlinmavenPublishing{ // ... // Comment out the following method: // signAllPublications() }
ビルドファイルに表示されるSync Gradle Changesアイコン (
)をクリックしてGradleファイルを同期します。または、Gradleツールウィンドウのリフレッシュボタンをクリックします。
Gradleツールウィンドウで、multiplatform-library-template | Tasks | publishing に移動し、publishToMavenLocal Gradleタスクを実行します。
または、
multiplatform-library-template
のルートディレクトリからターミナルで以下のコマンドを実行します。bash./gradlew publishToMavenLocal
ライブラリがローカルのMavenリポジトリに公開されました。
公開されたライブラリを見つけるには、ファイルエクスプローラーまたはターミナルを使用し、ユーザーのホームディレクトリにある .m2\repository\io\github\kotlin\library\1.0.0\
へ移動します。
ライブラリを別のプロジェクトの依存関係として追加する
MultiplatformライブラリをローカルのMavenリポジトリに公開した後、同じマシン上の他のKotlinプロジェクトでそれを使用できます。
コンシューマプロジェクトの build.gradle.kts
ファイルで、公開されたライブラリへの依存関係を追加します。
repositories {
// ...
mavenLocal()
}
dependencies {
// ...
implementation("io.github.kotlin:library:1.0.0")
}
repositories{}
ブロックは、GradleにローカルのMavenリポジトリからライブラリを解決し、共有コードで利用可能にするように指示します。
implementation
依存関係は、ライブラリの build.gradle.kts
ファイルで指定されたグループとバージョンで構成されます。
別のマルチプラットフォームプロジェクトに追加する場合は、共有またはプラットフォーム固有のソースセットに追加できます。
kotlin {
//...
sourceSets {
// For all platforms
val commonMain by getting {
dependencies {
implementation("io.github.kotlin:library:1.0.0")
}
}
// Or for specific platforms
val wasmJsMain by getting {
dependencies {
implementation("io.github.kotlin:library:1.0.0")
}
}
}
}
コンシューマプロジェクトを同期して、ライブラリの使用を開始しましょう!
次のステップ
マルチプラットフォーム開発をさらに探求することをお勧めします。
コミュニティに参加する:
Compose Multiplatform GitHub: リポジトリにスターを付けて貢献する
Kotlin Slack: 招待を受け取り、#multiplatformチャンネルに参加する
Stack Overflow: 「kotlin-multiplatform」タグを購読する
Kotlin YouTube channel: Kotlin Multiplatformに関する動画を購読して視聴する