Skip to content

Compose Multiplatform と Jetpack Compose

Compose Multiplatform created by JetBrains, Jetpack Compose created by Google

この記事では、Compose MultiplatformとJetpack Composeの関係を説明します。 2つのツールキットがどのように連携しているか、ターゲット間でのライブラリの扱い方、 そしてマルチプラットフォームプロジェクト用に独自のUIライブラリを作成または適応させる方法を学びます。

Compose Multiplatformは、JetBrainsが開発したクロスプラットフォームUIツールキットです。 GoogleのAndroid向けJetpack Composeツールキットを拡張し、 追加のターゲットプラットフォームをサポートしています。

Compose Multiplatformは、共通KotlinコードからCompose APIを利用可能にし、 Android、iOS、デスクトップ、およびウェブで実行できる共通のCompose UIコードを記述できるようにします。

Compose MultiplatformJetpack Compose
PlatformsAndroid, iOS, desktop, webAndroid
Supported byJetBrainsGoogle

Jetpack Compose とコンポーザブル

Jetpack Composeは、Androidネイティブインターフェースを構築するための宣言型UIツールキットです。 その基盤は、@Composableアノテーションでマークされた_コンポーザブル関数_です。 これらの関数はUIの一部を定義し、基となるデータが変更されると自動的に更新されます。 コンポーザブルを組み合わせて、レイアウトを構築したり、ユーザー入力を処理したり、状態を管理したり、アニメーションを適用したりできます。 Jetpack Composeには、TextButtonRowColumnなどの共通UIコンポーネントが含まれており、モディファイアでカスタマイズできます。

Compose Multiplatformも同じ原則に基づいて構築されています。 Jetpack Composeと同じComposeコンパイラとランタイムを共有し、同じAPI(@Composable関数、 rememberのような状態管理ツール、レイアウトコンポーネント、モディファイア、アニメーションサポート)を使用します。 これは、Android、iOS、デスクトップ、ウェブ向けのクロスプラットフォームUIを構築するために、 Jetpack Composeの知識をCompose Multiplatformで再利用できることを意味します。

Compose Multiplatform と Jetpack Compose の機能

両方のUIフレームワークの基本については、Googleの公式ドキュメントを含む、 ほぼすべてのJetpack Compose資料から学ぶことができます。

当然ながら、Compose Multiplatformにはプラットフォーム固有の機能と考慮事項があります。

  • Androidのみのコンポーネントページには、 Androidプラットフォームに密接に結びついており、 そのため共通のCompose Multiplatformコードからは利用できないAPIがリストされています。
  • デスクトップ用のウィンドウ処理APIやiOS用のUIKit互換APIなど、一部のプラットフォーム固有APIは、 それぞれのプラットフォームでのみ利用可能です。

一般的なコンポーネントとAPIの提供状況の概要を以下に示します。

Compose MultiplatformJetpack Compose
Compose Animationはいはい
Compose Compilerはいはい
Compose Foundationはいはい
Compose Materialはいはい
Compose Material 3はいはい
Compose Runtimeはい(androidx.compose.runtime.rxjava2およびandroidx.compose.runtime.rxjava3を除く)はい
Compose UIはいはい
Jetpack Lifecycleはいはい
Jetpack ViewModelはいはい
Jetpack Navigation Composeはいはい
ResourcesResクラスを使用するCompose MultiplatformリソースライブラリRクラスを使用するAndroidリソースシステム
Maps Composeいいえはい
サードパーティライブラリ(UIコンポーネント、ナビゲーション、アーキテクチャなど)Compose MultiplatformライブラリJetpack ComposeおよびCompose Multiplatformライブラリ

技術的な詳細

Compose Multiplatformは、Googleが公開しているコードとリリースに基づいて構築されています。 GoogleはAndroid向けJetpack Composeに注力していますが、 Compose Multiplatformを可能にするためにGoogleとJetBrainsの間で緊密な連携が行われています。

Jetpackには、FoundationやMaterialのようなファーストパーティライブラリが含まれており、 これらはGoogleがAndroid向けに公開しています。 これらのライブラリが提供するAPIを共通コードから利用できるようにするため、 JetBrainsはこれらのライブラリのマルチプラットフォームバージョンを管理しており、Android以外のターゲット向けに公開されています。

リリースサイクルについては、互換性とバージョンページで詳しく学ぶことができます。

Compose MultiplatformアプリケーションをAndroid向けにビルドする場合、Googleが公開しているJetpack Composeアーティファクトを使用します。 例えば、compose.material3を依存関係に追加すると、プロジェクトはAndroidターゲットではandroidx.compose.material3:material3を、 他のターゲットではorg.jetbrains.compose.material3:material3を使用します。 これは、マルチプラットフォームアーティファクトのGradle Module Metadataに基づいて自動的に行われます。

Compose Multiplatform向けライブラリ

Compose Multiplatformを使用することで、Compose APIを使用するライブラリをKotlin Multiplatformライブラリとして公開できます。 これにより、複数のプラットフォームをターゲットとする共通Kotlinコードから利用可能になります。

したがって、Compose APIを使用して新しいライブラリを構築している場合は、その利点を活かしてCompose Multiplatformを使用してマルチプラットフォームライブラリとして構築することを検討してください。 すでにAndroid向けにJetpack Composeライブラリを構築している場合は、そのライブラリをマルチプラットフォーム対応にすることを検討してください。 エコシステムには、すでに多くのCompose Multiplatformライブラリが利用可能です。

ライブラリがCompose Multiplatformで公開されると、Jetpack Composeのみを使用するアプリでもシームレスに利用できます。 それらのアプリは、単にライブラリのAndroidアーティファクトを使用するだけです。

次のステップ

以下のコンポーネントのCompose Multiplatform実装について、さらに詳しくお読みください。