Kotlinマルチプラットフォームプロジェクト(KMP)とは?
KMPの概要
Kotlinマルチプラットフォームプロジェクト(KMP)は、Kotlinを使用して複数のプラットフォーム(Android、iOS、Web、デスクトップ)向けのアプリケーションを開発するための仕組みです。
KMPを利用すると、共通コード(Shared Code) を1つにまとめ、各プラットフォームで共有できます。そのため、コードの重複を削減し、保守性を向上させることができます。
KMPのメリット
- コードの再利用:ビジネスロジックやデータモデルを共有可能
- 各プラットフォームのネイティブAPIにアクセス可能
- 必要に応じてプラットフォーム固有のコードを実装可能
- Gradleを使用して簡単にビルド管理ができる
Kotlinマルチプラットフォームプロジェクトの構成
プロジェクトの基本構成
KMPプロジェクトは、以下のようなディレクトリ構成になります。
kmp-project/
├── shared/ # 共通コード(Kotlin Multiplatform Module)
│ ├── src/
│ │ ├── commonMain/ # すべてのプラットフォームで共有されるコード
│ │ ├── androidMain/ # Android固有のコード
│ │ ├── iosMain/ # iOS固有のコード
│ ├── build.gradle.kts # 共通モジュールのビルド設定
│
├── androidApp/ # Androidアプリケーション
│ ├── src/
│ ├── build.gradle.kts # Androidアプリのビルド設定
│
├── iosApp/ # iOSアプリケーション
│ ├── src/
│ ├── build.gradle.kts # iOSアプリのビルド設定
│
├── build.gradle.kts # ルートのGradle設定
├── settings.gradle.kts # Gradleプロジェクトの設定
Kotlinマルチプラットフォームプロジェクトの導入方法
必要なツールのインストール
KMPを始めるためには、以下のツールをインストールする必要があります。
- Android Studio(Kotlin Multiplatformをサポート)
- Xcode(iOSアプリを開発する場合)
- Kotlin 1.6以上
- Gradle 7以上
新しいKMPプロジェクトを作成する
Android StudioでKMPプロジェクトを作成するには、以下の手順を実行します。
- Android Studioを起動
- 新しいプロジェクトを作成
- 「Kotlin Multiplatform App」テンプレートを選択
- プロジェクト名と保存場所を設定
- 作成を完了し、Gradleを同期
Kotlinマルチプラットフォームのコードの書き方
共通コードの作成
共通コード(commonMain
)には、すべてのプラットフォームで共有するロジックを記述します。
expect class Platform() {
fun getPlatformName(): String
}
expect
キーワードを使用して、プラットフォームごとに異なる実装を提供することができます。
Android固有の実装
actual class Platform {
actual fun getPlatformName(): String = "Android"
}
iOS固有の実装
import platform.UIKit.UIDevice
actual class Platform {
actual fun getPlatformName(): String = UIDevice.currentDevice.systemName()
}
Kotlinマルチプラットフォームのビルドと実行
Gradleを使用して、以下のコマンドでプロジェクトをビルドおよび実行できます。
# Androidアプリをビルド
./gradlew androidApp:assembleDebug
# iOSアプリをビルド
./gradlew iosApp:build
また、iOSアプリを実機やシミュレーターで実行する場合は、Xcodeを使用してビルドします。
Kotlinマルチプラットフォームプロジェクトの活用例
ネットワーク通信の共通化
Ktorを使用すると、共通コードでネットワーク通信を実装できます。
import io.ktor.client.*
import io.ktor.client.request.*
class ApiClient {
private val client = HttpClient()
suspend fun fetchData(): String {
return client.get("https://api.example.com/data")
}
}
データベースの共通化
SQLDelightを使用して、共通コードでデータベース処理を行うことができます。
expect class DatabaseDriverFactory {
fun createDriver(): SqlDriver
}
まとめ
本記事では、Kotlinマルチプラットフォームプロジェクト(KMP)の基本と導入方法について解説しました。
- KMPを活用すると、Android、iOS、Webなど複数のプラットフォームでコードを共有できる
expect
** とactual
を利用して、プラットフォームごとの実装を定義できる**- KtorやSQLDelightを活用すると、ネットワークやデータベース処理も共通化できる
KMPを導入することで、開発効率を大幅に向上させることができます。ぜひ、プロジェクトに取り入れてみてください!