Docker ãš WebAssembly (Wasm) ã¯ããœãããŠã§ã¢éçºç°å¢ãåæ§ç¯ãã 2 ã€ã®éèŠãªãã¯ãããžãŒã§ãã ããæ°å¹Žã§ Wasm ã®äººæ°ãé«ãŸãã«ã€ããWasm ã«ã€ããŠè³ã«ããããšãå€ããªããã¢ããªã±ãŒã·ã§ã³ ã¹ã¿ãã¯ã§äœ¿çšããå©ç¹ã«ã€ããŠãè³ã«ããããšããããããããŸããã ããã¯ãç¹ã«ãã¯ãããžãŒãéåžžã«ç·å¯ã«é£æºããŠãããããWasm ãš Docker ã®éãã«ã€ããŠèãããã£ããã«ãªã£ããããããŸããã
ãã®èšäºã§ã¯ãããã 2 ã€ã®ãã¯ãããžã飿ºãããŠãã¢ããªã±ãŒã·ã§ã³ããããã€ããããã®äžè²«æ§ã®ããå¹ççã§å®å šãªç°å¢ãæäŸããæ¹æ³ã«ã€ããŠèª¬æããŸãã ããã2ã€ã®ããŒã«ãçµã¿åãããããšã§ãéçºè ã¯ã³ã³ããåããããœãããŠã§ã¢éçºã§WebAssemblyã®ããã©ãŒãã³ã¹äžã®å©ç¹ãç°¡åã«äº«åã§ããŸãã

WASMãšã¯?
Wasm ã¯ãWorld Wide Web Consortium (W3C) ã«ãã£ãŠç®¡çãããŠããã³ã³ãã¯ããªãã€ããªåœä»€åœ¢åŒã§ãã ããã¯ãC/C++ãC#ãJavaScriptãGoãRust ãªã©ã 40 ãè¶ ããããã°ã©ãã³ã°èšèªçšã®ç§»æ€å¯èœãªã³ã³ãã€ã« ã¿ãŒã²ããã§ãã èšãæããã°ãWasm ã¯ãã¹ã¿ãã¯ããŒã¹ã®ä»®æ³ãã·ã³ã§å®è¡ããããã«ãšã³ã³ãŒãããããã€ãã³ãŒã圢åŒã§ãã
JavaãJavaãã€ãã³ãŒãã«ã³ã³ãã€ã«ããŠJavaä»®æ³ãã·ã³(JVM)äžã§å®è¡ããJavaä»®æ³ãã·ã³(JVM)ã§ã³ã³ãã€ã«ããŠããŸããŸãªã¢ãŒããã¯ãã£ã§å®è¡ã§ããã®ãšåæ§ã«ãããã°ã©ã ãWasmãã€ãã³ãŒãã«ã³ã³ãã€ã«ããŠãããArmãx86ãªã©ã®ç°ãªãã¢ãŒããã¯ãã£ã§å®è¡ããããã«ããã±ãŒãžåã§ããWasmã©ã³ã¿ã€ã ã«ãã£ãŠå®è¡ã§ããŸãã

Wasm ã©ã³ã¿ã€ã ãšã¯?
Wasm ã©ã³ã¿ã€ã ã¯ãç§»æ€å¯èœãªãã€ãã³ãŒããšåºç€ãšãªãããŒããŠã§ã¢ã¢ãŒããã¯ãã£ã®éã®ã®ã£ãããåããŸãã ãŸãããã¹ãç°å¢ãšéä¿¡ããããã® API ãæäŸããJavaScript ãªã©ã®ä»ã®èšèªéã®çžäºéçšæ§ãæäŸããŸãã
倧ãŸãã«èšããšãWasm ã©ã³ã¿ã€ã 㯠3 ã€ã®ã»ãã³ãã£ãã¯ãã§ãŒãºã§ãã€ãã³ãŒããå®è¡ããŸãã
- ãã³ãŒã:ã¢ãžã¥ãŒã«ãåŠçããŠå éšè¡šçŸã«å€æãã
- æ€èšŒ:ãã³ãŒããããã¢ãžã¥ãŒã«ãæå¹ãã©ããã®ç¢ºèª
- å®è¡: æå¹ãªã¢ãžã¥ãŒã«ã®ã€ã³ã¹ããŒã«ãšåŒã³åºã
Wasm ã©ã³ã¿ã€ã ã®äŸãšããŠã¯ã Spinã Wasmtimeã WasmEdgeã Wasmer ãªã©ããããŸãã FirefoxãChromeãªã©ã®äž»èŠãªãã©ãŠã¶ã䜿çšããŠããŸã ã¹ãã€ããŒã¢ã³ããŒãšV8ãããããã
ãªãWasmã䜿ãã®ã?
ã¢ããªã±ãŒã·ã§ã³ã¹ã¿ãã¯ã§WebAssemblyã䜿çšããçç±ãçè§£ããããã«ããã®äž»ãªå©ç¹ãç¹ã«ããã©ãŒãã³ã¹ãšæ±çšæ§ãç ç²ã«ããããšãªãã»ãã¥ãªãã£ã調ã¹ãŠã¿ãŸãããã
ããã©ãŒãã³ã¹ãç ç²ã«ããªãã»ãã¥ãªãã£
Wasmã¯ãå®å šãªãµã³ãããã¯ã¹ç°å¢å ã§ãã€ãã£ãã«è¿ãé床ã§ã³ãŒããå®è¡ããæªæã®ãããœãããŠã§ã¢ããã·ã¹ãã ãä¿è·ããŸãã ãã®ããã©ãŒãã³ã¹ã¯ãWebAssembly ãã€ãã³ãŒãããã·ã³ã³ãŒãã«çŽæ¥ãžã£ã¹ãã€ã³ã¿ã€ã (JIT) ã³ã³ãã€ã«ããããšã§å®çŸãããäžé圢åŒãžã®ãã©ã³ã¹ãã€ã«ã®å¿ èŠæ§ãåé¿ããŸããÂ
ãŸããWasm ã¯å ±æãªãã¢ã¡ã¢ãª (ã¢ãžã¥ãŒã«éãŸã㯠WebAssembly ãš JavaScript éã®ããŒã¿äº€æãç°¡çŽ åããé£ç¶ããã¡ã¢ãªãããã¯) ã䜿çšããŸãã ãã®èšèšã«ãããå¹ççãªéä¿¡ãå¯èœã«ãªããéçºè 㯠JavaScript ã®æè»æ§ãš WebAssembly ã®å ç¢ãªããã©ãŒãã³ã¹ã 1 ã€ã®ã¢ããªã±ãŒã·ã§ã³ã§èåãããããšãã§ããŸãã
ãã®ã·ã¹ãã ã®ã»ãã¥ãªãã£ã¯ããµã³ãããã¯ã¹ãšããŠæ©èœãããã¹ãã©ã³ã¿ã€ã ç°å¢ã®èšèšã«ãã£ãŠããã«åŒ·åãããŸãã ããã«ãããWasm ã¢ãžã¥ãŒã«ãæå®ãããã¡ã¢ãªç©ºéã®å€éšã«ã¢ã¯ã»ã¹ããããšãããã¡ã€ã«ã·ã¹ãã ã¢ã¯ã»ã¹ããããã¯ãŒã¯ãªã¯ãšã¹ããã·ã¹ãã ã³ãŒã«ãªã©ã®æœåšçã«å±éºãªæäœãå®è¡ããããšãå¶éããŸãã WebAssembly ã§ã¯ããã¹ãæ©èœã«ã¢ã¯ã»ã¹ããããã«æç€ºçãªã€ã³ããŒããšãšã¯ã¹ããŒããè¡ãå¿ èŠããããããå¶åŸ¡ã®ã¬ã€ã€ãŒã远å ãããå®å šãªå®è¡ç°å¢ã確ä¿ãããŸãã
ãŠãŒã¹ã±ãŒã¹ã®å€æ§æ§
æåŸã«ãWebAssemblyã¯(ãã®ååã«åããŠ)åŸæ¥ã®Webãã©ãããã©ãŒã 以äžã®ãã®ã«é¢é£ããŠããŸãã ãŸãããµãŒããŒãµã€ãã¢ããªã±ãŒã·ã§ã³ããšããžã³ã³ãã¥ãŒãã£ã³ã°ãã²ãŒã éçºãã¯ã©ãŠã/ãµãŒããŒã¬ã¹ã³ã³ãã¥ãŒãã£ã³ã°ã«ãåªããããŒã«ã§ãã ããã©ãŒãã³ã¹ãã»ãã¥ãªãã£ããŸãã¯ã¿ãŒã²ããã»ããã€ã¹ã»ãªãœãŒã¹ãæžå¿µãããå Žåã¯ããã®ã³ã³ãã¯ãã»ãã€ããªãŒã»ãã©ãŒãããã®äœ¿çšãæ€èšããŠãã ããã
ããæ°å¹ŽãWebAssembly System Interface( ãŸãã¯WASI)ã®ãããã§ãWebAssemblyã¯ãµãŒããŒåŽã§ããæ®åããŠããŸãã WASIã¯ããã¡ã€ã«ããã¡ã€ã«ã·ã¹ãã ãã¯ããã¯ãªã©ã®ãªãã¬ãŒãã£ã³ã°ã·ã¹ãã æ©èœãžã®ã¢ã¯ã»ã¹ãæäŸãã Wasmçšã®ã¢ãžã¥ã©ãŒAPI ã§ããÂ
DockerãšWasm:ã©ã®ããã«é¢é£ããŠããŸãã?
WebAssembly ã³ãŒãã«ã€ããŠèªãã åŸãDocker ãã©ã®ããã«é¢é£ããŠãããçåã«æããããããŸããã WebAssembly ã¯ãµã³ãããã¯ã¹åãšç§»æ€æ§ãåŠçããŸããã? Dockerã¯å šäœåã®äžã§ã©ã®ããã«äœçœ®ä»ããããŸãã? ããã«è©±ãåããŸãããã
Dockerã¯ãéçºè ãWasmã䜿çšããã¢ããªã±ãŒã·ã§ã³ãå«ããã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ãå®è¡ãå ±æããã®ã«åœ¹ç«ã¡ãŸãã ããã¯ãWasm ã Linux ã³ã³ãããŒãè£å®ãããã¯ãããžã§ãããããç¹ã«åœãŠã¯ãŸããŸãã ãã ããéçºè ã®ç¢ºããªçµéšããªãç¶æ ã§ãããã®ã³ã³ãããåŠçãããšãããã«ã¢ããªã±ãŒã·ã§ã³éçºã®é害ã«ãªãå¯èœæ§ããããŸãã
ããã§ãDockerã¯ãWasmãLinuxã³ã³ããã§ãã«ãããããã®ã¹ã ãŒãºãªéçºè ãšã¯ã¹ããªãšã³ã¹ãæäŸããŸãã
Docker ãš Wasm ã䜵çšããå©ç¹
Docker ãš Wasm ãäžç·ã«äœ¿çšãããšã次ã®ãããªéçºè ãšã¯ã¹ããªãšã³ã¹ã®å€§ããªã¡ãªãããåŸãããŸãã
- äžè²«æ§ã®ããéçºç°å¢: éçºè ã¯ãDocker ã䜿çšã㊠Wasm ã©ã³ã¿ã€ã ç°å¢ãã³ã³ããåã§ããŸãã ãã®ã¢ãããŒãã«ãããããŒã«ã«éçºããæ¬çªç°å¢ãŸã§ãã©ã®ãã·ã³ã§ãåãããã«æ©èœããäžè²«ãã Wasm éçºããã³å®è¡ç°å¢ãå¯èœã«ãªããŸãã
- å¹ççãªå°å ¥: Wasm ã¢ããªã±ãŒã·ã§ã³ã Docker å ã«ããã±ãŒãžåããããšã§ãéçºè ã¯å¹ççãªã€ã¡ãŒãžç®¡çããã³é åžæ©èœã掻çšã§ããŸãã ããã«ããããããã®çš®é¡ã®ã¢ããªã±ãŒã·ã§ã³ãããŸããŸãªç°å¢ã§ç°¡åã«ãããã€ããã³ã¹ã±ãŒãªã³ã°ã§ããŸãã
- ã»ãã¥ãªãã£ãšåé¢: Dockerã¯ãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã¬ãã«ã§ã¢ããªã±ãŒã·ã§ã³ãåé¢ããŸãããWasmã¯ãµã³ãããã¯ã¹åãããå®è¡ç°å¢ãæäŸããŸãããããã®ãã¯ãããžãŒã䜵çšããããšã§ãå€ãã®äžè¬çãªè匱æ§ã«å¯ŸããŠå ç¢ãªéå±€åã»ãã¥ãªãã£ã¢ãã«ãæäŸãããŸãã
- 匷åãããããã©ãŒãã³ã¹: éçºè ã¯ãDockerã³ã³ããã䜿çšããŠãWasmã¢ããªã±ãŒã·ã§ã³ããµãŒããŒã¬ã¹ã¢ãŒããã¯ãã£ãŸãã¯ãã€ã¯ããµãŒãã¹ãšããŠãããã€ã§ããŸãã ããã«ãããã¹ã±ãŒã©ãã«ã§ç®¡çããããæ¹æ³ã§ Wasm ã®ããã©ãŒãã³ã¹äžã®å©ç¹ã掻çšã§ããŸãã
Docker Desktop ã§ Wasm ãæå¹ã«ããæ¹æ³
WebAssembly ã³ã³ããã®å®è¡ã«èå³ããããªããããªãã¯å¹žéã§ã! Wasm ã¯ãŒã¯ããŒãã®ãµããŒãã¯çŸåšããŒã¿çã§ãããDocker Desktop ã§ [èšå®] ã® [éçºäžã®æ©èœ] ã¿ãã§ [Wasm ãæå¹ã«ãã] ããªã³ã«ããããšã§æå¹ã«ã§ããŸã (å³ 2)ã
æèšïŒ ãŸãã containerd ã€ã¡ãŒãž ã¹ãã¢ã®ãµããŒã ãæå¹ã«ãªã£ãŠããããšã確èªããŠãã ããã

Docker Desktop ã§ Wasm ãæå¹ã«ããããæºåã¯å®äºã§ãã Docker ã¯çŸåšãSpinãWasmEdgeãWasmtime ãªã©ãå€ãã® Wasm ã©ã³ã¿ã€ã ããµããŒãããŠããŸãã ãŸãããããã®ã¢ããªã±ãŒã·ã§ã³ã®å®è¡æ¹æ³ã説æãã 詳现ãªããã¥ã¡ã³ã ããããŸãã
Docker ã WebAssembly ããµããŒãããæ¹æ³
DockerãWebAssemblyãã©ã®ããã«ãµããŒãããŠãããã説æããã«ã¯ãDockerãšã³ãžã³ãã©ã®ããã«æ©èœããããç°¡åã«ç¢ºèªããå¿ èŠããããŸãã
Docker Engine ã¯ã containerd ãšåŒã°ããé«ã¬ãã«ã®ã³ã³ãã㌠ã©ã³ã¿ã€ã äžã«æ§ç¯ãããŠããŸãã ãã®ã©ã³ã¿ã€ã ã¯ãã³ã³ãããŒã®ã©ã€ããµã€ã¯ã«ãå¶åŸ¡ããããã®åºæ¬çãªæ©èœãæäŸããŸãã shimããã»ã¹ã䜿çšãããšãcontainerdã¯å éšã§ runc (äœã¬ãã«ã®ã©ã³ã¿ã€ã )ãå©çšã§ããŸãã ãã®åŸãrunc ã¯ãªãã¬ãŒãã£ã³ã° ã·ã¹ãã ãšçŽæ¥å¯Ÿè©±ããŠãã³ã³ãããŒã®ããŸããŸãªåŽé¢ã管çã§ããŸãã

ãã®èšèšã®çŽ æŽããããšããã¯ã誰ã§ã shim ãæžã㊠WebAssembly ã©ã³ã¿ã€ã ãå«ãä»ã®ã©ã³ã¿ã€ã ã containerd ãšçµ±åã§ããããšã§ãã ãã®çµæãWasmEdgeãSpinãWasmtime ãªã©ãDocker ã®ããŸããŸãª Wasm ã©ã³ã¿ã€ã ãš ãã©ã°ã¢ã³ããã¬ã€ ã§ããŸãã
WebAssembly ãš Docker ã®æªæ¥
WebAssembly ã¯çµ¶ããé²åããŠããããããšã³ã·ã¹ãã ã®çºå±ã«è¿œãã€ãã«ã¯ããã£ãããšãã察å¿ãå¿ èŠã§ãã æè¿ã®é²æ©ã®1ã€ã¯ãæ°ãã WebAssembly Componentã¢ãã« ãæ§ã ãªã³ã³ããã©ã³ã¿ã€ã ã®ã·ã ã«ã©ã®ãããªåœ±é¿ãäžãããã«é¢é£ããŠããŸãã Docker ã§ã¯ãéçºè ã Wasm ã³ã³ãããŒãç°¡åã«äœæã§ããããã«ããéçºè ãšã¯ã¹ããªãšã³ã¹ãåäžãããããšã«åãçµãã§ããŸãã
2019ã®æåãªãã€ãŒãã¹ã¬ããã§ãDocker ã®åµèšè ã§ãã Solomon Hykes æ°ã¯ãã¯ã©ãŠã ã³ã³ãã¥ãŒãã£ã³ã°ã®æªæ¥ã«ã€ããŠè¿°ã¹ãŠããŸãããã®æªæ¥ã§ã¯ãDockerãWindowsãLinuxãWebAssemblyã®ã³ã³ããã䞊è¡ããŠå®è¡ããäžçã«ã€ããŠè¿°ã¹ãŠããã ãšã³ã·ã¹ãã ã®æè¿ã®ãã¹ãŠã®éçºãèãããšããã®æªæ¥ã¯ãŸãã«ããã«ãããŸãã
æè¿ã®é²æ©ã«ã¯ã次ã®ãããªãã®ããããŸãã
- ã®æã¡äžã WASI ãã¬ãã¥ãŒ 2 WASIã¯ãã³ã³ããŒãã³ãã»ã¢ãã«ã»ã¿ã€ãã®ã·ã¹ãã ãšã»ãã³ãã£ã¯ã¹ã«åºã¥ããŠå®å šã«ãªããŒã¹ãããŸãã ããã«ãããWASIã¯ã¢ãžã¥ãŒã«åãããå®å šã«ä»®æ³åå¯èœã«ãªããããŸããŸãªãœãŒã¹èšèªããã¢ã¯ã»ã¹å¯èœã«ãªããŸãã
- FermyonãMicrosoftãSUSEãLiquidReplyãªã©ãã ã¹ãã³ãã¥ãŒã ãªãŒãã³ãœãŒã¹ãããžã§ã¯ã: ãã®ãããžã§ã¯ãã¯ãWasmããŒã¹ã®ãµãŒããŒã¬ã¹æ©èœãKubernetesã¯ã©ã¹ã¿ãŒã«ãããã€ããããã®ç°¡åãªéçãæäŸããŸããã éçºè ã¯ãk3s(Rancher Labã®æå°éã®Kubernetesãã£ã¹ããªãã¥ãŒã·ã§ã³ãå®è¡ããããã®è»œéã©ãããŒ)ãä»ããŠSpinKubeãDockerã§äœ¿çšã§ããŸãã Docker Desktop ã«ã¯ shim ãå«ãŸããŠãããããŒã«ã« ãã·ã³ã§ Kubernetes ã³ã³ãããŒãå®è¡ã§ããŸãã
2024ãWasmãšã³ã³ããã®çµã¿åããã¯ããã®å¹çæ§ãæ¡åŒµæ§ãã³ã¹ãã®é¢ã§é«ãè©äŸ¡ãããããšãæåŸ ããŠããŸãã
ãŸãšã
ãã®èšäºã§ã¯ãDockerãšWasmãã©ã®ããã«é£æºããããããã³Wasmã¯ãŒã¯ããŒãã«Dockerã䜿çšããæ¹æ³ã«ã€ããŠèª¬æããŸããã ä»åŸæ°å¹Žéã§ Wasm ã®æ¡çšãæ¡å€§ããããšã楜ãã¿ã«ããŠãããéçºè ã®çŸç¶ãšåããå ã®äž¡æ¹ã«å¯Ÿå¿ããããã®ãµããŒããåŒãç¶ã匷åããŠãããŸããÂ
Wasm ã®è©³çŽ°ãš Docker ã§ã®é£æºã«ã€ããŠã¯ã次ã®é¢é£è³æãåç §ããŠãã ããã
- Docker + Wasm Technical Preview ã®ç޹ä»
- Docker + Wasm Technical Preview 2 ã®çºè¡š
- Docker ã䜿çšãã WebAssembly ã¢ããªã®ãã«ããå ±æãå®è¡
- WebAssembly Deep Dive â Wasm ãå éšã§ã©ã®ããã«æ©èœããã
詳ããèŠã
- Docker Newsletter ã賌èªããŠãã ããã
- Docker ãã¹ã¯ãããã®ææ°ãªãªãŒã¹ãå ¥æããŸãã
- 質åããããŸãã? Docker ã³ãã¥ããã£ããæäŒãããŸãã
- ããã«ãŒã¯åããŠã§ãã? å§ããŸãããã
ãã®èšäºã®å·çã«ååããŠããã Fermyon ã®éçºè ã¢ããã±ã€ã ãªãŒãã§ãã Sohan Maheshwar ã«æè¬ããŸãã