wasm・workerを抱えるランタイム系ライブラリのバンドラ非互換は、自社配信バンドルの blob import で隔離する
フロントエンド
トラブルシューティング
ML
知識
運用
onnxruntime-web のように wasm・Web Worker・GPU 初期化を内包するランタイム系ライブラリは、アプリのバンドラ(webpack/vite)経由の import で壊れることがある。バンドラがライブラリ内部の動的 import・import.meta.url・worker 生成を変形するためで、症状は環境で異なる(あるバンドラでは初期化時の TypeError、別のバンドラではセッション作成がエラーなしに無限ハング)。ハング型は「低速端末の限界」と誤診されやすいので、端末性能を疑う前に別バンドラ環境(テストランナー等)での再現を先に確認する。
判断基準・手順
- ライブラリの配布物に「glue 内包の単一ファイルバンドル」があればそれを自社アセットとして配信し、fetch→Blob→素の dynamic import(webpackIgnore / vite-ignore コメント付き)で読む。バンドラはコードに一切触れない
- blob URL 経由だとライブラリ内部の import.meta.url 相対解決が壊れるので、wasm や glue のパスは絶対 URL で明示指定する
- 検証はブラウザテストで「セッション作成が数秒で完了すること」を確認してから実機へ出す。なお vite は public 配下の module import を禁止するため、URL 直 import ではなく blob 経由にするとテスト環境と本番で同一コードパスになる
- 同一ページで別変種バンドル(例: wasm専用版と GPU 対応版)を並行ロードすることは可能。env はモジュールインスタンスごとに独立している