トラブルシューティング
Kotlin/WasmはAlpha版です。いつでも変更される可能性があります。プロダクション環境投入前のシナリオでご使用ください。 YouTrackでのフィードバックをお待ちしております。
Kotlin/Wasmは、WebAssembly内で改善と新機能を導入するために、ガベージコレクションや例外処理のような新しいWebAssemblyプロポーザルに依存しています。
しかし、これらの機能が適切に機能するためには、新しいプロポーザルをサポートする環境が必要です。場合によっては、プロポーザルと互換性を持たせるために環境をセットアップする必要があるかもしれません。
ブラウザのバージョン
Kotlin/Wasmでビルドされたアプリケーションをブラウザで実行するには、新しいWebAssemblyガベージコレクション (WasmGC) 機能をサポートするブラウザバージョンが必要です。お使いのブラウザバージョンが新しいWasmGCをデフォルトでサポートしているか、または環境に変更を加える必要があるかを確認してください。
Chrome
バージョン 119 以降の場合:
デフォルトで動作します。
以前のバージョン:
古いブラウザでアプリケーションを実行するには、Kotlin 1.9.20 よりも古いバージョンが必要です。
- ブラウザで、
chrome://flags/#enable-webassembly-garbage-collection
にアクセスします。 - WebAssembly Garbage Collection を有効にします。
- ブラウザを再起動します。
- ブラウザで、
Chromiumベース
Edge、Brave、Opera、Samsung Internet などのChromiumベースのブラウザが含まれます。
バージョン 119 以降の場合:
デフォルトで動作します。
以前のバージョン:
古いブラウザでアプリケーションを実行するには、Kotlin 1.9.20 よりも古いバージョンが必要です。
アプリケーションを
--js-flags=--experimental-wasm-gc
コマンドライン引数とともに実行します。
Firefox
バージョン 120 以降の場合:
デフォルトで動作します。
バージョン 119 の場合:
- ブラウザで、
about:config
にアクセスします。 javascript.options.wasm_gc
オプションを有効にします。- ページを更新します。
- ブラウザで、
Safari/WebKit
バージョン 18.2 以降の場合:
デフォルトで動作します。
以前のバージョン:
サポートされていません。
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
コンパイラオプションを使用してアクティブ化されます。デフォルトでは無効になっています。
プロジェクトのセットアップ、依存関係の使用、その他のタスクの詳細については、 Kotlin/Wasmの例をご覧ください。
デフォルトインポートの使用
Kotlin/WasmコードのJavaScriptへのインポートは、デフォルトエクスポートから名前付きエクスポートに移行しました。
引き続きデフォルトインポートを使用したい場合は、新しいJavaScriptラッパーモジュールを生成します。以下のスニペットを含む .mjs
ファイルを作成します。
// メインの .mjs ファイルへのパスを指定
import * as moduleExports from "./wasm-test.mjs";
export { moduleExports as default };
新しい .mjs
ファイルをresourcesフォルダに配置すると、ビルドプロセス中にメインの .mjs
ファイルの隣に自動的に配置されます。
また、.mjs
ファイルをカスタムの場所に配置することもできます。この場合、メインの .mjs
ファイルの隣に手動で移動するか、インポートステートメントのパスをその場所に合わせて調整する必要があります。
Kotlin/Wasm のコンパイルが遅い
Kotlin/Wasmプロジェクトで作業していると、コンパイル時間が遅くなることがあります。これは、Kotlin/Wasmツールチェインが変更を行うたびにコードベース全体を再コンパイルするためです。
この問題を軽減するために、Kotlin/Wasmターゲットはインクリメンタルコンパイルをサポートしており、これにより最後のコンパイルからの変更に関連するファイルのみをコンパイラが再コンパイルできるようにします。
インクリメンタルコンパイルを使用すると、コンパイル時間を短縮できます。現時点では開発速度を2倍にし、今後のリリースでさらなる改善を計画しています。
現在の設定では、Wasmターゲットのインクリメンタルコンパイルはデフォルトで無効になっています。 有効にするには、プロジェクトの local.properties
または gradle.properties
ファイルに以下の行を追加します。
kotlin.incremental.wasm=true
Kotlin/Wasmのインクリメンタルコンパイルをお試しいただき、フィードバックを共有してください。 皆様の洞察が、この機能をより早く安定させ、デフォルトで有効にするのに役立ちます。