Kotlinマルチプラットフォームプロジェクト(KMP)の概要と導入方法【Kotlin入門⑮】

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プロジェクトを作成するには、以下の手順を実行します。

  1. Android Studioを起動
  2. 新しいプロジェクトを作成
  3. 「Kotlin Multiplatform App」テンプレートを選択
  4. プロジェクト名と保存場所を設定
  5. 作成を完了し、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を導入することで、開発効率を大幅に向上させることができます。ぜひ、プロジェクトに取り入れてみてください!