Kotlin Multiplatform 入門
マルチプラットフォームプログラミングのサポートは、Kotlin の主要な利点の 1 つです。ネイティブプログラミングの柔軟性と利点を維持しながら、異なるプラットフォームに対して同じコードを記述し、保守する時間を削減できます。
主要な概念を学ぶ
Kotlin Multiplatform を使用すると、モバイル、Web、デスクトップを問わず、異なるプラットフォーム間でコードを共有できます。コードがコンパイルされるプラットフォームは、ターゲット (targets) のリストによって定義されます。
各ターゲットには、対応する ソースセット (source set) があります。これは、独自の依存関係とコンパイラオプションを持つソースファイルの集合を表します。プラットフォーム固有のソースセット(例えば JVM 用の jvmMain)では、プラットフォーム固有のライブラリや API を使用できます。
ターゲットのサブセット間でコードを共有するには、中間ソースセットを使用します。例えば、appleMain ソースセットは、すべての Apple プラットフォーム間で共有されるコードを表します。すべてのプラットフォームで共有され、宣言されたすべてのターゲットに対してコンパイルされるコードは、独自のソースセットである commonMain を持ちます。ここではプラットフォーム固有の API は使用できませんが、マルチプラットフォームライブラリを活用できます。
特定のターゲット向けにコンパイルする際、Kotlin は共通のソースセット、関連する中間ソースセット、およびターゲット固有のソースセットを組み合わせます。
このトピックの詳細については、以下を参照してください。
コード共有メカニズムを使用する
類似したターゲットのサブセット間でコードを共有する方が便利な場合があります。Kotlin Multiplatform は、デフォルトの階層テンプレート (default hierarchy template) を使用して、これらの作成を簡素化する方法を提供します。これには、プロジェクトで指定したターゲットに基づいて作成される、事前に定義された中間ソースセットのリストが含まれています。
共有コードからプラットフォーム固有の API にアクセスするために、別の Kotlin のメカニズムである expect および actual 宣言 (expected and actual declarations) を使用できます。この方法では、共通コードでプラットフォーム固有の API を expect(期待)することを宣言し、各ターゲットプラットフォームに対して個別の actual(実際)の実装を提供できます。このメカニズムは、関数、クラス、インターフェースなど、さまざまな Kotlin の概念で使用できます。例えば、共通コードで関数を定義し、対応するソースセットでプラットフォーム固有のライブラリを使用してその実装を提供できます。
このトピックの詳細については、以下を参照してください。
依存関係を追加する
Kotlin Multiplatform プロジェクトは、外部ライブラリや他のマルチプラットフォームプロジェクトに依存できます。共通コードについては、commonMain ソースセットにマルチプラットフォームライブラリへの依存関係を追加できます。Kotlin は自動的に適切なプラットフォーム固有の部分を解決し、他のソースセットに追加します。プラットフォーム固有の API のみが必要な場合は、対応するソースセットに依存関係を追加します。
Kotlin Multiplatform プロジェクトに Android 固有の依存関係を追加する方法は、純粋な Android プロジェクトに追加する方法と似ています。iOS 固有の依存関係を扱う場合、特別な設定なしで Apple SDK フレームワークをシームレスに統合できます。外部ライブラリやフレームワークについては、Kotlin は Objective-C および Swift との相互運用性を提供しています。
このトピックの詳細については、以下を参照してください。
iOS との統合を設定する
マルチプラットフォームプロジェクトが iOS をターゲットにしている場合、Kotlin Multiplatform の共有モジュールと iOS アプリの統合を設定できます。
そのためには、iOS フレームワークを生成し、それをローカルまたはリモートの依存関係として iOS プロジェクトに追加します。
- ローカル統合: 特別なスクリプトを使用してマルチプラットフォームプロジェクトと Xcode プロジェクトを直接接続するか、ローカルの Pod 依存関係を含むセットアップに CocoaPods 依存関係マネージャーを使用します。
- リモート統合: XCFrameworks を使用して SPM 依存関係をセットアップするか、CocoaPods を通じて共有モジュールを配布します。
このトピックの詳細については、iOS 統合方法を参照してください。
コンパイルを構成する
すべてのターゲットは、通常は本番用またはテスト用など、異なる目的のために複数のコンパイルを持つことができますが、カスタムコンパイルを定義することもできます。
Kotlin Multiplatform では、プロジェクト内のすべてのコンパイルを構成したり、ターゲット内の特定のコンパイルをセットアップしたり、個別のコンパイルを作成したりすることもできます。コンパイルを構成する際、コンパイラオプションの変更、依存関係の管理、またはネイティブ言語との相互運用性の構成が可能です。
このトピックの詳細については、コンパイルの構成を参照してください。
最終的なバイナリをビルドする
デフォルトでは、ターゲットは .klib アーティファクトにコンパイルされます。これは Kotlin/Native 自体から依存関係として利用できますが、実行したりネイティブライブラリとして使用したりすることはできません。しかし、Kotlin Multiplatform は最終的なネイティブバイナリをビルドするための追加のメカニズムを提供しています。
実行可能バイナリ、共有および静的ライブラリ、または Objective-C フレームワークを作成でき、それぞれ異なるビルドタイプに合わせて構成可能です。Kotlin は、iOS 統合のためのユニバーサル(ファット)フレームワークや XCFrameworks をビルドする方法も提供しています。
このトピックの詳細については、ネイティブバイナリのビルドを参照してください。
マルチプラットフォームライブラリを作成する
共通コードと、JVM、Web、ネイティブプラットフォーム用のプラットフォーム固有の実装を含むマルチプラットフォームライブラリを作成できます。
Kotlin Multiplatform ライブラリの公開には、Gradle ビルドスクリプトでの特定の構成が必要です。Maven リポジトリと maven-publish プラグインを使用して公開できます。公開されると、マルチプラットフォームライブラリは他のクロスプラットフォームプロジェクトで依存関係として使用できるようになります。
このトピックの詳細については、マルチプラットフォームライブラリの公開を参照してください。
