Kotlin Multiplatform vs Flutter
KMP(ビジネスロジック共有+ネイティブUI)vs Flutter(UI+ランタイム共有)——クロスプラットフォームモバイル比較。パフォーマンス、開発者体験、エコシステム。
SwiftUIのコードでiOSとAndroidに同時に展開
Kotlin言語は2012年から; KMPは本番運用対応の共有ロジック+ネイティブUIモデル
証拠が示すのは明確な「勝者」ではなく明確な「誰にとってか」です。Swift 6.3の公式SDKとSkipの無料化により、「Kotlinを学ばずにAndroidへ出す」が初めて擁護可能になりました。 本番規模ではKMPが依然先行します。Duolingo、Google、McDonald's、Netflixといった大規模事例があります。Skipのギャラリーも24本の実名アプリを挙げますが、公開された規模や指標はありません。 小規模チームでKotlinを学ぶ時間がないならSkipを試す。企業でリスク許容度が低いならKMPが依然安全な選択です。
| カテゴリー | Skip (Swift on Android) | Kotlin Multiplatform |
|---|---|---|
| パフォーマンス | 8/10 | 9/10 |
| 学習のしやすさ | 6/10 | 6/10 |
| エコシステム | 6/10 | 9/10 |
| コミュニティ | 5/10 | 9/10 |
| 求人市場 | 4/10 | 8/10 |
| 将来性 | 7/10 | 9/10 |
// Skip: XcodeとAndroid Studioがインストールされたマシンでのセットアップと新規プロジェクト
// 出典: https://skip.dev/docs/gettingstarted/ + https://skip.dev/docs/skip-cli/
// 1) Skipツールチェーンをインストール(Homebrew)
brew install skip
// 2) 環境を検証(Xcode、Android Studio、Java、Gradleのバージョン)
skip checkup
// 3) 新しいSkip Appプロジェクトを作成(Fuseモード、iOS+Android)。
// `skip create`は完全にインタラクティブでフラグを受け付けない。非インタラクティブ版は`skip init`:
skip init --native-app --appid=com.example.HelloSkip hello-skip HelloSkip
// 4) 既存のiOSアプリにLibraryモデルでAndroidを追加したい場合:
// 共有ロジックを別のネイティブライブラリモジュールに切り出す
skip init --native-model shared-feature SharedFeature
// 生成されたSwiftUIビューは、通常のiOS SwiftUIビューと同じように書く:
import SwiftUI
struct ContentView: View {
@State private var count = 0
var body: some View {
VStack(spacing: 16) {
Text("SkipでAndroidへ展開")
.font(.title2)
Text("カウント: \(count)")
Button("増やす") {
count += 1
}
.buttonStyle(.borderedProminent)
}
.padding()
}
}
// 5) Android側でビルドして実行(Gradle経由。裏側で
// SwiftUIビューツリーがJetpack Compose呼び出しに変換される)。
// 前提条件: エミュレータは自分で起動すること — `skip app launch`は代わりに起動してくれない。
cd hello-skip
skip android emulator launch
skip app launch --android// Kotlin Multiplatform: 共有ロジック + expect/actual
// 出典: https://kotlinlang.org/docs/multiplatform/get-started.html
// commonMain/kotlin/Counter.kt — 全プラットフォームで共有されるロジック
class Counter {
private var value: Int = 0
fun increment(): Int { value += 1; return value }
fun current(): Int = value
}
// commonMain/kotlin/Platform.kt
expect fun platformName(): String
// androidMain/kotlin/Platform.android.kt
actual fun platformName(): String = "Android ${android.os.Build.VERSION.SDK_INT}"
// iosMain/kotlin/Platform.ios.kt
import platform.UIKit.UIDevice
actual fun platformName(): String =
UIDevice.currentDevice.systemName() + " " + UIDevice.currentDevice.systemVersion
// Android側ではCompose UIが共有されたCounterを使用する
@Composable
fun CounterScreen(counter: Counter) {
var count by remember { mutableStateOf(counter.current()) }
Column(modifier = Modifier.padding(16.dp)) {
Text("Kotlin Multiplatformで共有するロジック")
Text("カウント: $count")
Button(onClick = { count = counter.increment() }) { Text("増やす") }
}
}
// build.gradle.kts (module: shared)
kotlin {
androidTarget()
listOf(iosX64(), iosArm64(), iosSimulatorArm64()).forEach {
it.binaries.framework { baseName = "Shared" }
}
sourceSets {
commonMain.dependencies {
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.9.0")
}
}
}証拠が示すのは明確な「勝者」ではなく明確な「誰にとってか」です。Swift 6.3の公式SDKとSkipの無料化により、「Kotlinを学ばずにAndroidへ出す」が初めて擁護可能になりました。 本番規模ではKMPが依然先行します。Duolingo、Google、McDonald's、Netflixといった大規模事例があります。Skipのギャラリーも24本の実名アプリを挙げますが、公開された規模や指標はありません。 小規模チームでKotlinを学ぶ時間がないならSkipを試す。企業でリスク許容度が低いならKMPが依然安全な選択です。
無料相談を受けるはい。Swift 6.3(2026年3月24日)以降、公式のSwift SDK for Androidが存在し、SwiftパッケージをAndroidターゲット向けに直接コンパイルできます。Skipのようなツールはこの上に構築され、SwiftUIビューを実際のJetpack Compose UIに変換することで実践的な開発フローを提供します。出典: swift.org/blog/swift-6.3-released。