WebAssembly (å¥åWasm)ãéçºæ®µéã«ããããšã¯ééããããŸãããäžéšã®äººã«ãšã£ãŠã¯éå ã®ããã«æãããããããŸããããWasmã¯ç¶ç¶çãªã³ã³ããåãããéçºã«ãããŠéèŠãªåœ¹å²ãæãããŠãããšä¿¡ããŠããŸãã DockerãšWasmã¯è£å®çãªãã¯ãããžãŒã«ãªãå¯èœæ§ããããŸããÂ
éå»ã«ã¯ãDockerãLinuxãŸãã¯Windowsã³ã³ãããšäžç·ã« Wasmã¢ãžã¥ãŒã«ãæ£åžžã«å®è¡ããæ¹æ³ã 調æ»ããŠããŸããã ããããçŽ 5 ãæåŸã Docker+Wasm ãã¯ãã«ã« ãã¬ãã¥ãŒã§æ°ããªå€§ããªäžæ©ãèžã¿åºããŸããã éçºè ã¯ãåè¶ããããã©ãŒãã³ã¹ãç§»æ€æ§ãããã³å®è¡æã®åé¢ããããŸã§ä»¥äžã«å¿ èŠãšããŠããŸããÂ
Dockerã®ãšã³ãžãã¢ãªã³ã°ãã£ã¬ã¯ã¿ãŒã§ããChris CroneãšãSecond State CEOã®åµèšè ã§ããMichael Yuanã¯ãCNCFã®Wasm Day 2022ã§ ãããã®åé¡ç¹ã«å¯ŸåŠ ããŸããã ããã圌ãã®å®å šãªã»ãã·ã§ã³ã§ãããç§ãã¡ã®åçž®ãããå èš³ã«åºå·ããŠãã ãã:
DockerãšWasmã䜿çšããŠæ£åžžã«éçºããããã«ãæ°ããããã»ã¹ãåŠã¶å¿ èŠã¯ãããŸããã äžè¬ç㪠Docker CLI ã³ãã³ãã§ããã«å¯ŸåŠã§ããŸãã Dockerã¯ãWasmEdgeãšã®ã³ã©ãã¬ãŒã·ã§ã³ã®ãããã§ãWebAssemblyã©ã³ã¿ã€ã ã管çããããšããã§ããŸãã ãã®æ°ãããããžã§ã¯ããæ±ãçç±ãšããããå¯èœã«ããæè¡çãªã¡ã«ããºã ã«ã€ããŠè©³ãã説æããŸããÂ
ãªãWebAssemblyãšDockerãªã®ã?
ã¯ãŒã¯ããŒããšã³ãŒããã©ã®ããã«åé¢ãããã¯ããœãããŠã§ã¢ããŠãŒã¶ãŒã«ã©ãã ãè¿ éã«æäŸã§ãããã«å€§ããªåœ±é¿ãäžããŸãã Chris ã¯ãéçºè ãã©ã®ããã«è©äŸ¡ããŠãããã説æããããšã§ãããã匷調ããŠããŸããÂ
- ãããžã§ã¯ãéã§ã³ã³ããŒãã³ããšå®çŸ©ãããã€ã³ã¿ãŒãã§ã€ã¹ãç°¡åã«åå©çšã§ããããã䟡å€ãããè¿ éã«æ§ç¯ã§ããŸã
- ã¯ãŒã¯ããŒãéã®å®å šã§å ç¢ãªå¢çãç¶æããªãããå ±æã³ã³ãã¥ãŒãã£ã³ã°ãªãœãŒã¹ãæå€§åããã¢ããªã±ãŒã·ã§ã³é ä¿¡ã®ã³ã¹ããåæž
- ã³ã³ããã€ã¡ãŒãžãªã©ã®äŸ¿å©ãªããã±ãŒãžåã¡ã«ããºã ãéããŠãæ°ç§ã§ãŠãŒã¶ãŒã«ã·ãŒã ã¬ã¹ãªã¢ããªã±ãŒã·ã§ã³é ä¿¡ãè¡ãããŠãŒã¶ãŒã䟡å€ãããè¿ éã«ç¢ºèªã§ããããã«ããŸã
ã¯ãŒã¯ããŒãã®åé¢ããããã®åœ¹å²ãæããããšã¯ããã£ãŠããŸããããšã¢ã®ã£ãããããŒããŠã§ã¢ä»®æ³åãã¹ã¿ãã¯ä»®æ³å(WasmãŸãã¯JVM)ãã³ã³ããåãªã©ããããå®çŸããæ¹æ³ã¯æ°å€ããããŸãã ããããã«é·æãšçæããããããæé©ãªãœãªã¥ãŒã·ã§ã³ãéžæããã®ã¯é£ããå ŽåããããŸããÂ
é©åãªããŒã«ãèŠã€ããããšãéåžžã«é£ããå ŽåããããŸãã CNCF ããŒã«ã®ç¶æ³ã ãã§ã飜åç¶æ ã«ããããããã®ããŒã«ãååšããããšã«æè¬ããŠããŸããããã®å€æ§æ§ã¯å€ãã®éçºè ã«ãšã£ãŠå§åçã§ããÂ
ã¯ãªã¹ã¯ãç¹æ®ãªããŒã«ãç®åã®ã¿ã¹ã¯ãå æã§ãããšä¿¡ããŠããŸãã ãããã®ããŒã«ã®æ±ºå®ãå°ãããšã Docker ã®è²¬ä»»ã§ãã ããã¯ãéçºè ãã¢ããªã±ãŒã·ã§ã³ãã§ããã ãæ©ãæ§ç¯ãå ±æãå®è¡ã§ããããã«æ¯æŽãããšããç¶ç¶çãªäœ¿åœã«åºã¥ããŠããŸãã
ããã§ãWasmEdgeãšMichael Yuanã®åºçªã§ããÂ
Docker ãš WasmEdge ã«ãããšããµã€ãã£ã³ã°ãªæ©äŒ
Michaelã¯ãã³ã³ãããšWebAssemblyã®ãŠãŒã¹ã±ãŒã¹ã®éã«ããã€ãã®éè€ãããããšã瀺ããŸããã ããšãã°ãäž¡æ¹ã®é£å¶ã®éçºè ããã€ã¯ããµãŒãã¹ ã¢ããªã±ãŒã·ã§ã³ãåºè·ãããå ŽåããããŸãã Wasmã¯ãèµ·åæéã®ççž®ãšã³ãŒãã¬ãã«ã®ã»ãã¥ãªãã£ãå®çŸã§ãããããå€ãã®å Žåã«åœ¹ç«ã¡ãŸãã
ãã ããWebAssemblyã¯ãã¹ã¬ãããã¬ããŒãžã³ã¬ã¯ã·ã§ã³ãããã³ãã€ããªããã±ãŒãžã®å¶éã«ããããã¹ãŠã®ãŠãŒã¹ã±ãŒã¹ã«é©åããããã§ã¯ãããŸããã çŸåšãWasmã§ã¢ããªã±ãŒã·ã§ã³ãå®è¡ããã«ã¯ã远å ã®ããŒã«ãå¿ èŠã§ããÂ
åäœäžã® WasmEdge : TensorFlow ã€ã³ã¿ãŒãã§ã€ã¹
ãã®åŸããã€ã±ã«ã¯TensorFlow MLã¢ããªã±ãŒã·ã§ã³ã®ãã¢ãéå§ããWasmEdgeã§äœãã§ãããã瀺ããŸããã ãã®ã¢ããªã±ãŒã·ã§ã³ã¯ãä»ã® WASI äºæã©ã³ã¿ã€ã ã§ã¯åäœããŸããã

ãã®ãã¢ãå¯èœã«ããããã€ãã®ç¹:
- Rust:Wasmã³ã³ãã€ã«ã¿ãŒã²ããããã¡ãŒã¹ãã¯ã©ã¹ã§ãµããŒãããå®å šã§é«éãªããã°ã©ãã³ã°èšèªã
- Tokio:ãã«ãã¹ã¬ãããªãã§è€æ°ã®äžŠåHTTPãªã¯ãšã¹ããåŠçã§ããäžè¬çãªéåæã©ã³ã¿ã€ã ã
- ã¯ã¹ã ãšããžã® TensorFlow: WASI-NN 仿§ãšäºææ§ã®ãããã©ã°ã€ã³ã§ãã Tensorflowã«å ããŠãPyTorchãšOpenVINOãWasmEdgeã§ãµããŒããããŠããŸããÂ
æèšïŒ Tokio ãš TensorFlow ã®ãµããŒãã¯ãä»ã® WASI æºæ ã©ã³ã¿ã€ã ã§ã¯å©çšã§ããªã WasmEdge ã®æ©èœã§ãã
Rustã® cargo build ã³ãã³ãã䜿çšãããšãã¿ãŒã²ãããã©ãããã©ãŒã ã䜿çšã㊠wasm32-wasi ããã°ã©ã ãWasmã¢ãžã¥ãŒã«ã«ã³ã³ãã€ã«ã§ããŸãã WasmEdge ã©ã³ã¿ã€ã ã¯ãçµæã® .wasm ãå®è¡ã§ããŸã ãã¡ã€ã«ã ã¢ããªã±ãŒã·ã§ã³ãå®è¡ãããããHTTPã¯ãšãªãå®è¡ããŠãããªãã¯ãŒã«ãªç»åèªèã¿ã¹ã¯ãå®è¡ã§ããŸããÂ
ãã®äŸã§ã¯ãWASI äºæã©ã³ã¿ã€ã ãšããŠã® WasmEdge ã®æç»ãäŸç€ºããŠããŸãã ã¡ã³ããã«ãããšããWasmEdgeã¯ãã¯ã©ãŠããã€ãã£ãããšããžãããã³åæ£åã¢ããªã±ãŒã·ã§ã³åãã®è»œéã§é«æ§èœã§æ¡åŒµå¯èœãªWebAssemblyã©ã³ã¿ã€ã ã§ãã ãµãŒããŒã¬ã¹ã¢ããªãçµã¿èŸŒã¿æ©èœããã€ã¯ããµãŒãã¹ãã¹ããŒãã³ã³ãã©ã¯ããIoTããã€ã¹ã匷åããŸãããÂ
WasmãDockerã§ã¢ã¯ã»ã¹å¯èœã«ãã
Dockerã«ã¯2ã€ã®éæ³ã®æ©èœããããŸãã ãŸããDockerãšã³ã³ããã¯ãæ¬çªç°å¢ã®ãããããã·ã³ãšå Žæã§åäœããŸãã 第 2 ã«ãDocker ã䜿çšãããšãä»»æã®ãããžã§ã¯ãããã³ã³ããŒãã³ããç°¡åã«æ§ç¯ãå
±æãåå©çšã§ããŸãã ã³ã³ããã»ã€ã¡ãŒãžããã³ãã®ä»ã®OCIã¢ãŒãã£ãã¡ã¯ãã¯ãç°¡åã«äœ¿çš(ããã³å
±æ)ã§ããŸãã éé¢ãçŒãä»ããããŠããŸãã äœçŸäžäººãã®éçºè
ã¯ã次ã®ãã㪠docker compose upå€ãã®Dockerã¯ãŒã¯ãããŒã«ãéåžžã«ç²ŸéããŠããŸãã
Chrisã¯ãæšæºåãšãªãŒãã³ãšã³ã·ã¹ãã ã«ãããDockerãšã³ã³ããããŒã«ãã©ãã§ãå©çšã§ããããã«ãªã£ãæ¹æ³ã«ã€ããŠèª¬æããŸããã ããã§ã¯OCI仿§ãéåžžã«éèŠã§ãããã»ãŒãã¹ãŠã®äººãšãµããŒããããŠãããã¯ãããžãŒ(Wasmãªã©)ã§æ©èœããæ°ãããœãªã¥ãŒã·ã§ã³ãäœæã§ããŸããÂ
äžæ¹ãã¯ãã¹ãã©ãããã©ãŒã ã®Wasméçºè ç°å¢ã®ã»ããã¢ããã«ã¯æ³šæãå¿ èŠã§ãã ãŸããæ°ããããŒã«ãã¯ãŒã¯ãããŒãåŠã¶å¿ èŠããããçç£æ§ã劚ããªãããã©ã¹ãã¬ãŒã·ã§ã³ãçã¿åºããŸãã ç§ãã¡ã¯ãéçºè ããããã®èª²é¡ãå æããã®ãæ¯æŽã§ãããšä¿¡ããŠãããç¬èªã®ãã©ãããã©ãŒã ãæŽ»çšããŠWasmãããã¢ã¯ã»ã¹ããããã§ããããšãå¬ããæããŸããÂ
Docker+WasmEdge ã®ãã¢
WasmãµããŒãã¯å®éã«ã©ã®ããã«èŠããŸãã? Chris ã¯ãWASI ããµããŒããã Docker Desktop ã®ãã¬ãã¥ãŒã䜿çšããŠãã¢ãéå§ããŸããã 圌ã¯ã次㮠3 ã€ã®ãµãŒãã¹ãå«ã Docker äœæãã¡ã€ã«ãäœæããŸãããÂ
- NGINX Docker Official Imageã䜿çšããããã³ããšã³ãã®éç JavaScript ã¯ã©ã€ã¢ã³ã
- ã«ã³ã³ãã€ã«ãããRustãµãŒããŒ
wasi/wasm32 - ããªã¢DBããŒã¿ããŒã¹

ãã®RustãµãŒããŒã¯Wasmã¢ãžã¥ãŒã«ãšããŠå®è¡ãããNGINXããã³MariaDBãµãŒããŒã¯Linuxã³ã³ããã§å®è¡ãããŸãã ã¯ãªã¹ã¯ãããŒã«ã«ãã©ãããã©ãŒã ããã¿ãŒã²ããã« wasm32-wasi ã³ã³ãã€ã«ããããã®ã䜿çšã㊠Dockerfile ããã®RustãµãŒããŒãæ§ç¯ããŸããã圌ã¯ãŸããæ§ç¯ãããWasmã¢ãžã¥ãŒã«ãæé©åããããã«ãWasmEdgeç¬èªã®AOTã³ã³ãã€ã©ãå®è¡ããŸããã ãã ãããã®æé ã¯ãªãã·ã§ã³ã§ãããæé©åãããã¢ãžã¥ãŒã«ã«ã¯ WasmEdge ã©ã³ã¿ã€ã ãå¿
èŠã§ãã
ããã§ã¯ãChris (ãã¢ã«ã€ããŠã¯ 19:43 ãåç
§) ã«èŠç¹ãä»»ããŸãã ãã ããComposeãã«ããå®è¡ããŠãã©ãããã©ãŒã ã€ã¡ãŒãžãäœæ wasi/wasm32 ã§ããããšãç¥ã£ãŠãããŠãã ããã å®è¡ãã docker compose up ãšãã¢ããªã±ãŒã·ã§ã³ãèµ·åããWeb ãã©ãŠã¶ãŒãä»ããŠæäœã§ããŸãã ããã¯ãã³ã³ãããšWasmã䞊è¡ããŠã·ãŒã ã¬ã¹ã«å®è¡ãã1ã€ã®æ¹æ³ã§ãã
Docker CLI ãããWasm ãã€ã¯ããµãŒãã¹ã 2 MB æªæºã§ããããšãããããŸãã 髿§èœã®HTTPãµãŒããŒãšMySQLããŒã¿ããŒã¹ã¯ã©ã€ã¢ã³ããå«ãŸããŠããŸãã NGINXãµãŒããŒãšMariaDBãµãŒããŒã¯ããããã10MBãš120MBã§ãã ãããã¯ãRustãã€ã¯ããµãŒãã¹ã¯ãLinuxãã€ããªã«ãã«ãããŠLinuxã³ã³ããã§å®è¡ããåŸãæ°åã¡ã¬ãã€ãã«ãªããŸãã ããã¯ãWasmç»åãããã«è»œéã§ãããã匷調ããŠããŸãã
åºåã¯OCIã€ã¡ãŒãžã§ãããããDocker Hubãªã©ã®OCIæºæ ã¬ãžã¹ããªã䜿çšããŠä¿åãŸãã¯å ±æã§ããŸãã è€éãªæ°ããã¯ãŒã¯ãããŒãåŠã¶å¿ èŠã¯ãããŸããã ãŸããChris ãš Michael 㯠WasmEdge ãäžå¿ã«ããŠããŸãããDocker ã¯ãããã WASI ã©ã³ã¿ã€ã ããµããŒãããå¿ èŠããããŸããÂ
ãã®ã¢ãããŒãã¯ã³ã³ãããŒãšçžäºéçšå¯èœã§ãããDocker Desktop å ã§æ©æã«ãµããŒããããŠããŸãã Wasmã¯æåã¯ãªãã¿ããªãããã«èŠãããããããŸããããDockerãšã³ã·ã¹ãã ãšã®çµ±åã«ããããã®åŠç¿æ²ç·ãããã«å¹³æºåãããŸãã
Docker ãš Wasm ã®æªæ¥
ã¯ãªã¹ãè¿°ã¹ãããã«ãç§ãã¡ã¯DockerãšWasmãããŸã飿ºãããããšã«æè³ããŠããŸãã æè¿ã® Docker+Wasm ãã¯ãã«ã« ãã¬ãã¥ãŒã¯ãçžäºéçšæ§ãé«ããããã®å€§ããªäžæ©ã§ãã ãã ããDockerããŒã«ããç®æšã«é¢ä¿ãªããWasmã«é£¢ããéçºè ã®ç掻ãã©ã®ããã«æ¹åã§ããããæ¢ãããšã«ãè奮ããŠããŸããÂ
Dockerã¯ãWasmã³ãã¥ããã£ã«åå ããŠãããªãã®ãããªéçºè ãWebAssemblyã¢ããªã±ãŒã·ã§ã³ãã©ã®ããã«æ§ç¯ããŠããããããããçè§£ããããšèããŠããŸãã ãŠãŒã¹ã±ãŒã¹ãšé害ã¯éèŠã§ãã ã³ã³ãããšã³ã·ã¹ãã ã®çµéšãã³ãã¥ããã£ãšå ±æããããšã§ãWasmã®æé·ãå éããæ¬¡ã®å€§ããªãããžã§ã¯ãã«åãçµããæäŒããããããšèããŠããŸããÂ
å§ããŠè©³çްãã芧ãã ãã
DockerãšWasmããã¹ãå®è¡ããŠã¿ãŸããã? Chrisã®GitHubããŒãžã§ ãç¹å¥ãªWasmäºæã®Dockerãã¹ã¯ããããã«ãããã¢ãªããžããªãªã©ãžã®ãªã³ã¯ã確èªããŠãã ããããŸãã Docker + Wasm ã®ãµããŒãã匷åãç¶ããäžã§ããã£ãŒãããã¯ããåŸ ã¡ããŠããŸãã
æåŸã«ã ä»åŸã®ããŒãã¢ããã§ãå°éå®¶ã仲éã®éçºè ãšäžç·ã«WebAssemblyãšãã€ã¯ããµãŒãã¹ã«ã€ããŠè©³ããç¥ãæ©äŒããèŠéããªãã