ソフトウェア
上級

WebAssembly Garbage Collection(ウェブアセンブリガベージコレクション)

2024年Wasm GC正式リリース。Reference Type+struct/array管理型+JavaScript GC統合+Java/Kotlin/Dart/OCamlコンパイル先対応+Bundle Size削減+Memory Leak防止。

0 回閲覧
0 いいね
2026/5/5 更新
関連タグ
WebAssembly
Wasm GC
Reference Type
Garbage Collection
Compile Target

概要

WebAssembly Garbage Collectionは2024年にChrome 119+/Firefox 120+でフル対応となったWebAssembly GC(Garbage Collection)正式リリース仕様。Wasm Phase 4昇格で、Reference Type+struct/array管理型をWebAssemblyネイティブに導入し、JavaScript GCと統合した次世代仕様。従来のWebAssemblyはLinear Memory(線形メモリ)モデル中心で、C/C++/Rust等のManual Memory Management言語に最適化されていたが、Wasm GCの導入によりJava・Kotlin・Dart・OCaml・Scala.js等のGC前提言語が WebAssembly コンパイル先として有効になった点が革命的。Kotlin/Wasm(JetBrains 2024年GA)・Dart Web(Flutter/Wasm)・Java(TeaVM等)・OCaml(js_of_ocaml後継)が Wasm GC で動作可能となり、JavaScript以外の言語でWebアプリ開発が現実的選択肢に。Bundle Sizeも従来の Wasm Manual GC実装(Boehm GC等)を排除することで30-50%削減、ブラウザネイティブGCの最適化恩恵が直接得られる。

主な特徴・仕組み

  • Reference Type: struct/array のManaged型、JavaScript GCで自動メモリ管理
  • struct.new命令: 新規Reference型構造体生成、JavaScriptオブジェクト互換
  • i31ref: Tagged Integer型、JavaScript Number との相互変換最適化
  • anyref/eqref/structref/arrayref: 様々な参照型の階層、Type Hierarchy
  • GC instructions: ref.cast/ref.test/ref.eq等のRuntime型検査命令
  • Subtyping support: 型継承(Inheritance)対応、OOPコンパイラ対応の鍵
  • JavaScript GC統合: V8/SpiderMonkey/JavaScriptCoreの既存GCを活用
  • Bundle Size削減: Boehm GC(数十KB)排除、Wasm本体のサイズ縮小
  • Browser Support: Chrome 119+ Edge 119+ Firefox 120+ Safari TP実装中
  • Wasm Phase 4: 2023年12月にPhase 4(Standardization)昇格、2024年実装完了
  • JS API統合: WebAssembly.Module.imports/exports でReference Type相互運用

スペック比較表

項目Wasm GCWasm MVP(Linear Memory)JavaScript GCJava JVM GC
Memory ManagementBrowser GCManual(C/C++)/Lib GCBrowser GCJVM GC
Reference Type○×○○
Subtyping○×○ Prototype○ Class
Bundle Size軽量重(Lib GC含む)0KB(Native)JVM必要
対応言語Java/Kotlin/Dart/OCamlC/C++/Rust/Go(Lib)JavaScriptJava/Kotlin/Scala
Browser SupportChrome 119+ Firefox 120+全Browser全Browser× Browser非対応
PerformanceJS GC同等Manual最適既知JVM最適
学習曲線中(Wasm基礎)高(C/C++知識)低中(Java知識)

具体例・対応製品

;; Wasm GC使用例(WAT形式)
(module
  (type $point (struct (field $x i32) (field $y i32)))

  (func $create-point (param $x i32) (param $y i32) (result (ref $point))
    (struct.new $point (local.get $x) (local.get $y)))

  (func $get-x (param (ref $point)) (result i32)
    (struct.get $point $x (local.get 0)))
)
// Kotlin/Wasm(2024 GA)
fun main() {
    val list = listOf(1, 2, 3, 4, 5)
    val sum = list.sum()
    console.log("Sum: $sum")  // Wasm GC で自動管理
}
  • Kotlin/Wasm 1.9.20+: 2024年GA、Wasm GCをコンパイル先として正式採用
  • Dart Web(Flutter): Flutter 3.10+でDart→Wasm GCコンパイル対応
  • OCaml js_of_ocaml後継: Wasm GCネイティブコンパイル、Bundle Size劇的削減
  • Java(TeaVM/CheerpJ): Java→Wasm GC変換、Browser でJavaアプリ実行
  • Scala.js→Wasm: Scala.js Wasm GC backend、JavaScript脱却
  • 競合機種: 従来Wasm Manual GC(Boehm GC等)、JavaScriptネイティブ実装、Java Applet(廃止)

自作PCでの選び方・注意点

WebAssembly GCはWeb開発者向けの重要技術仕様で、自作PCの選択とは関係しないが、Web Frontend開発の選択肢拡大に貢献する革命的進化。jisaku.com Web Frontend(Next.js 16+TypeScript)では現状Wasm未使用だが、将来的に重い計算処理(画像処理・データ可視化・大量データソート等)でWasm GC採用候補となる技術。Kotlin/Wasm + Compose for Web(2024 GA)を活用すれば、Android アプリのコードを共有してWebアプリ実装可能で、コードベース共有のメリットが大きい。Dart/Flutter Web(Wasm)はFlutter モバイルアプリのコードをそのままWeb展開可能で、PWA(Progressive Web App)化が容易。一方、現実問題として、JavaScript+TypeScript の Tooling・Library Ecosystemに比べて、Wasm GC + Kotlin/Dart/OCamlのEcosystemは未熟で、本格Production採用には2-3年の成熟期間が必要見込み。jisaku.com で Wasm GC を採用する具体ユースケースは、画像処理(WebP/AVIF コーデック)・大量データソート(数十万件記事のリアルタイム検索)・暗号処理(WebCrypto+Wasm)等の Performance Critical 領域に限定される。Browser Support は Chrome 119+/Firefox 120+(2023年Q4)で2026年5月時点で十分Production採用可能、Safari TP実装中のためフルカバレッジは2025年中。

関連用語との違い

Wasm MVP(Linear Memory)との違い: MVP(2017年)は Linear Memory + Manual Management、Wasm GCは Reference Type + Browser GC統合。MVPはC/C++/Rust等のManual言語向け、Wasm GCはJava/Kotlin/Dart等のGC前提言語向け。両者並行運用可能。 JavaScript GCとの違い: JavaScript GCはJavaScript エンジン内蔵、Wasm GCはJavaScript GCを活用してWebAssemblyから利用する仕組み。Wasm GC は新規Browser GCを作るのではなく、既存JavaScript GC(V8/SpiderMonkey/JavaScriptCore)を共用する設計。

よくある質問(FAQ)

Q1: Wasm GC vs Wasm Linear Memory どちらを選ぶべき? A: 言語次第。C/C++/Rust/Go(Manual GC言語)はLinear Memory継続、Java/Kotlin/Dart/OCaml(GC言語)はWasm GC採用。同じプロジェクト内で両者混在も可能、機能ごとに最適選択。

Q2: Performance はJavaScript と比較してどう? A: 大半のケースでJavaScriptと同等または若干優位、極端な計算集約(数値計算等)で2-5倍速。Wasm GCの Reference Type Conversion(JavaScript ⟷ Wasm GC) のオーバーヘッドがあるため、頻繁な Cross-boundary 呼び出しは性能劣化の原因。

Q3: Production採用すべき時期は? A: 2026-2027年以降推奨。現状はEarly Adopter段階で、Browser Compatibility・Tooling・Library Ecosystemが2-3年の成熟期間必要。jisaku.com のような商用Webサイトでは2026年中はTechnical Preview のみで、Production採用は2027年以降が安全。

まとめ

  • WebAssembly GC = 2024年Phase 4 GA完成のWasm新仕様
  • Reference Type+struct/array+JavaScript GC統合
  • Java/Kotlin/Dart/OCaml/Scala 等GC言語のWebAssemblyコンパイル先対応
  • Chrome 119+/Edge 119+/Firefox 120+ 2024年Baseline、Safari TP実装中
  • Bundle Size削減+Memory Leak防止+Browser GC最適化恩恵
この記事について
カテゴリーソフトウェア
難易度上級
作成日2026/5/5