Skip to content

概要

Kotlinは、Kotlin Multiplatformを通じて、ウェブ開発のための2つのアプローチを提供しています:

どちらのアプローチでもウェブアプリ内でコードを共有できますが、それぞれ異なるユースケースをサポートしています。 また、ターゲットブラウザのサポートなど、技術的な側面でも異なります。

Kotlin/JS

Kotlin/JSは、コード、標準ライブラリ、およびサポートされているすべての依存関係をJSにトランスパイルすることで、JavaScript(JS)環境でKotlinアプリを実行できるようにします。

Kotlin/JSで開発する場合、ブラウザまたはNode.js環境のいずれかでアプリを実行できます。

Kotlin/JSターゲットの設定に関する詳細は、Gradleプロジェクトの構成ガイドを参照してください。

Kotlin/JSのユースケース

Kotlin/JSは、以下を目的とする場合に適しています:

JavaScript/TypeScriptのコードベースとビジネスロジックを共有する

Kotlinコード(ドメインロジックやデータロジックなど)をネイティブのJavaScript/TypeScriptアプリと共有する必要がある場合、Kotlin/JSターゲットは以下を提供します:

  • JavaScript/TypeScriptとの直接的な相互運用性。
  • 相互運用における最小限のオーバーヘッド(例:不要なデータコピーの回避)。 これにより、共有コードをJSベースのワークフローにスムーズに統合できます。

コードを共有せずにKotlinでウェブアプリを構築する

ウェブアプリが完全にKotlinで実装され、他のプラットフォーム(iOS、Android、またはデスクトップ)と共有しないプロジェクトの場合、HTMLベースのソリューションの方がより優れた制御を提供できます。

HTMLベースのソリューションは、SEOとアクセシビリティを向上させます。 また、ページ内検索やページ翻訳などの機能を含む、より優れたブラウザ統合を提供します。

HTMLベースのソリューションにおいて、Kotlin/JSは複数のアプローチをサポートしています:

  • KobwebKiluaなどのCompose HTMLベースのフレームワークを使用して、ComposeスタイルのアーキテクチャでUIを構築する。
  • Kotlinラッパーを備えたReactベースのソリューションを使用して、KotlinでReactコンポーネントを実装する。
Beta

Kotlin/Wasm

Kotlin/Wasmは、KotlinコードをWebAssembly (Wasm)にコンパイルし、Kotlinの要件を満たしながら、Wasmをサポートする環境やデバイス間でアプリを実行できるようにします。

ブラウザでは、Kotlin/Wasmを使用してCompose Multiplatformでウェブアプリを構築できます。 ブラウザ以外では、スタンドアロンのWasm仮想マシンで実行され、WebAssembly System Interface (WASI)を使用してプラットフォームAPIにアクセスします。

Kotlin/Wasmで開発する場合、以下のターゲットを指定できます:

  • wasmJs: ブラウザまたはNode.jsで実行する場合。
  • wasmWasi: WasmtimeやWasmEdgeなど、WASIをサポートするWasm環境で実行する場合。

Kotlin/Wasmターゲットの設定に関する詳細は、Gradleプロジェクトの構成ガイドを参照してください。

Kotlin/Wasmのユースケース

ロジックとUIの両方を複数のプラットフォーム間で共有したい場合は、Kotlin/Wasmを使用してください。

Compose Multiplatformでクロスプラットフォームアプリを構築する

ウェブを含む複数のプラットフォーム間でロジックとUIの両方を共有したい場合、Compose Multiplatformを備えたKotlin/Wasmは共有UIレイヤーを提供します:

  • すべてのプラットフォームで一貫したUI実装を保証します。
  • レンダリングの向上と、レスポンシブなアニメーションなどのよりスムーズなUI更新のためにWasmを使用します。
  • 最新バージョンのWebAssembly Garbage Collection (WasmGC)プロポーザルをサポートしており、これによりKotlin/Wasmはすべての主要なモダンブラウザで動作します。

ウェブアプローチの選択

以下の表は、ユースケースに基づいた推奨ターゲットをまとめたものです:

ユースケース推奨ターゲット説明
ビジネスロジックを共有するが、ウェブネイティブなUIを使用するKotlin/JSJSとの簡単な相互運用性と最小限のオーバーヘッドを提供します。
UIとビジネスロジックの両方を共有するKotlin/WasmCompose Multiplatformによるレンダリングで、より高いパフォーマンスを提供します。
共有しないUIKotlin/JS既存のJSエコシステムやツールを活用し、KobwebKiluaReactなどのHTMLベースのフレームワークでUIを構築できます。

適切なターゲットの選択に関するガイダンスが必要な場合は、Slackコミュニティに参加してください。 プラットフォームの違い、パフォーマンスに関する考慮事項、特定のユースケースにおける推奨プラクティスについて質問できます。

ウェブターゲットの互換モード

ウェブアプリの互換モードを有効にすると、すべてのブラウザでそのまま動作するようにできます。 このモードでは、モダンブラウザ向けにはWasmでUIを構築し、古いブラウザではJSにフォールバックさせることができます。

互換モードは、jswasmJsの両方のターゲットに対するクロスコンパイルを通じて実現されます。 ウェブの互換モードの詳細と有効化の方法についてはこちらを参照してください