【Compose Multiplatform】プロジェクト移行の検討と開発ガイド

はじめに

Compose Multiplatform(CMP)は開発者にクロスプラットフォーム開発の強力なツールを提供します
しかし、ComposeプロジェクトからCMPへの移行にはいくつかの課題もあります
本記事では移行プロセスにおける重要なポイントと注意点を詳しく説明します

初期移行コスト

最初に、CMPがどのようにクロスプラットフォームを実現しているかを理解する必要があります
そのため、プロジェクト構造を
理解するのに少し時間がかかります
以下で簡単に確認していきましょう

CMP開発では、複数のフォルダ構造に慣れる必要があります:
Cover

共通コードはcommonMainに配置します:
Cover

各環境で必要なライブラリをインポートします:
Cover

デフォルトではlib.version.tomlを使用して設定するため
.tomlについて理解する必要がありますが
実際には非常に簡単です
公式のデフォルト設定で十分機能します
特別な設定が必要でない限り

以前書いたメモがこちらにあります
参考まで

ComposeプロジェクトからCMPプロジェクトへのライブラリ移行参考


  • 元々Androidプロジェクトでよく使われるライブラリや公式推奨のライブラリを使用していた場合(表の左側)
    CMPで開発を試みた後、使用するライブラリの移行コストにいくつかのメリットを見つけることができます(表の右側)
    これは、Compose開発でほとんど使用したことのあるものだからです
Feature Compose Project CMP Project
API okhttp + retrofit2 Ktor + Ktorfit
navigation navigation-compose navigation-compose
design material 3 material 3
DI hilt koin
UI jetpack compose jetpack compose
JSON kotlinx.serialization kotlinx.serialization
Database room SqlDelight
Image coil coil
Push FCM, UM, HW 可能需自行實作各平台
Splash splashscreen 可能需自行實作或用 Compose 實現
発生する可能性のある問題
  1. クロスプラットフォームの要件の違い:
    例えば、AndroidはContextが必要ですが、iOSは必要ありません:

    完全なメモ:【Compose Multiplatform】KoinでAndroidのContextを扱うクロスプラットフォームアプリの実装
  2. プラットフォーム固有の実装:
    例えば、モバイルではローカルの永続ストレージがよく使われます
    Androidでは、この問題を処理するためにDataStoreを使用します
    では、複数のプラットフォームでどのように使用すればよいでしょうか?
    expectとactualキーワードの使用:
    個別に実装する必要があるにもかかわらず
    いくつかの一般的なライブラリは
    CMPがKotlin実装でサポートしています
    そのため、プラットフォーム別の実装でも、純粋な.ktで書くことができます
    上記のiosMainで実装されたDataStoreのように

    完全なメモ:【Compose Multiplatform】ローカル永続ストレージをDataStoreで実装する方法

  3. CMPライブラリの互換性問題やバグが継続的に修正されている:
    例えば、SQLDelight 2.0.0バージョンではiOSでビルドエラーが発生します:
将来の展望

Googleは2024年5月14日のブログでKMPへのサポートについて言及しています:
Cover
これは将来的により多くのライブラリがサポートされる可能性があることを意味するかもしれません。

まとめ
  • CMPは強力なクロスプラットフォーム開発機能を提供しますが、新しいプロジェクト構造への適応が必要です
  • ほとんどの一般的なライブラリには対応するCMPバージョンがあります
    例えば、Compose Appの開発でよく使用されるものは直接使用できます
    DataStore、Roomなど
  • プラットフォームの違いを処理する際、expectとactualキーワードが非常に役立ちます
  • ライブラリのバージョン互換性の問題に注意してください
    現在の開発では
    いくつかの設定互換性の問題に遭遇しています
    例:Kotlin 2.0.0でのRoom互換性の問題
    CMPでCocoaPodsを設定する際のembedAndSignエラーなど

  • Googleの最新アップデートに注目して、さらなるサポートとリソースを得ましょう
    GPTに直接尋ねてみましたが
    それほど正確ではないかもしれません
    多くの互換性問題は自分で調査する必要があります
    あるいは将来的にデータがより豊富になれば、より正確な回答が得られるかもしれません

You might also enjoy