トラブルシューティング
Kotlin/Wasmは、WebAssembly内で改善と新機能を導入するために、ガベージコレクションや例外処理といった新しいWebAssemblyプロポーザルに依存しています。
ただし、これらの機能が適切に動作するためには、新しいプロポーザルをサポートする環境が必要です。場合によっては、プロポーザルと互換性を持たせるために環境をセットアップする必要があるかもしれません。
ブラウザバージョン
Kotlin/Wasmでビルドされたアプリケーションをブラウザで実行するには、新しいWebAssemblyガベージコレクション (WasmGC) 機能をサポートするブラウザバージョンが必要です。お使いのブラウザバージョンが新しいWasmGCをデフォルトでサポートしているか、または環境に変更を加える必要があるかを確認してください。
Chrome
バージョン119以降の場合:
デフォルトで動作します。
以前のバージョン (119未満) の場合:
NOTE
古いブラウザでアプリケーションを実行するには、1.9.20より古いKotlinバージョンが必要です。
- ブラウザで
chrome://flags/#enable-webassembly-garbage-collection
にアクセスします。 - WebAssembly Garbage Collection を有効にします。
- ブラウザを再起動します。
- ブラウザで
Chromiumベースのブラウザ
Edge、Brave、Opera、Samsung InternetなどのChromiumベースのブラウザを含みます。
バージョン119以降の場合:
デフォルトで動作します。
以前のバージョン (119未満) の場合:
NOTE
古いブラウザでアプリケーションを実行するには、1.9.20より古いKotlinバージョンが必要です。
アプリケーションを
--js-flags=--experimental-wasm-gc
コマンドライン引数とともに実行します。
Firefox
バージョン120以降の場合:
デフォルトで動作します。
バージョン119の場合:
- ブラウザで
about:config
にアクセスします。 javascript.options.wasm_gc
オプションを有効にします。- ページを更新します。
- ブラウザで
Safari/WebKit
バージョン18.2以降の場合:
デフォルトで動作します。
以前のバージョン (18.2未満) の場合:
サポートされていません。
NOTE
Safari 18.2は、iOS 18.2、iPadOS 18.2、visionOS 2.2、macOS 15.2、macOS Sonoma、およびmacOS Venturaで利用可能です。
iOSおよびiPadOSでは、Safari 18.2はオペレーティングシステムにバンドルされています。これを入手するには、デバイスをバージョン18.2以降にアップデートしてください。
詳細については、Safariリリースノートを参照してください。
Wasmプロポーザルのサポート
Kotlin/Wasmの改善は、WebAssemblyプロポーザルに基づいています。ここでは、WebAssemblyのガベージコレクションおよび(レガシーな)例外処理プロポーザルのサポートに関する詳細が確認できます。
ガベージコレクションプロポーザル
Kotlin 1.9.20以降、KotlinツールチェインはWasmガベージコレクション(WasmGC)プロポーザルの最新バージョンを使用しています。
このため、Wasmプロジェクトを最新バージョンのKotlinにアップデートすることを強くお勧めします。また、Wasm環境では最新バージョンのブラウザを使用することをお勧めします。
例外処理プロポーザル
Kotlinツールチェインは、生成されたWasmバイナリをより広範な環境で実行できるように、デフォルトでレガシー例外処理プロポーザルを使用しています。
Kotlin 2.0.0以降、Kotlin/Wasm内で新しいバージョンのWasm例外処理プロポーザルのサポートを導入しました。
このアップデートにより、新しい例外処理プロポーザルがKotlinの要件に適合し、プロポーザルの最新バージョンのみをサポートする仮想マシン上でKotlin/Wasmを使用できるようになります。
新しい例外処理プロポーザルは、-Xwasm-use-new-exception-proposal
コンパイラオプションを使用して有効化されます。これはデフォルトで無効になっています。
TIP
プロジェクトのセットアップ、依存関係の使用、その他のタスクについては、Kotlin/Wasmの例で詳しく学ぶことができます。
デフォルトインポートの使用
Kotlin/WasmコードをJavaScriptにインポートする方法は、デフォルトエクスポートから名前付きエクスポートに移行しました。
デフォルトインポートを引き続き使用したい場合は、新しいJavaScriptラッパーモジュールを生成します。以下のスニペットを含む .mjs
ファイルを作成します。
// Specifies the path to the main .mjs file
import * as moduleExports from "./wasm-test.mjs";
export { moduleExports as default };
新しい.mjs
ファイルをリソースフォルダーに配置すると、ビルドプロセス中にメインの.mjs
ファイルの隣に自動的に配置されます。
.mjs
ファイルをカスタムの場所に配置することもできます。この場合、手動でメインの.mjs
ファイルの隣に移動するか、インポートステートメントのパスをその場所に一致するように調整する必要があります。
Kotlin/Wasmコンパイルの遅延
Kotlin/Wasmプロジェクトで作業していると、コンパイル時間が遅くなることがあります。これは、変更を加えるたびにKotlin/Wasmツールチェインがコードベース全体を再コンパイルするためです。
この問題を軽減するために、Kotlin/Wasmターゲットはインクリメンタルコンパイルをサポートしており、これによりコンパイラは前回のコンパイルからの変更に関連するファイルのみを再コンパイルできるようになります。
インクリメンタルコンパイルを使用すると、コンパイル時間が短縮されます。現時点では開発速度が2倍になりますが、将来のリリースでさらに改善される予定です。
現在のセットアップでは、Wasmターゲットのインクリメンタルコンパイルはデフォルトで無効になっています。 これを有効にするには、プロジェクトの local.properties
または gradle.properties
ファイルに以下の行を追加します。
kotlin.incremental.wasm=true