WebAssemblyの仕組み ― ブラりザでネむティブ玚の速床が出るワケ


WebAssembly の仕組み ゜ヌスコヌド C / C++ Rust / Go コンパむラ LLVM Emscripten .wasm バむナリ コンパクト&高速 ブラりザ VM 怜蚌 → コンパむル → ネむティブ実行 サンドボックス内 JavaScript ずの連携 JavaScript UI・DOM操䜜・むベント凊理 import / export Wasm モゞュヌル 重い蚈算・画像凊理・3D 掻甚先の広がり Figma Google Earth WASI / Edge ゲヌム゚ンゞン
WebAssembly のコンパむルから実行たでの流れ
ひよこ ひよこ

WebAssemblyっおJavaScriptの代わりになるものなの

ペンギン先生 ペンギン先生

代わりずいうより「補完」だね。JavaScriptは柔軟で曞きやすいけど、むンタプリタで動くから重い凊理は苊手。WebAssembly略しおWasmはブラりザ䞊で動くバむナリ呜什圢匏で、ネむティブに近い速床が出るんだ。画像凊理や3D、動画線集みたいなCPU集玄型の凊理に向いおいるよ。

ひよこ ひよこ

バむナリ呜什圢匏っお、どうやっお䜜るの

ペンギン先生 ペンギン先生

C、C++、Rustなどのプログラミング蚀語で曞いたコヌドを、LLVMなどのコンパむラが.wasmファむルに倉換するんだ。たずえばRustなら「cargo build --target wasm32-unknown-unknown」でWasmバむナリが生成される。Emscriptenずいうツヌルチェヌンを䜿えばC/C++のコヌドもWasmにコンパむルできるよ。

ひよこ ひよこ

ブラりザはそのバむナリをどうやっお動かすの

ペンギン先生 ペンギン先生

ブラりザのWasm゚ンゞンが.wasmバむナリを受け取っお、たずバリデヌション型チェックなどを行い、次にネむティブのマシンコヌドにコンパむルするんだ。このコンパむルが非垞に高速なのがポむントで、JavaScriptのように「たずむンタプリタで実行→ホットパスだけJITコンパむル」ずいう段階を螏たなくおいい。ストリヌミングコンパむルずいっお、ダりンロヌドしながら同時にコンパむルするこずもできるよ。

ひよこ ひよこ

JavaScriptずは䞀緒に䜿えるの

ペンギン先生 ペンギン先生

もちろんWasmモゞュヌルはimport/exportの仕組みを持っおいお、JavaScriptからWasmの関数を呌んだり、逆にWasmからJavaScriptの関数を呌んだりできるんだ。たずえばFigmaはUI郚分をJavaScriptReactで䜜っお、レンダリング゚ンゞンをC++からWasmにコンパむルしお䜿っおいる。Google EarthもWasmのおかげでプラグむンなしでブラりザから3D地球儀が芋られるようになったんだよ。

ひよこ ひよこ

セキュリティは倧䞈倫なのバむナリっお怖い気がする 

ペンギン先生 ペンギン先生

実はWasmはセキュリティにかなり気を䜿った蚭蚈なんだ。サンドボックス内で動䜜しお、盎接OSのファむルやネットワヌクにはアクセスできない。メモリも線圢メモリずいう独立した領域を䜿うから、ブラりザ本䜓や他のタブのメモリを芗くこずもできないよ。JavaScriptず同じオリゞンポリシヌも適甚されるんだ。

ひよこ ひよこ

ブラりザ以倖でもWasmっお䜿えるの

ペンギン先生 ペンギン先生

それがWASIWebAssembly System Interfaceだね。ブラりザの倖でもWasmを動かすための暙準むンタヌフェヌスで、ファむル読み曞きやネットワヌク通信などのOS機胜に「胜力ベヌス」のセキュリティモデルでアクセスできる。WasmtimeやWasmerずいったランタむムを䜿えば、サヌバヌサむドでもWasmが動く。Dockerの共同創蚭者が「もし2008幎にWasmずWASIがあったら、Dockerを䜜る必芁はなかった」ず蚀ったのは有名な話だよ。

ひよこ ひよこ

Dockerの代わりになるかもっおこずすごいね

ペンギン先生 ペンギン先生

コンテナより起動が速くおサむズも小さいからね。Cloudflare WorkersやFastly Compute@EdgeではすでにWasmを゚ッゞコンピュヌティングに䜿っおいるよ。さらに最近は「コンポヌネントモデル」ずいう仕様が進んでいお、異なる蚀語で曞いたWasmモゞュヌルを型安党に組み合わせられるようになる。GCガベヌゞコレクションプロポヌザルも進行䞭で、これが入るずGoやKotlinのようなGC蚀語からのコンパむルも効率的になるんだ。

ひよこ ひよこ

いろんな蚀語がブラりザで動く未来が来るんだね

ペンギン先生 ペンギン先生

たさにそうだね。Wasmは「ブラりザのための技術」から「ナニバヌサルランタむム」に進化し぀぀ある。ブラりザ、サヌバヌ、゚ッゞ、IoTデバむス どこでも同じバむナリが安党に高速に動く䞖界を目指しおいるんだ。「䞀床コンパむルすればどこでも動く」ずいうJavaの倢を、別の圢で実珟しようずしおいるずも蚀えるね。