Kotlin/Wasm
Kotlin/Wasmには、KotlinコードをWebAssembly (Wasm)形式にコンパイルする機能があります。 Kotlin/Wasmを使用すると、Wasmをサポートし、Kotlinの要件を満たす様々な環境やデバイスで動作するアプリケーションを作成できます。
Wasmは、スタックベースの仮想マシン用のバイナリ命令形式です。この形式は独自の仮想マシン上で実行されるため、プラットフォームに依存しません。WasmはKotlinやその他の言語にコンパイルターゲットを提供します。
Kotlin/Wasmは、Compose Multiplatformで構築されたウェブアプリケーション開発のためにブラウザなどの様々なターゲット環境で、またはブラウザ外のスタンドアロンWasm仮想マシンで利用できます。ブラウザ外のケースでは、WebAssembly System Interface (WASI)がプラットフォームAPIへのアクセスを提供し、これも利用できます。
Kotlin/WasmとCompose Multiplatform
Kotlinを使用すると、Compose MultiplatformとKotlin/Wasmを通じて、アプリケーションを構築し、モバイルおよびデスクトップのユーザーインターフェース (UI) をウェブプロジェクトで再利用できます。
Compose Multiplatformは、KotlinとJetpack Composeをベースにした宣言型フレームワークで、UIを一度実装するだけで、ターゲットとするすべてのプラットフォームで共有できます。
ウェブプラットフォームの場合、Compose MultiplatformはKotlin/Wasmをコンパイルターゲットとして使用します。Kotlin/WasmとCompose Multiplatformで構築されたアプリケーションは、wasm-js
ターゲットを使用し、ブラウザで実行されます。
Compose MultiplatformとKotlin/Wasmで構築されたアプリケーションのオンラインデモを見る
TIP
Kotlin/Wasmで構築されたアプリケーションをブラウザで実行するには、新しいガベージコレクションとレガシー例外処理のプロポーザルをサポートするブラウザバージョンが必要です。ブラウザのサポート状況を確認するには、WebAssembly ロードマップを参照してください。
さらに、Kotlin/Wasmでは、最も人気のあるKotlinライブラリをすぐに利用できます。他のKotlinおよびMultiplatformプロジェクトと同様に、ビルドスクリプトに依存関係の宣言を含めることができます。詳細については、マルチプラットフォームライブラリへの依存関係の追加を参照してください。
ご自身で試してみませんか?
Kotlin/WasmとWASI
Kotlin/Wasmは、サーバーサイドアプリケーションにWebAssembly System Interface (WASI)を使用します。 Kotlin/WasmとWASIで構築されたアプリケーションはWasm-WASIターゲットを使用し、WASI APIを呼び出してブラウザ環境外でアプリケーションを実行できます。
Kotlin/WasmはWASIを活用してプラットフォーム固有の詳細を抽象化し、同じKotlinコードを様々なプラットフォームで実行できるようにします。これにより、各ランタイムでカスタム処理を必要とせずに、ウェブアプリケーションを超えてKotlin/Wasmの適用範囲を拡大します。
WASIは、WebAssemblyにコンパイルされたKotlinアプリケーションを様々な環境で実行するためのセキュアな標準インターフェースを提供します。
TIP
Kotlin/WasmとWASIの動作を確認するには、Kotlin/WasmとWASIの利用開始チュートリアルを確認してください。
Kotlin/Wasmのパフォーマンス
Kotlin/Wasmはまだアルファ版ですが、Kotlin/Wasm上で動作するCompose Multiplatformはすでに有望なパフォーマンス特性を示しています。その実行速度はJavaScriptを上回り、JVMに匹敵する水準に近づいていることがわかります。
私たちは定期的にKotlin/Wasmのベンチマークを実行しており、これらの結果はGoogle Chromeの最新バージョンでのテストによるものです。
ブラウザAPIのサポート
Kotlin/Wasmの標準ライブラリは、DOM APIを含むブラウザAPIの宣言を提供します。 これらの宣言を使用すると、Kotlin APIを直接使用して、様々なブラウザ機能にアクセスし、利用できます。 例えば、Kotlin/Wasmアプリケーションでは、DOM要素の操作やFetch APIの使用を、これらの宣言を一から定義することなく実行できます。詳細については、Kotlin/Wasmブラウザのサンプルを参照してください。
ブラウザAPIサポートのための宣言は、JavaScriptの相互運用機能を使用して定義されています。 同じ機能を使用して独自の宣言を定義できます。さらに、Kotlin/WasmとJavaScriptの相互運用により、JavaScriptからKotlinコードを使用できます。詳細については、JavaScriptでKotlinコードを使用するを参照してください。
フィードバックを送る
Kotlin/Wasmのフィードバック
Slack: Slackの招待を入手し、
#webassembly
チャンネルで開発者に直接フィードバックを提供してください。- 問題はYouTrackで報告してください。
Compose Multiplatformのフィードバック
Slack:
#compose-web
パブリックチャンネルでフィードバックを提供してください。- 問題はGitHubで報告してください。
さらに詳しく
- このYouTubeプレイリストでKotlin/Wasmについてさらに学びましょう。
- GitHubリポジトリでKotlin/Wasmのサンプルを探索しましょう。