1. モバイル開発でよくあるコード重複の問題

多くのモバイルアプリは次のような構造で開発される。

この構造では次のような処理が重複しやすい。

・API通信

・データ処理

・ビジネスロジック

 

例えばAPIレスポンスの解析やドメインロジックは、AndroidとiOSで別々に実装されることが多い。

 

2. Kotlin Multiplatformとは何か

Kotlin Multiplatformは、Kotlinコードを複数プラットフォームで共有するための仕組みである。共通ロジックを1つのモジュールにまとめ、AndroidとiOSの両方から利用できる。

 

基本構造は次の通りである。

 

このshared moduleにプラットフォームに依存しないコードを実装する。

 

3. KotlinコードがAndroidとiOSで動く仕組み

Kotlin Multiplatformでは、共通コードはプラットフォームごとにネイティブコードへコンパイルされる。

 

Androidでは通常のKotlinコードとして動作する。一方、iOSではKotlin/NativeによってFrameworkが生成され、アプリから利用される。

 

4. プラットフォームごとの実装を分離する方法(expect / actual)

Kotlin Multiplatformでは、プラットフォーム依存の処理を分離するために expect/actualを使用する。

 

・共通コード

 

・Android実装

 

・iOS実装

 

この仕組みにより、共通インターフェースを維持しながらプラットフォーム固有APIを利用できる。

 

5. Kotlin Multiplatformプロジェクトの基本構造

KMPプロジェクトでは、共通コードを配置するshared moduleを作成する。

 

一般的な構造は次の通りである。

 

commonMainには共通ロジックを実装し、androidMainiosMainにはプラットフォーム固有コードを配置する。

 

6. AndroidとiOSアプリへの統合

共有コードはそれぞれのアプリから利用される。

 

Androidの場合

・Gradle dependencyとして利用

 

iOSの場合

・Kotlin/NativeでFrameworkを生成

・Xcodeプロジェクトに追加

 

構造は次のようになる。

 

7. Android StudioからiOSアプリを実行する

Kotlin MultiplatformプロジェクトではAndroid StudioからiOSアプリを実行することもできる。

 

基本的な流れは次の通りである。

 

この構成により、Kotlinコードを変更しながらAndroidとiOS両方で動作確認できる。

 

8. Compose MultiplatformによるUI共有

Compose MultiplatformではUIコードも共有できる。

 

構造

 Compose Multiplatformでは宣言的UIを利用し、AndroidとiOSの両方で同じUIコードを実行できる。ただしiOSではネイティブUIと組み合わせて使用するケースも多い。

 

9. Kotlin Multiplatformを使った開発構造

KMPを利用するとアプリの構造は次のようになる。

 

・従来

 

・KMP

ビジネスロジックを共通化できる点が大きな特徴である。

 

10. Kotlin Multiplatformが向いている領域

KMPはすべてのコードを共有するための技術ではない。特に共有しやすい領域は次の通りである。

一方、UIやOS固有機能はプラットフォームごとに実装する。

 

11. 導入する際の注意点

Kotlin Multiplatformを導入する場合、いくつかの点に注意する必要がある。

そのため、既存プロジェクトでは段階的に導入するケースが多い。

 

Kotlin MultiplatformはAndroidとiOSでビジネスロジックを共有するための仕組みであり、モバイルアプリのコード重複を減らすことができる。共有コードはKotlinで実装され、Androidでは通常のKotlinコードとして動作し、iOSではKotlin/Nativeによって生成されたFrameworkとして利用される。さらにCompose Multiplatformの進展によりUI共有の可能性も広がっている。ただしすべてのコードを共通化できるわけではなく、UIやプラットフォーム固有機能はそれぞれの環境で実装する必要がある。Kotlin Multiplatformはネイティブ開発を置き換えるものではなく、AndroidとiOSの開発構造を整理するための選択肢の一つとして利用されている。