Contents
📅 記事の最終更新日とバージョン確認方針
最終更新: 2026‑05‑29
本記事は「Kotlin Multiplatform(KMP)環境構築」に関わる情報が、時間経過とともに古くなるリスクを考慮し、バージョンの確認手順と公式出典 を随時追記できる形で作成しています。本文中で触れるツール・ライブラリの最新版は、以下の方法でローカルでも簡単に取得できます。
| 確認対象 | 推奨チェック方法 |
|---|---|
| Kotlin 本体 & KMP プラグイン | 公式サイト「Release notes」ページ(https://kotlinlang.org/docs/releases.html)を定期的に閲覧、または curl -s https://api.github.com/repos/JetBrains/kotlin/tags \| jq '.[0].name' で最新タグ取得 |
| Android Studio / IntelliJ IDEA | IDE の「Help → Check for Updates」から最新版を確認。公式ダウンロードページ(https://developer.android.com/studio)でもリリースノートが公開されます |
| Gradle & プラグイン | ./gradlew --version、./gradlew dependencyUpdates -Drevision=release (Gradle Versions Plugin 使用) |
| ライブラリ(kotlinx.* など) | Maven Central の検索結果(例: https://search.maven.org/artifact/org.jetbrains.kotlinx/kotlinx-coroutines-core)や ./gradlew :shared:dependencies で実際に解決されているバージョンを確認 |
1. Kotlin Multiplatform の最新安定版を取得する手順
KMP を利用する上で最も重要なのは 「使用している Kotlin バージョンが公式の最新版」 かどうかです。2024 年 3 月 7 日にリリースされた Kotlin 1.9.20 が執筆時点(2024‑04)での最新安定版でした。この情報は JetBrains の公式ブログ記事で正式に発表されています。
- 📖 公式リリースノート: Kotlin 1.9.20 released – Kotlin Blog (2024‑03‑07)
- 📦 GitHub タグ一覧(自動取得例):
curl -s https://api.github.com/repos/JetBrains/kotlin/tags \| jq '.[0].name'→"v1.9.20"
ポイント:Kotlin のバージョンは IDE に同梱されるだけでなく、Gradle ビルドスクリプトでも明示的に指定します。バージョンが古くなると、KMP プラグインや kotlinx 系ライブラリとの互換性が失われることがあります。
2. 推奨 IDE と設定の簡潔化
なぜ IntelliJ IDEA / Android Studio が必要か
KMP 開発は コード補完・マルチターゲットビルド をフルサポートする IDE が不可欠です。公式が推奨する環境は以下のとおりです。
- IntelliJ IDEA Ultimate(2024.2 以降)
- Android Studio Flamingo (2022.2.1) 以上 – 将来的に新しいコードネームへ移行する可能性があるため、常に「最新安定版」かどうかを IDE のアップデート機能で確認してください。
インストールとプラグインの統合手順
| 手順 | 操作内容 |
|---|---|
| 1️⃣ ダウンロード | https://developer.android.com/kotlin/multiplatform/setup にアクセスし、OS に合わせて IntelliJ IDEA Community / Ultimate または Android Studio を取得 |
| 2️⃣ JDK 設定 | インストール時に「OpenJDK 17」(64‑bit) が自動でセットされます。手動で変更する場合は File > Project Structure > SDKs から確認 |
| 3️⃣ 必要プラグインの有効化 | Kotlin と Gradle Kotlin DSL はデフォルトで同梱されていますが、Marketplace で最新版に更新しておくことを推奨します |
| 4️⃣ コードスタイル(任意) | Preferences > Editor > Code Style > Kotlin → インデント幅 4、行末セミコロンなし、Import の自動整理を有効化 |
注:IDE 設定とプラグイン導入は同一の手順に統合したため、以前記事で別々に記載していた冗長部分は削除しました。
3. KMP ウィザードによるプロジェクト作成とディレクトリ構造
プロジェクト生成フロー(概要)
KMP 用テンプレートを使うことで、共通コードと各プラットフォーム固有コードのフォルダが自動生成されます。以下は手順の概略です。
- IDE の「New Project」 → 「Kotlin Multiplatform」テンプレートを選択
- プロジェクト名・保存場所を入力し Next
- 対象プラットフォームに Android、iOS (iosArm64, iosX64)、JVM、JavaScript をチェック(不要なものは除外可)
- 「Finish」すると
build.gradle.ktsとサンプルコードが生成されます
生成ディレクトリの実体例
|
1 2 3 4 5 6 7 8 9 10 |
src/ ├─ commonMain/kotlin/ # 共通ロジック │ └─ com/example/shared/ ├─ androidMain/kotlin/ # Android 用実装 │ └─ com/example/android/ ├─ iosMain/kotlin/ # iOS 用実装(expect / actual) │ └─ com/example/ios/ ├─ jvmMain/kotlin/ # JVM デスクトップ/サーバー向け └─ jsMain/kotlin/ # JavaScript (ブラウザ/Node) 用 |
ポイント:
commonMainにビジネスロジックやデータモデルを置き、プラットフォーム固有の API はexpect / actualで分離します。不要なフォルダは削除しても構いませんが、Gradle のsourceSetsから対象ターゲットを外すことを忘れないでください。
4. Gradle 設定 – Kotlin Multiplatform プラグインと依存関係の最新化
基本的な build.gradle.kts(KMP 推奨構成)
|
1 2 3 4 5 6 7 8 9 10 11 12 |
plugins { // 最新版は「バージョン確認手順」セクションで取得したものを使用 kotlin("multiplatform") version "1.9.20" id("com.android.application") version "8.2.0" // Android Studio に同梱のものと合わせる } // 依存バージョンは手動管理でも良いが、Gradle Versions Plugin を使うと自動で更新可 repositories { google() mavenCentral() } |
バージョンチェック手順(コードブロック内のバージョンを最新に保つ)
- Gradle Versions Plugin の導入(
settings.gradle.ktsに追加)
kotlin
plugins {
id("com.github.ben-manes.versions") version "0.51.0"
}
- 最新版の確認コマンド
bash
./gradlew dependencyUpdates -Drevision=release
実行結果に「Current → Latest」形式で表示されるので、build.gradle.kts の該当箇所を手動で更新します。
- Kotlin バージョンの自動取得(オプション)
kotlin
val kotlinVersion = providers.exec {
commandLine("git", "ls-remote", "--tags", "https://github.com/JetBrains/kotlin.git")
}.standardOutput.asText.split("\n").firstOrNull { it.contains("v1.9.") }?.substringAfterLast("v") ?: "1.9.20"
plugins {
kotlin("multiplatform") version kotlinVersion
}
注意:自動取得スクリプトは 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 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
kotlin { // ── 共通ソースセット ──────────────────────── sourceSets { val commonMain by getting { dependencies { implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3") implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.6.0") } } val commonTest by getting { dependencies { implementation(kotlin("test")) } } } // ── Android ターゲット ─────────────────────── androidTarget { compilations.all { kotlinOptions.jvmTarget = "17" } publishAllLibraryVariants() } // ── iOS (device & simulator) ──────────────── iosArm64() iosX64() // ── JVM ターゲット ─────────────────────────── jvm { compilations.all { kotlinOptions.jvmTarget = "17" } } // ── JavaScript (IR) ターゲット ─────────────── js(IR) { browser {} nodejs {} } // ── プラットフォーム別 sourceSets ─────────── sourceSets { val androidMain by getting val iosMain by creating { dependsOn(commonMain) } val iosArm64Main by getting { dependsOn(iosMain) } val iosX64Main by getting { dependsOn(iosMain) } val jvmMain by getting val jsMain by getting } } |
ベストプラクティス:
commonMainに全体で使用するライブラリを集約し、各プラットフォーム固有のsourceSetsでは必要に応じてdependsOn(commonMain)を付与します。これによりバージョンアップ時の修正箇所が最小化されます。
5. 共通ロジックと Platform‑Specific 実装のベストプラクティス
「どこに何を書くか」の指針(KMP ガイド参照)
- Pure Kotlin (commonMain) – ビジネスロジック、データモデル、アルゴリズムはすべてここに置く。
kotlinx.serialization・kotlinx.coroutinesなどのマルチプラットフォーム対応ライブラリを活用 - expect / actual – OS や UI に依存する機能(例: ファイル I/O、ネットワークスタック、UI コンポーネント)は
expectをcommonMainに宣言し、各プラットフォームでactual実装を提供
具体的なコード例
共通側 (commonMain)
|
1 2 3 4 5 6 7 8 9 10 11 12 |
package com.example.shared /** * 現在実行中のプラットフォーム名を取得する expect 関数。 * 各ターゲットで actual を実装することで、単一の呼び出しだけで OS を判別できる。 */ expect fun platformName(): String /** 文字列を逆順にしたうえで、プラットフォーム情報を付加して返すユーティリティ */ fun reverseAndAppendPlatform(text: String): String = "${text.reversed()} on ${platformName()}" |
Android 実装 (androidMain)
|
1 2 3 4 |
package com.example.shared actual fun platformName(): String = "Android" |
iOS 実装 (iosMain)
|
1 2 3 4 5 6 |
package com.example.shared import platform.UIKit.UIDevice actual fun platformName(): String = UIDevice.currentDevice.systemName() |
ポイント:
commonMainのみでロジックを記述し、プラットフォーム固有のブリッジは最小限に抑えることで、テスト容易性と保守性が格段に向上します。
UI 側から呼び出す例
Android Activity(Kotlin)
|
1 2 3 4 5 6 7 8 9 10 |
class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) val result = reverseAndAppendPlatform("Hello") findViewById<TextView>(R.id.result).text = result } } |
iOS ViewController(Swift)
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
import UIKit import shared // Kotlin/Native で生成されたフレームワーク class ViewController: UIViewController { @IBOutlet weak var label: UILabel! override func viewDidLoad() { super.viewDidLoad() let result = StringUtil().reverseAndAppendPlatform(text: "Hello") label.text = result } } |
6. ビルド・デバッグ手順と Xcode 連携
Android 側ビルドフロー
- Gradle タスク実行
bash
./gradlew assembleDebug # デバッグ用 APK を生成
- IDE から直接起動 – Run ボタンでエミュレータまたは接続デバイスを選択。
LogcatにreverseAndAppendPlatformの出力が表示されることを確認します。
iOS 側ビルドフロー(XCFramework 利用)
- Kotlin/Native 用 XCFramework を生成
bash
./gradlew :shared:assembleXCFramework
生成物は shared/build/XCFramework/shared.xcframework に出力されます。
- Xcode プロジェクトへ組み込み
- Xcode を開き、対象 iOS アプリの「General」タブで Frameworks, Libraries, and Embedded Content に上記
.xcframeworkをドラッグ&ドロップ。 -
Build Settings > Runpath Search Pathsに@executable_path/Frameworksを追加し、コードサインが正しく行われるように設定。 -
シミュレータ/実機で実行 – Xcode のツールバーからデバイスを選び「Run」。Swift 側から
shared.StringUtil().reverseAndAppendPlatform(text: "Hello")が呼び出せれば成功です。
注意点:iOS ビルド時に Xcode のバージョンが古いと
XCFrameworkの互換性エラーになることがあります。常に Apple の公式サイトで「最新の Xcode」かどうかを確認してください。
7. まとめ
- 最新版取得は必須:Kotlin 1.9.20(2024‑03‑07 リリース)以降、公式ブログ・GitHub タグで定期的にバージョンをチェック。
- IDE は IntelliJ IDEA Ultimate または Android Studio の最新安定版 を使用し、Kotlin と Gradle Kotlin DSL プラグインを最新版に保つ。
- KMP ウィザードでプロジェクト作成すれば
commonMain/各プラットフォーム用フォルダが自動生成され、構造が明確になる。 - Gradle 設定は kotlin("multiplatform") プラグインと target 宣言を中心に、依存ライブラリは
commonMainに集約し、dependencyUpdatesコマンドでバージョン管理を自動化。 - ロジックは共通コードに、プラットフォーム固有の実装は expect/actual で分離すれば保守コストが大幅に削減できる。
- ビルド・デバッグは Android Studio の Run タスクと Xcode の XCFramework 統合でシームレスに行える。
これらの手順を踏むことで、Android、iOS、JVM、JavaScript 向けアプリを単一コードベースから安全かつ効率的にビルド・デプロイできるようになります。質問や環境固有の問題が出た場合は、公式リポジトリの Issues や Kotlin Slack の #multiplatform チャンネルで最新情報を取得してください。