Contents
Kotlin Multiplatform モバイル アプリ 開発 手順:KMM WizardとFleetによる最新環境構築ガイド
2023年7月現在、Kotlin Multiplatform(KMP)はAndroidとiOSの共通コードを1つのリポジトリで管理できる技術として注目を集めています。本記事では、KMM WizardとFleetを使ってプロジェクト初期設定からコード共有までをステップバイステップで解説します。Android/iOS両方の経験を持つ開発者向けに、実装可能なサンプルコード付きで丁寧に説明します。
Kotlin Multiplatformとは?
Kotlin Multiplatformは、共通ロジックを1箇所で管理し、プラットフォーム固有の部分(UIなど)を個別開発する仕組みです。これにより、コードの重複を削減し、保守性と生産性を向上させられます。
KMM WizardとFleetの役割
- KMM Wizard: Android Studio内からプロジェクトテンプレートを自動生成し、初期設定を簡素化します。
- Fleet: JetBrainsが提供するエディタで、Android/iOSコードの同時編集や多プロジェクト管理が可能です。
対象読者層の確認
本記事はAndroidとiOS両方の開発経験を持つ読者を想定しています。UIフレームワーク(Jetpack Compose/SwiftUI)との比較は避け、コード共有の実装に焦点を当てます。
KMM Wizardによるプロジェクト初期設定
KMM Wizardを使うことで、AndroidとiOSの初期構成を迅速かつ正確に作成できます。
IDEでの導入手順
- Android Studio Giraffe(2023.1.1) で、Extensions → Kotlin Multiplatform Wizard をインストールします。公式ドキュメント: https://developer.android.com/kotlin/multiplatform
- 新規プロジェクト作成時に「Kotlin Multiplatform」テンプレートを選択し、「Android」と「iOS」の両方をチェックします。
プロジェクトテンプレート選択
- コード共有モジュール(commonMain) が自動生成され、
- Android側(androidMain)、iOS側(iosMain)にプラットフォーム固有のディレクトリが作成されます。
共通モジュールの生成確認
以下のような構造が出来上がります:
|
1 2 3 4 5 6 7 8 9 10 11 12 |
MyApp/ ├── common/ │ ├── src/ │ │ └── commonMain/ │ │ └── kotlin/(共通コード) │ └── build.gradle.kts ├── android/ │ └── app/ │ └── src/main/(Android固有実装) └── ios/ └── MyApp.xcworkspace/(iOSプロジェクト) |
注意: Android Studioのバージョンが古すぎる場合、KMM Wizardが正しく動作しない可能性があります。
Gradle構成ファイルの共通化と差分処理
Gradle設定は、共通ロジックとプラットフォーム固有の依存関係を明確に区別することが重要です。
build.gradle.ktsの共有部分
commonMain用のbuild.gradle.ktsでは、以下のように依存関係を記述します:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
plugins { kotlin("multiplatform") version "1.8.20" } kotlin { sourceSets { val commonMain by getting { dependencies { implementation("org.jetbrains.kotlinx:kotlinx.coroutines:1.7.3") } } } } |
プラットフォーム固有設定の切り分け方法
- Android向け:
androidMainでJetpack ComposeやRoomライブラリを追加します。 - iOS向け:
iosMainでCombineやSwiftUI用の橋渡しライブラリ(KMM)を導入します。
| プラットフォーム | 依存関係例 | 補足 |
|---|---|---|
| Android | implementation("androidx.compose.ui:ui:1.5.0") |
Jetpack Compose使用時 |
| iOS | implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.5.2") |
JSON処理用 |
コード共有モジュールの実装例
共通コードは、DTOやリポジトリ層などに分離し、プラットフォーム依存処理を分離します。
DTOクラスの共通定義
共通ロジックで使用するデータモデルです:
|
1 2 3 4 5 6 |
// commonMain/src/main/kotlin/User.kt data class User( val id: String, val name: String ) |
Repository層のプラットフォーム独立処理
|
1 2 3 4 5 |
// commonMain/src/main/kotlin/UserRepository.kt expect object UserRepository { suspend fun getUser(id: String): User? } |
- Android実装: Room DBやRetrofitでデータ取得。
- iOS実装: CoreDataまたはCombine APIを使用して差分処理。
Jetpack Compose/SwiftUIでのUI分離方法
共通ViewModelを設計し、プラットフォーム固有のUIレイヤーに委譲します。
共通ViewModelの設計
|
1 2 3 4 5 6 7 |
// commonMain/src/main/kotlin/UserViewModel.kt class UserViewModel( private val repository: UserRepository ) { fun fetchUser(id: String): Flow<User?> = repository.getUser(id).asFlow() } |
UIレイヤーのプラットフォーム固有実装
- Android: Jetpack ComposeでViewModelを観測し、UIを構築。
- iOS: SwiftUIで
@ObservedObjectでViewModelをバインド。
Fleetエディタでのプロジェクト操作手順
Fleetを使うことで、複数プラットフォームのコードを同時に開発・デバッグできます。
Fleetのインストールと初期設定
- JetBrains公式サイトからFleetダウンロード。
- AndroidプロジェクトとiOSプロジェクトをドラッグ&ドロップで読み込みます。
複数プラットフォーム同時開発のTips
- タブ切り替え: プラットフォームごとに別タブを開き、同時に編集可能。
- ライブリロード: Android StudioとFleet間で自動同期される設定を有効にします。
サンプルアプリのビルド・テスト手順
それぞれのプラットフォームで動作確認し、共通コードの正しさを検証します。
Android端末での実装確認
- Android Studioで
Build → Build Bundle(s) / APK(s) → Build APKを選択。 - USB接続したAndroid端末でアプリをインストールし、ログを確認。
iOSシミュレーターでの動作検証
- Fleet内でXcodeのシミュレーター起動し、iOSプロジェクトを開く。
Product → Runでビルドとテストを実施。
CTA: 記事内のステップを実際に試してみて、Kotlin Multiplatform開発環境構築に成功した場合はコメントで教えてください!
まとめ
- Kotlin Multiplatformは共通ロジックの効率的な管理が可能
- KMM WizardとFleetを使えば初期設定が劇的に簡単になる
- Gradle構成ファイルやコード共有モジュールの設計を意識することで、保守性向上が見込める
- Android/iOSでのUI分離はViewModel中心に実装する