Contents
Kotlin Multiplatform(KMP)とは?コード共有の仕組みを理解する
Kotlin Multiplatform(KMP)は、Kotlinで複数プラットフォーム間のコード共有を実現する技術です。AndroidやiOSなどに特化した部分(UIなど)は別途開発し、共通部分を1つのコードベースで管理できる仕組みです。このアプローチにより、開発者が1つの言語で幅広いプラットフォームに対応できるようになります。
KMPの基本概念とメリット
KMPは「同じコードを複数プラットフォームに流用できる」という思想から生まれました。具体的には、データ処理やネットワーク通信などのビジネスロジックを共通化することで、開発効率の向上と保守性の改善が可能になります。
-
メリット1:コードの再利用性
AndroidとiOSで共通するロジックは1か所で管理できるため、バグ修正や機能追加が効率的です。 -
メリット2:開発コストの削減
プラットフォームごとのコードを別々に書く必要がないため、初期開発とメンテナンスの手間を軽減できます。
注意点:UIなどのプラットフォーム固有部分は別途実装が必要です。KMPはロジック層の共有に特化しています。
共通コードとプラットフォーム固有コードの役割
共通コードは、expect-actualパターンを用いてプラットフォームごとに適切な処理を切り替えます。たとえば、ファイル操作やネットワークリクエストといった、各OSで異なるAPIを持つ処理は、プラットフォーム固有コードとして実装されます。
| プラットフォーム | 共通コードの役割 | プラットフォーム固有コードの役割 |
|---|---|---|
| Android | データ処理ロジックを共通化 | Android SDK特有のAPI呼び出し |
| iOS | ビジネスルールを統一 | SwiftまたはObjective-Cによる処理実装 |
開発環境の準備:Kotlin Multiplatformプロジェクトの初期設定
KMPプロジェクトを作成するには、Android StudioとKotlinプラグインが必要です。最新バージョンの環境構築手順をステップバイステップで解説します。
必要なツールとバージョン
- Android Studio: 2023.2.1以上(2024年7月時点)
- JDK: OpenJDK 17またはOracle JDK 17
- Kotlinプラグイン: 1.9.x以降
Kotlin Multiplatformは、Android Studioの「New Project」テンプレートから直接作成可能です。
Android Studioでの新規プロジェクト作成手順
- Android Studioを起動し、「New Project」を選択します。
- テンプレート選択画面で「Kotlin Multiplatform App」を選び、次へ進みます。
- ターゲットプラットフォームとしてAndroidとiOSをチェック(または必要に応じて他のプラットフォームを追加)。
- プロジェクト名と保存場所を指定し、「Finish」をクリックします。
expect-actualパターンによるプラットフォーム依存処理
共通コードでexpect宣言を行い、各プラットフォームの実装部分ではactualで処理を定義することで、複数プラットフォームでの柔軟な対応が可能になります。
共通コードで宣言するexpect関数
共通ライブラリ(sharedモジュール)内で以下のようにexpect宣言します。
|
1 2 3 |
// shared/src/commonMain/kotlin/MyPlatformFunction.kt expect fun getPlatformName(): String |
この宣言は、AndroidとiOSの両方で実装が必要です。
Android/iOSそれぞれでのactual実装例
Androidの場合(Kotlin)
|
1 2 3 |
// shared/src/androidMain/kotlin/MyPlatformFunction.kt actual fun getPlatformName(): String = "Android" |
iOSの場合(Swift)
|
1 2 3 4 5 |
// shared-ios/Source/MyPlatformFunction.swift actual func getPlatformName() -> String { return "iOS" } |
ポイント:
expect宣言はプラットフォームに依存せず、actualの実装は各OSごとに適切な言語で記述します。
共通ライブラリの選定と導入方法
KMPでは、共通化できるライブラリとプラットフォーム固有ライブラリを区別して使用する必要があります。適切なライブラリ選定がプロジェクトの安定性に大きく影響します。
KMP対応ライブラリの見分け方
- 公式ドキュメントに「Multiplatform」や「Common」の記載があるライブラリを優先。
- 例:
kotlinx.coroutines、ktor-client-coreなどはKMPに対応しています。
| ライブラリ名 | 対応状況 | 補足 |
|---|---|---|
| kotlinx.coroutines | ✅ 共通 | 非同期処理で必須 |
| ktor-client-core | ✅ 共通 | ネットワークリクエスト用 |
| Android SDK | ❌ プラットフォーム固有 | Android専用API |
| SwiftUI | ❌ プラットフォーム固有 | iOS専用UIフレームワーク |
依存関係管理のベストプラクティス
build.gradle.ktsでimplementationまたはapiでライブラリを追加。- 共通ライブラリは
sharedモジュールに、プラットフォーム固有ライブラリは各モジュールに分離します。
|
1 2 3 4 5 |
// shared/build.gradle.kts dependencies { implementation("org.jetbrains.kotlinx:kotlinx.coroutines:1.7.3") } |
CI/CDでのKMPプロジェクト構築手順
GitHub Actionsを活用し、複数プラットフォームの自動ビルド・テストを実行できます。環境設定と手順を具体的に解説します。
GitHub Actionsでのビルド設定
.github/workflows/build.ymlファイルを作成。- 以下のようにYAML記述して、AndroidとiOSのCIを並列実行します。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
name: Kotlin Multiplatform CI on: [push] jobs: android: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: Setup JDK uses: actions/setup-java@v2 with: java-version: '17' - name: Build Android run: ./gradlew :android:assembleDebug ios: runs-on: macos-latest steps: - uses: actions/checkout@v3 - name: Install CocoaPods run: sudo gem install cocoapods - name: Build iOS run: ./gradlew :ios:build |
注意:iOSビルドはmacOS環境が必要です。
複数プラットフォーム同時ビルドのポイント
- 各プラットフォームの依存関係に注意し、共通ライブラリが正しく解決されるように設定します。
- テストコードも
commonTestと各プラットフォーム用に分離して実行することを推奨します。
実践的なプロジェクト構成ガイド
KMPプロジェクトでは、共通モジュールの分割やソースコード階層の設計が重要です。適切な構造により、保守性と拡張性が向上します。
ソースコード階層の設計方針
shared:共通ロジック・データクラスandroidApp:Android専用UI・リソースiosApp:iOS専用UI・Swift実装
|
1 2 3 4 5 6 7 8 |
project-root/ ├── shared/ # 共通モジュール │ ├── commonMain/ # Kotlin共通コード │ └── iosMain/ # iOSのactual実装 ├── androidApp/ # Androidアプリケーション │ └── src/main/kotlin/... └── iosApp/ # iOSアプリケーション |
共通モジュールの分割方法
- 機能ごとにモジュールを分ける(例:
auth,network) - 関連性が高いコードは同じディレクトリに配置し、明確な名前付けを行う
|
1 2 3 |
// shared/src/commonMain/kotlin/com/example/auth/AuthManager.kt class AuthManager { ... } |
まとめ
本記事では、Kotlin Multiplatform(KMP)の基礎知識から実装手順までを体系的に解説しました。主なポイントは以下の通りです:
- KMPはロジック層のコード共有に特化し、UI処理はプラットフォームごとに実装する
expect-actualパターンで各プラットフォームの適切なAPIを呼び出せる- 共通ライブラリ選定には公式ドキュメントを参考にし、依存関係管理を厳格に
- GitHub ActionsなどでCI/CDを自動化し、多プラットフォーム同時ビルドを実現
KMPの導入は初期設定がやや複雑ですが、長期的な開発効率向上につながります。実際にプロジェクトを作成して、コード共有の恩恵を感じてみてください。
公式ドキュメントはこちらから:https://developer.android.com/kotlin/multiplatform?hl=ja