マルチプラットフォーム

Kotlinの「マルチプラットフォーム(Kotlin Multiplatform、以下KMP)」は、共通のコードベースを複数のプラットフォーム(JVM、JavaScript、iOS、Linuxなど)で再利用可能にすることを目的としたKotlinの強力な機能の一つです。JetBrainsによって開発され、クロスプラットフォーム開発のための柔軟で拡張性のあるアプローチを提供します。


1. 概要

Kotlin Multiplatformでは、アプリケーションのビジネスロジック、データモデル、アルゴリズム、通信処理などの共通部分を一つのコードで書きUIやプラットフォーム特有の処理は個別に実装する構造が推奨されます。

対応プラットフォーム(主な例)

  • JVM(Androidアプリ、デスクトップアプリ)

  • JavaScript/TypeScript(Webアプリ)

  • iOS/macOS(Kotlin/Native)

  • Linux、Windows(Kotlin/Native)

  • WebAssembly(プレビュー段階)


2. プロジェクト構成

Kotlin Multiplatformの典型的な構成は以下の3つに分かれます:

モジュール 目的 特徴
commonMain 共通コード 全プラットフォームで共有されるロジック(例:モデル、リポジトリ、ユースケース)
platformMain 各プラットフォーム固有のコード Android用(androidMain)、iOS用(iosMain)など
commonTest / platformTest テストコード 共通テストとプラットフォーム別テスト

3. expect / actual 機能

KMPでは、**共通コードで宣言した関数やクラス(expect)を、各プラットフォームで具体的に実装(actual)**することができます。

kotlin
// commonMain expect fun getPlatformName(): String
kotlin
// androidMain actual fun getPlatformName(): String = "Android"
kotlin
// iosMain actual fun getPlatformName(): String = "iOS"

これにより、共通のAPIを保ちつつ、プラットフォーム固有の動作が可能となります。


4. 利用例

モバイルアプリ開発(Android + iOS)

  • ビジネスロジック、データ層、APIクライアントなどをKotlinで共通実装

  • UIはAndroidではJetpack ComposeやXML、iOSではSwiftUIやUIKitを使用

  • JetBrains製のKtorSQLDelightKoinなどがKMPに対応


5. 利点と課題

利点

  • コードの再利用:重複の削減、保守性の向上

  • 統一言語による開発:フロント・バックエンド問わずKotlinで記述可能

  • ネイティブパフォーマンス:Kotlin/NativeによってiOSなどでも高パフォーマンスが得られる

課題

  • iOS開発者にとってKotlin/NativeやGradleは学習コストがある

  • UIは各プラットフォームで個別実装が必要

  • 一部のライブラリはマルチプラットフォーム未対応


6. 使用ツール

  • Kotlin Multiplatform Mobile (KMM):JetBrainsとGoogleが共同開発するモバイル向けKMPのセットアップツール

  • Gradle:マルチプラットフォームプロジェクト構成に必要

  • Android Studio:KMM開発用の公式IDE(iOS用のXcodeとの連携も可能)


7. まとめ

Kotlin Multiplatformは、共有可能なロジックを単一言語で開発し、ネイティブのユーザー体験を維持したまま複数のプラットフォームに対応できる柔軟な手法です。UIやプラットフォーム固有機能は別途実装する必要がありますが、開発・保守効率を大幅に向上させる可能性を持っています。

生成日:2025/05/04