Kotlin/Wasm
Kotlin/Wasmを使用すると、KotlinコードをWebAssembly (Wasm)形式にコンパイルできます。 Kotlin/Wasmを使用すると、Wasmをサポートし、Kotlinの要件を満たすさまざまな環境やデバイスで実行できるアプリケーションを作成できます。
Wasmは、スタックベースの仮想マシン用のバイナリ命令形式です。この形式は、独自の仮想マシンで実行されるため、プラットフォームに依存しません。Wasmは、Kotlinやその他の言語にコンパイルターゲットを提供します。
Kotlin/Wasmは、Compose Multiplatformで構築されたWebアプリケーションを開発するためにブラウザなどのさまざまなターゲット環境で使用したり、スタンドアロンのWasm仮想マシンでブラウザの外部で使用したりできます。ブラウザの外部で使用する場合は、WebAssembly System Interface (WASI)がプラットフォームAPIへのアクセスを提供し、これを利用することもできます。
Kotlin/WasmとCompose Multiplatform
Kotlinを使用すると、Compose MultiplatformとKotlin/Wasmを通じて、モバイルおよびデスクトップのユーザーインターフェース (UI) をWebプロジェクトで構築および再利用できます。
Compose Multiplatformは、KotlinとJetpack Composeに基づく宣言型フレームワークであり、UIを一度実装して、ターゲットとするすべてのプラットフォームで共有できます。
Webプラットフォームの場合、Compose MultiplatformはKotlin/Wasmをコンパイルターゲットとして使用します。Kotlin/WasmとCompose Multiplatformで構築されたアプリケーションは、wasm-js
ターゲットを使用し、ブラウザで実行されます。
Compose MultiplatformとKotlin/Wasmで構築されたアプリケーションのオンラインデモをご覧ください

Kotlin/Wasmで構築されたアプリケーションをブラウザで実行するには、新しいガベージコレクションとレガシー例外処理の提案をサポートするブラウザバージョンが必要です。ブラウザのサポート状況を確認するには、WebAssembly roadmapをご覧ください。
さらに、最も一般的なKotlinライブラリをKotlin/Wasmですぐに使用できます。他のKotlinおよびMultiplatformプロジェクトと同様に、ビルドスクリプトに依存関係の宣言を含めることができます。詳細については、Adding dependencies on multiplatform librariesを参照してください。
試してみませんか?
Kotlin/WasmとWASI
Kotlin/Wasmは、サーバー側アプリケーションにWebAssembly System Interface (WASI)を使用します。 Kotlin/WasmとWASIで構築されたアプリケーションは、Wasm-WASIターゲットを使用し、WASI APIを呼び出して、ブラウザ環境の外部でアプリケーションを実行できます。
Kotlin/WasmはWASIを活用してプラットフォーム固有の詳細を抽象化し、同じKotlinコードを多様なプラットフォームで実行できるようにします。これにより、各ランタイムにカスタム処理を必要とせずに、Kotlin/WasmのリーチをWebアプリケーションを超えて拡張します。
WASIは、さまざまな環境でWebAssemblyにコンパイルされたKotlinアプリケーションを実行するための安全な標準インターフェースを提供します。
Kotlin/WasmとWASIの動作を確認するには、Get started with Kotlin/Wasm and WASI tutorialをご覧ください。
Kotlin/Wasmのパフォーマンス
Kotlin/WasmはまだAlpha版ですが、Kotlin/Wasmで実行されているCompose Multiplatformは、すでに有望なパフォーマンストレイトを示しています。その実行速度はJavaScriptよりも優れており、JVMの実行速度に近づいています。

Kotlin/Wasmで定期的にベンチマークを実行しており、これらの結果は、最近のバージョンのGoogle Chromeでのテストから得られたものです。
ブラウザAPIのサポート
Kotlin/Wasm標準ライブラリは、DOM APIを含むブラウザAPIの宣言を提供します。 これらの宣言を使用すると、Kotlin APIを直接使用して、さまざまなブラウザ機能にアクセスして利用できます。 たとえば、Kotlin/Wasmアプリケーションでは、DOM要素の操作やAPIのフェッチを、最初からこれらの宣言を定義せずに使用できます。詳細については、Kotlin/Wasm browser exampleをご覧ください。
ブラウザAPIサポートの宣言は、JavaScript interoperability capabilitiesを使用して定義されています。 同じ機能を使用して、独自の宣言を定義できます。さらに、Kotlin/Wasm–JavaScriptの相互運用性により、JavaScriptからKotlinコードを使用できます。詳細については、Use Kotlin code in JavaScriptを参照してください。
フィードバックをお寄せください
Kotlin/Wasmのフィードバック
Slack: Slack招待状を入手し、#webassemblyチャンネルで開発者に直接フィードバックを提供してください。
- YouTrackで問題を報告してください。
Compose Multiplatformのフィードバック
Slack: #compose-webパブリックチャンネルでフィードバックを提供してください。
- GitHubで問題を報告する。
さらに詳しく
- このYouTubeプレイリストでKotlin/Wasmの詳細をご覧ください。
- GitHubリポジトリでKotlin/Wasmの例をご覧ください。