Contents
2026 年に向けた Kotlin Multiplatform (KMP) 開発環境の全体像
Kotlin Multiplatform を本格的に採用するには、各プラットフォームで共通して利用できるツールチェーンを正しく構築することが前提です。本章では Android・iOS/macOS・JavaScript / Wasm の 3 本軸で必要なソフトウェアとバージョン管理のポイントを俯瞰し、以降の各セクションで詳しい手順へとつなげます。
- Android 側:最新安定版 Android Studio と Kotlin プラグイン、SDK/NDK の適切な設定が必要です。
- iOS/macOS 側:Xcode(最新版)に加えて CocoaPods でのライブラリ管理を行います。
- JavaScript / Wasm 側:Node.js LTS 系列を Windows・macOS に導入し、PATH が正しく通っていることを確認します。
Android 開発環境のセットアップ
Android プラットフォームで KMP を利用する際に最も重要なのは 「IDE と SDK の整合性」 です。以下では Windows・macOS 共通の手順と、プラットフォーム別に留意すべき点を整理します。
Android Studio のインストール(Windows/macOS/Linux)
Android Studio は公式サイトから 最新安定版 を取得してください。インストーラは OS に合わせて自動的に必要なコンポーネントを同梱しています。
- 公式ダウンロードページ (https://developer.android.com/studio) にアクセスし、OS に合ったインストーラを取得。
- ダウンロードしたファイルを実行し、画面の指示に従ってインストール。途中で 「Kotlin プラグイン」 が自動的に有効化されます(手動で有効化する必要はありません)。
ポイント:インストール後は
File > Settings > Pluginsから Kotlin のバージョンが最新であることを必ず確認してください。
SDK と NDK の設定
KMP では Android 用のネイティブコードもビルド対象になるため、SDK と NDK の両方が必要です。
|
1 2 3 |
Android Studio 起動 → Preferences (macOS) / Settings (Windows/Linux) → Appearance & Behavior → System Settings → Android SDK |
- SDK Platforms タブで「Android 14(API 34)以上」をチェックし、
Applyでインストール。 - SDK Tools タブで NDK (Side by side) と CMake を選択し、同様にインストールします。
注意:NDK のバージョンは「23.1」以上が KMP の Kotlin/Native に対して推奨されています。
動作確認手順
File > New > Project で “Multiplatform App” テンプレートを選択し、ビルドが成功すれば環境構築は完了です。
iOS / macOS 開発環境のセットアップ
iOS 向けに KMP アプリを配布するには Xcode と CocoaPods が必須です。本節では Xcode のインストールから CocoaPods の初期化まで を順を追って解説します。
Xcode の取得とコマンドラインツールの設定
Apple Store で提供されている 最新安定版 Xcode(2026 年時点ではバージョン 15 系列)をインストールしてください。
- App Store → 「Xcode」→ ダウンロード & インストール。
- ターミナルで以下を実行し、コマンドラインツールのパスを明示的に設定します。
|
1 2 |
sudo xcode-select --switch /Applications/Xcode.app/Contents/Developer |
Tip:
xcodebuild -versionでバージョンが正しく表示されれば成功です。
CocoaPods の導入(RubyGem 経由)
CocoaPods は Ruby のパッケージマネージャー gem を用いてインストールします。バージョンは 最新の安定版 が自動的に取得されますので、特定番号を記載しません。
|
1 2 3 4 5 |
# macOS 標準の Ruby でインストール(sudo が必要) sudo gem install cocoapods # 初期化(初回のみ実行) pod setup |
Podfile の基本構成例
|
1 2 3 4 5 6 7 |
platform :ios, '15.0' use_frameworks! target 'MyKMPiOSApp' do pod 'shared', :path => '../shared' end |
この設定を iosApp/Podfile に保存し、プロジェクトディレクトリで pod install を実行すると CocoaPods が Xcode プロジェクトに統合 されます。
Windows 環境での Node.js LTS インストールと PATH 設定
KMP の JavaScript / Wasm ターゲットは、Node.js LTS 系列がインストールされた環境でビルド・テストできます。Windows では MSI インストーラ を利用し、パス設定を手動で確認することが重要です。
手順概要
| 手順 | 内容 |
|---|---|
| 1. ダウンロード | https://nodejs.org の「LTS」欄から Windows 用 MSI(例: node-v20.x.x-x64.msi)を取得 |
| 2. インストール実行 | ダブルクリックでインストーラ起動。 ・「Node.js runtime」「npm package manager」\ ・「Add to PATH」チェックボックスは必ずオンにする |
| 3. 環境変数の確認 | Win + X → 「システム」 → 「詳細設定」 → 「環境変数」Path に C:\Program Files\nodejs\ が含まれているかチェック |
| 4. バージョン検証 | PowerShell で node -v と入力し、v20.x.x が表示されれば完了 |
PATH が自動設定されなかった場合の手動追加例(PowerShell)
|
1 2 3 4 5 6 7 |
$envPath = [System.Environment]::GetEnvironmentVariable('Path', 'Machine') if (-not ($envPath -like '*C:\Program Files\nodejs*')) { $newPath = "$envPath;C:\Program Files\nodejs" [System.Environment]::SetEnvironmentVariable('Path', $newPath, 'Machine') Write-Host "Node.js のパスをシステム環境変数に追加しました。再起動後に有効になります。" } |
ポイント:インストール直後は
node -vが認識されないことがあります。その際は コマンドプロンプト/PowerShell を再起動 してください。
KMP プロジェクトの作成手順
KMP の公式ドキュメントに沿った 最小構成の雛形生成から UI 組み込みまで を段階的に解説します。以下では gradle init コマンドを利用したテンプレート生成、shared モジュールへの依存関係追加、そして Compose Multiplatform の簡易サンプル実装までを網羅します。
gradle init での雛形作成(H3)
目的:Kotlin Multiplatform 用の Gradle プロジェクト構造を自動生成し、shared モジュールを即座に利用できる状態にする。
|
1 2 3 4 5 6 7 8 9 |
# 作業ディレクトリへ移動 mkdir MyKMPApp && cd MyKMPApp # Kotlin Multiplatform テンプレート取得(DSL は Kotlin) gradle init \ --type kotlin-multiplatform \ --dsl kotlin \ --project-name MyKMPApp |
実行後に生成される settings.gradle.kts と build.gradle.kts を確認し、include(":shared") が記載されていることを確かめます。
目的:Android / iOS / JS の各ターゲットを有効化し、共通ライブラリとして Compose と Ktor を組み込む。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
plugins { kotlin("multiplatform") id("org.jetbrains.compose") version "1.5.0" // 2026 年時点での最新安定版 } kotlin { android() iosX64() iosArm64() js(IR) { browser() } sourceSets { val commonMain by getting { dependencies { implementation(compose.runtime) implementation(compose.foundation) implementation("io.ktor:ktor-client-core") // バージョンは自動解決 implementation("com.squareup.sqldelight:runtime-coroutines") } } // platform-specific の依存は必要に応じて追加 } } |
./gradlew clean build が成功すれば shared モジュールの設定完了です。
Compose Multiplatform UI の最小実装(H3)
目的:共通 UI コンポーネントを 1 ファイルで定義し、Android と iOS 両方から呼び出せる形にする。
|
1 2 3 4 5 6 7 |
@Composable fun Greeting(name: String) { MaterialTheme { Text(text = "Hello, $name!", style = MaterialTheme.typography.h4) } } |
- Android:
androidApp/src/main/kotlin/.../MainActivity.ktでsetContent { Greeting("Android") } - iOS:Swift 側のラッパー
GreetingView.swiftからGreeting(name: "iOS").uiView()を呼び出す(CocoaPods 経由でリンク)
ビルド・テストの実行方法(エミュレータ/シミュレータ)
KMP アプリは 単一コマンド で Android エミュレータと iOS シミュレータの両方にデプロイできます。ここでは CLI ベースの手順を示します。
Android エミュレータでのビルド & デプロイ(H3)
前提:Android SDK がパスに通っていること、AVD が作成済みであること。
|
1 2 3 4 5 6 7 8 9 |
# ビルド ./gradlew :androidApp:assembleDebug # エミュレータ起動(例: Pixel 5 API 34) emulator -avd Pixel_5_API_34 & # アプリインストール adb install -r androidApp/build/outputs/apk/debug/androidApp-debug.apk |
ビルドが成功し、エミュレータ上にアプリが表示されれば OKです。
iOS シミュレータでのビルド & デプロイ(H3)
前提:Xcode がインストール済みで xcode-select が正しく設定されていること。
|
1 2 3 4 5 6 7 8 9 |
# Pod の再インストールと Xcode ワークスペース生成 cd iosApp && pod install && cd .. # ビルド & シミュレータ自動起動(iPhone 15, iOS 17.0) xcodebuild -workspace iosApp/iosApp.xcworkspace \ -scheme iosApp \ -destination 'platform=iOS Simulator,name=iPhone 15,OS=17.0' \ clean build |
シミュレータが自動で立ち上がり、アプリがインストールされます。実機テストは Xcode の Signing & Capabilities にチーム情報を設定したうえで xcodebuild -exportArchive を利用してください。
実務での活用事例(参考)
以下に示す 2 つのケースは、2026 年時点で公開されている公式ブログや技術メディアから抜粋した 実践的な KMP の適用例 です。リンク先は執筆時点で有効と確認できるものに限定しています。
事例①:API クライアントの共通化と AI 補助リファクタリング
| 項目 | 内容 |
|---|---|
| 対象 | Android と iOS の REST API 通信ロジック(認証・エラーハンドリング) |
| 導入手順 | 1. shared に Ktor ベースの ApiClient を実装2. 各プラットフォームで DI コンテナにバインド 3. GitHub Copilot Enterprise による自動リファクタリングジョブを CI に組み込む |
| 効果 | 開発工数が約 30 % 削減、テストケースが 40 % 減少。CI での API スキーマ検証により不整合が実質ゼロに近づいた |
| 自動化ポイント | detekt + ktlint に加えて OpenAI Codex を呼び出す GitHub Actions ジョブ(run: python ./scripts/auto_fix.py) |
参考リンク:Asken Tech Blog – “KMP × AI がもたらす開発効率向上” (2026‑03‑04)
事例②:Compose Multiplatform を用いた TODO アプリ全工程
| 項目 | 内容 |
|---|---|
| 対象 | 初学者向けのシンプルなタスク管理アプリ |
| 構成要素 | - SQLDelight 2.0 でデータ永続化 - Moko Resources で多言語リソースを共通化 - Compose の LazyColumn と OutlinedTextField を UI に利用 |
| 実装ハイライト | kotlin\ninterface TodoRepository { suspend fun getAll(): List<Todo> }\n を shared に配置し、Android は MainActivity、iOS は SwiftUI ラッパーから呼び出す。 |
| テスト戦略 | shared/src/commonTest に Turbine + Koin‑test を組み合わせたユニットテストを配置し、GitHub Actions のマトリックスビルドで実行。 |
参考リンク:App‑Tatsujin Blog – “Compose Multiplatform で作る KMP TODO アプリ” (2026‑04‑22)
CI/CD パイプライン構築例(GitHub Actions)
自動化の第一歩は マトリックスビルド によって Android と iOS の両方を同時に検証することです。以下は 2026 年版 GitHub Actions ワークフローのサンプルです。
|
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 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 |
name: KMP CI on: push: branches: [ main ] pull_request: jobs: build: runs-on: ${{ matrix.os }} strategy: matrix: os: [ubuntu-latest, macos-latest] target: [android, ios] steps: - uses: actions/checkout@v4 # JDK(Kotlin 2.0 が要求する Java 21)設定 - name: Set up JDK 21 uses: actions/setup-java@v3 with: distribution: temurin java-version: '21' # Node.js (JavaScript/Wasm) 設定 - name: Install Node.js 20 LTS uses: actions/setup-node@v4 with: node-version: '20' # Android SDK(Ubuntu のみ)インストール - if: matrix.os == 'ubuntu-latest' && matrix.target == 'android' name: Install Android SDK run: | sudo apt-get update sudo apt-get install -y wget unzip wget https://dl.google.com/android/repository/commandlinetools-linux-9477386_latest.zip -O cmdline-tools.zip mkdir -p $HOME/android-sdk/cmdline-tools unzip cmdline-tools.zip -d $HOME/android-sdk/cmdline-tools echo "export ANDROID_SDK_ROOT=$HOME/android-sdk" >> $GITHUB_ENV echo "$HOME/android-sdk/cmdline-tools/tools/bin" >> $GITHUB_PATH # Gradle ビルド実行 - name: Gradle Build run: ./gradlew clean build --no-daemon # iOS ビルド(macOS のみ)実行 - if: matrix.os == 'macos-latest' && matrix.target == 'ios' name: Xcode Build env: CI: true run: | cd iosApp pod install xcodebuild -workspace iosApp.xcworkspace \ -scheme iosApp \ -configuration Release \ -sdk iphoneos \ clean build # 成果物のアップロード - name: Upload Artifacts uses: actions/upload-artifact@v4 with: name: ${{ matrix.target }}-bundle path: | androidApp/build/outputs/apk/release/*.apk iosApp/build/Release-iphoneos/*.ipa |
コードサインの自動化ポイント
| プラットフォーム | 手順概要 |
|---|---|
| Android | signingConfigs に GitHub Secrets(ANDROID_KEYSTORE, KEY_ALIAS, KEY_PASSWORD)を参照し、Gradle がビルド時に自動署名。 |
| iOS | Apple Developer API キーと証明書を APP_STORE_CONNECT_API_KEY 等のシークレットとして保存し、xcodebuild -exportArchive -allowProvisioningUpdates で自動プロビジョニング。 |
既存プロジェクトへの段階的移行ガイド
KMP をゼロから導入するケースだけでなく、レガシー Android/iOS アプリに徐々に組み込む 方法も重要です。以下はリスクを最小化しつつ移行できる 4 段階のロードマップです。
| フェーズ | 主な作業 | 注意点 |
|---|---|---|
| 1. 評価 | API クライアントやデータモデルなど、プラットフォーム非依存ロジックを shared に抽出可能か検証。 |
UI ロジックは残す方が安全。 |
| 2. モジュール化 | settings.gradle.kts に include(":shared") を追加し、Gradle 依存を implementation(project(":shared")) に変更。 |
ビルドキャッシュ (org.gradle.caching=true) を有効にしてビルド時間増加を抑制。 |
| 3. テスト統合 | 共通ロジックの単体テストを commonTest 配下に集約し、CI で実行。 |
iOS 固有テストは iosX64Test に限定し、シミュレータが必要なケースだけ残す。 |
| 4. デプロイ | 各プラットフォームのビルドスクリプトに KMP ビルドタスクをフックし、CI パイプラインへ組み込む。 | Xcode の pod install --repo-update が失敗したらローカルキャッシュを削除して再実行。 |
落とし穴:Kotlin/Native ではまだ
java.time系 API がサポートされていません。代替としてkotlinx.datetimeを使用するようコードを書き換えてください(2026 年版 Kotlin 2.0 で標準化済み)。
まとめ
- ツールチェーン:Android Studio 最新安定版+Kotlin プラグイン、Xcode + CocoaPods、Node.js LTS を揃えれば KMP の開発基盤は完成。
- プロジェクト作成:
gradle init→shared設定 → Compose Multiplatform UI の組み込みという流れが公式推奨の最短パスです。 - ビルド・テスト:CLI で Android エミュレータと iOS シミュレータを同時に走らせ、CI にも容易に組み込めます。
- 実務事例:API 共通化+AI 自動リファクタリング、Compose を用いた TODO アプリは、KMP がすぐに価値を提供できる典型例です。
- CI/CD:GitHub Actions のマトリックスビルドとコードサイン自動化で、プッシュごとに安全かつ再現性の高いデプロイが実現します。
- 段階的移行:評価 → モジュール化 → テスト統合 → デプロイの 4 ステップでレガシーコードベースへ無理なく組み込めます。
これらを踏まえて、2026 年以降も安定したマルチプラットフォーム開発環境を構築し、KMP の持つ 「1 つのコードベースで Android・iOS・Web を同時に提供できる」 強みを最大限活用してください。