WASI Preview 2ãšã³ã³ããŒãã³ãã¢ãã«ã«ããWebAssemblyã®é²åãæ¢ããã¯ãã¹ãã©ãããã©ãŒã äºææ§ãã¢ãžã¥ãŒã«æ§ãã»ãã¥ã¢ãªå®è¡ãžã®åœ±é¿ãšãäžçã®ãœãããŠã§ã¢éçºãã©ãå€ãããã解説ããŸãã
WebAssembly Component Interface: WASI Preview 2ãšã³ã³ããŒãã³ãã¢ãã«ã®åŸ¹åºè§£èª¬
WebAssembly (Wasm) ã¯ãããŸããŸãªãã©ãããã©ãŒã ã§ã³ãŒããå®å šãã€å¹ççã«å®è¡ã§ãã驿°çãªæè¡ãšããŠç»å ŽããŸãããWASI (WebAssembly System Interface) ãã³ã³ããŒãã³ãã¢ãã«ã®ãããªåãçµã¿ã«ãã£ãŠæšé²ããããã®é²åã¯ããœãããŠã§ã¢ãäžçäžã§éçºã»å±éãããæ¹æ³ãåæ§ç¯ããŠããŸããæ¬èšäºã§ã¯ããããã®éèŠãªæè¡ã®å æ¬çãªæŠèŠãæäŸãããã®å©ç¹ãæè¡çåºç€ããããŠã³ã³ãã¥ãŒãã£ã³ã°ã®æªæ¥ãžã®åœ±é¿ãæ¢ããŸãã
WebAssemblyãšãã®éèŠæ§ã®çè§£
WebAssemblyã¯ãã¹ã¿ãã¯ããŒã¹ã®ä»®æ³ãã·ã³çšã«èšèšããããã€ããªåœä»€åœ¢åŒã§ãããã®ç§»æ€æ§ãå¹çæ§ãã»ãã¥ãªãã£ãç¹åŸŽã§ããå ã ã¯Webãã©ãŠã¶ã§é«æ§èœãªã³ãŒããå®è¡ããææ®µãšããŠèæ¡ãããŸããããWasmã¯ãã®ãã©ãŠã¶äžå¿ã®èµ·æºãè¶ ããã¯ã©ãŠãã³ã³ãã¥ãŒãã£ã³ã°ãããšããžããã€ã¹ãŸã§ãããŸããŸãªã¢ããªã±ãŒã·ã§ã³ã®ããã®æ±çšçãªãã©ãããã©ãŒã ãšãªã£ãŠããŸãã
WebAssemblyã®äž»ãªå©ç¹ã¯æ¬¡ã®ãšããã§ãã
- ããã©ãŒãã³ã¹ïŒWasmã³ãŒãã¯ããã®å¹ççãªãã€ãã³ãŒã圢åŒãšæé©åãããä»®æ³ãã·ã³ã®å®è£ ã«ããããã€ãã£ãã«è¿ãé床ã§å®è¡ãããŸãã
- ç§»æ€æ§ïŒWasmãã€ããªã¯ãããŸããŸãªãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ãããŒããŠã§ã¢ã¢ãŒããã¯ãã£ã§å®è¡ã§ããããã«èšèšãããŠãããéåžžã«ç§»æ€æ§ãé«ãã§ãã
- ã»ãã¥ãªãã£ïŒWasmã®ãµã³ãããã¯ã¹åãããå®è¡ç°å¢ã¯ãã·ã¹ãã ãªãœãŒã¹ãžã®ã¢ã¯ã»ã¹ãå¶éããã»ãã¥ãªãã£ã匷åããæªæã®ããã³ãŒãã«ãã被害ãé²ããŸãã
- ã¢ãžã¥ãŒã«æ§ïŒWasmã¯ã¢ãžã¥ãŒã«æ§ãä¿é²ããéçºè ãç°ãªãã¢ããªã±ãŒã·ã§ã³ããã©ãããã©ãŒã éã§ã³ã³ããŒãã³ããæ§ç¯ã»åå©çšã§ããããã«ããŸãã
- èšèªéäŸåïŒéçºè ã¯CãC++ãRustãGoãªã©ã®èšèªã§Wasmã¢ãžã¥ãŒã«ãäœæã§ããæè»æ§ãæäŸãããã³ããŒããã¯ã€ã³ãæžãããŸãã
äŸïŒäžççãªç©æµäŒæ¥ãã«ãŒãæé©åã¢ã«ãŽãªãºã ãå°å ¥ããã±ãŒã¹ãèããŠã¿ãŸãããããã©ã€ããŒã䜿çšããåãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ïŒiOSãAndroidãWindowsïŒåãã«åå¥ã®ã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ãã代ããã«ãã¢ã«ãŽãªãºã ãWasmã«ã³ã³ãã€ã«ã§ããŸãããã®åäžã®ãã€ããªã¯ãã¹ãŠã®ããã€ã¹ã«å±éã§ããäžè²«ããããã©ãŒãã³ã¹ãšéçºå·¥æ°ã®åæžãä¿èšŒããŸããããã¯å€§å¹ ãªã³ã¹ãåæžãšãªããããè¿ éãªæ©èœæŽæ°ãå¯èœã«ããŸãã
WASIã®ç޹ä»ïŒWasmãšãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã®éã®ã®ã£ãããåãã
Wasmã¯å®å šãªå®è¡ç°å¢ãæäŸããŸãããåœåã¯ã·ã¹ãã ãªãœãŒã¹ãžã®çŽæ¥ã¢ã¯ã»ã¹ãæ¬ ããŠããŸãããWASIã¯ãWasmã¢ãžã¥ãŒã«ãåºç€ãšãªããªãã¬ãŒãã£ã³ã°ã·ã¹ãã ãšå¯Ÿè©±ããããã®æšæºåãããã·ã¹ãã ã€ã³ã¿ãŒãã§ãŒã¹ãæäŸããããšã§ããã®å¶éã«å¯ŸåŠããããã«éçºãããŸãããWASIã¯ãWasmã¢ãžã¥ãŒã«ããã¡ã€ã«I/Oããããã¯ãŒã¯éä¿¡ãç°å¢ãžã®ã¢ã¯ã»ã¹ãªã©ã®ã¿ã¹ã¯ãå®è¡ããããã«äœ¿çšã§ããäžé£ã®APIãå®çŸ©ããŸãã
WASIã®äž»ãªç¹åŸŽïŒ
- æšæºåïŒWASIã¯ãWasmã¢ãžã¥ãŒã«ãšãã¹ãç°å¢ãšã®éã®ã€ã³ã¿ãŒãã§ãŒã¹ãæšæºåããçžäºéçšæ§ãšç§»æ€æ§ãä¿é²ããããšãç®æããŠããŸãã
- ã»ãã¥ãªãã£ïŒWASIã¯ãå¶åŸ¡ããããµã³ãããã¯ã¹ç°å¢ãæäŸããã·ã¹ãã ãªãœãŒã¹ãžã®çŽæ¥ã¢ã¯ã»ã¹ãé²ãããšã§ãã»ãã¥ãªãã£ãåªå ããŸãã
- ã¢ãžã¥ãŒã«æ§ïŒWASIã«ãããéçºè ã¯ç¹å®ã®æ©èœãéžæã§ããæ»æå¯Ÿè±¡é åãæžãããã»ãã¥ãªãã£ãé«ããããšãã§ããŸãã
- æ¡åŒµæ§ïŒWASIã¯æ¡åŒµå¯èœã«èšèšãããŠãããé²åãããŠãŒã¹ã±ãŒã¹ããµããŒãããããã«æ°ããæ©èœãAPIã远å ãããŸãã
WASI Preview 1ã®å¶éïŒåœåãWASIã¯äž»ã«ãã¡ã€ã«I/Oãšããã€ãã®åºæ¬çãªç°å¢å€æ°ã«çŠç¹ãåœãŠããæ¯èŒçåºæ¬çãªæ©èœã»ãããæäŸããŠããŸãããWasmã¢ãžã¥ãŒã«ã广çã«æ§æããèœåã«æ¬ ããŠãããç°ãªãã¢ãžã¥ãŒã«ãçµ±åããã«ã¯è€éãªåé¿çãå¿ èŠãšãªãããšããããããŸããã
WASI Preview 2ïŒã³ã³ããŒãã³ãã¢ãã«ã®é²å
WASI Preview 2ã¯ãWebAssemblyæè¡ã«ããã倧ããªé£èºã衚ããŠããŸããWasmã¢ãžã¥ãŒã«ãã©ã®ããã«çžäºäœçšããæ§æãããããšãããã©ãã€ã ã·ããã§ããã³ã³ããŒãã³ãã¢ãã«ãå°å ¥ããŸããã³ã³ããŒãã³ãã¢ãã«ã¯ãã¢ãžã¥ãŒã«ããŒã¹ã®ã¢ãããŒãã«çŠç¹ãåœãŠãWASI Preview 1ã®å€ãã®å¶éã«å¯ŸåŠããŸãã
WASIã³ã³ããŒãã³ãã¢ãã«ã®äž»èŠãªæŠå¿µïŒ
- ã³ã³ããŒãã³ãïŒãããã¯åºæ¬çãªæ§æèŠçŽ ã§ããã³ã³ãã€ã«ãããããã±ãŒãžåãããWasmã¢ãžã¥ãŒã«ã§ããã³ã³ããŒãã³ãã¯ãæç¢ºã«å®çŸ©ãããã€ã³ã¿ãŒãã§ãŒã¹ãéããŠçžäºã«äœçšã§ããèªå·±å®çµåã®ã³ãŒãåäœã§ãã
- ã€ã³ã¿ãŒãã§ãŒã¹ïŒã€ã³ã¿ãŒãã§ãŒã¹ã¯ã³ã³ããŒãã³ãéã®å¥çŽãå®çŸ©ããã³ã³ããŒãã³ããå ¬éã»æ¶è²»ãã颿°ãããŒã¿åãããã³åäœãæå®ããŸãã
- ã¯ãŒã«ãïŒã¯ãŒã«ãã¯ãã€ã³ã¿ãŒãã§ãŒã¹ã®ã³ã¬ã¯ã·ã§ã³ãšã³ã³ããŒãã³ãã®æ§æãå®çŸ©ããŸããããã«ãããã³ã³ããŒãã³ããçµã¿ç«ãŠãŠé£æºãããããšãã§ããŸããã¯ãŒã«ãã¯ãã¢ããªã±ãŒã·ã§ã³ã®ãšã³ããªãŒãã€ã³ããå®çŸ©ããããšãã§ããŸãã
- ã€ã³ããŒããšãšã¯ã¹ããŒãïŒã³ã³ããŒãã³ãã¯ãä»ã®ã³ã³ããŒãã³ãã®æ©èœã䜿çšããããã«ã€ã³ã¿ãŒãã§ãŒã¹ãã€ã³ããŒãããèªèº«ã®æ©èœãå®çŸ©ããã€ã³ã¿ãŒãã§ãŒã¹ããšã¯ã¹ããŒãããŸãã
ã³ã³ããŒãã³ãã¢ãã«ã®å©ç¹ïŒ
- ã¢ãžã¥ãŒã«æ§ã®åäžïŒã³ã³ããŒãã³ãã¯å®¹æã«æ§æããããã€ã管çã§ããããã¢ãžã¥ãŒã«åããããœãããŠã§ã¢ã¢ãŒããã¯ãã£ãå¯èœã«ããŸãã
- çžäºéçšæ§ã®åäžïŒã³ã³ããŒãã³ãã¢ãã«ã¯ã€ã³ã¿ãŒãã§ãŒã¹ãæšæºåããç°ãªãèšèªã§æ§ç¯ãããç°ãªããœãŒã¹ããæäŸãããWasmã¢ãžã¥ãŒã«ãã·ãŒã ã¬ã¹ã«çžäºäœçšã§ããããã«ããŸãã
- ã»ãã¥ãªãã£ã®åäžïŒã³ã³ããŒãã³ãã¢ãã«ã¯ãæ©èœã®ãã峿 Œãªã«ãã»ã«åãä¿é²ããã³ã³ããŒãã³ããéé¢ãããã®çžäºäœçšãå¶åŸ¡ããããšã§ã»ãã¥ãªãã£ãããã«åŒ·åããŸãã
- éçºã®ç°¡çŽ åïŒéçºè ã¯ãã¢ãžã¥ãŒã«éã®é¢ä¿ãèšèšã»ç®¡çããããã®ããæç¢ºãªæ¹æ³ããæ©æµãåããŸãã
- èšèªéã®çµ±åã®å®¹æåïŒã³ã³ããŒãã³ãã¢ãã«ãèšèªéã®éä¿¡ã®è©³çްãåŠçãããããç°ãªãèšèªãåäžã®ã¢ããªã±ãŒã·ã§ã³ã«ç°¡åã«çµ±åã§ããŸãã
äŸïŒã°ããŒãã«ãªé»ååååŒãã©ãããã©ãŒã ãæ³åããŠã¿ãŠãã ãããã³ã³ããŒãã³ãã¢ãã«ã䜿çšãããšãæ¯æãåŠçãåšåº«ç®¡çããŠãŒã¶ãŒèªèšŒãªã©ã®ããŸããŸãªæ©èœãç¬ç«ããã³ã³ããŒãã³ããšããŠæ§ç¯ã§ããŸãããããã®ã³ã³ããŒãã³ãã¯ç°ãªãèšèªïŒäŸïŒæ¯æãåŠçã¯Rustãåšåº«ç®¡çã¯GoïŒã§èšè¿°ã§ããŸãããããã¯ã¯ãŒã«ãå ã§æç¢ºã«å®çŸ©ãããã€ã³ã¿ãŒãã§ãŒã¹ãéããŠæ§æããããã©ãããã©ãŒã ãé²åããæŽæ°ãããããŸããŸãªåœã®èŠå¶ç°å¢ã«å®¹æã«é©å¿ã§ããããã«ãªããŸãããã®ã¢ãããŒãã¯ããã©ãããã©ãŒã å šäœãæŽæ°ããéã®ãªã¹ã¯ãäœæžããç°ãªãã³ã³ããŒãã³ãã®ã¡ã³ããã³ã¹ãç°¡çŽ åããŸãã
æè¡çãªæ·±æãïŒã³ã³ããŒãã³ãã¢ãã«ã®ä»çµã¿
ã³ã³ããŒãã³ãã¢ãã«ã¯ãWasmã¢ãžã¥ãŒã«ãäºãã«ããããŠå€éšã®äžçãšã©ã®ããã«çžäºäœçšãããã確ç«ããããã«ãäžé£ã®éèŠãªèŠçŽ ã䜿çšããŸãã
1. ã€ã³ã¿ãŒãã§ãŒã¹ãšWIT (WebAssembly Interface Types)ïŒ
ã³ã³ããŒãã³ãã¢ãã«ã®äžå¿ã«ã¯ãã€ã³ã¿ãŒãã§ãŒã¹ã®æŠå¿µããããŸããã€ã³ã¿ãŒãã§ãŒã¹ã¯ãã³ã³ããŒãã³ããå€éšã«æäŸããïŒãšã¯ã¹ããŒãïŒãŸãã¯ä»ã®ã³ã³ããŒãã³ãããèŠæ±ããïŒã€ã³ããŒãïŒé¢æ°ãããŒã¿ããã®ä»ã®èŠçŽ ã®åãå®çŸ©ããŸãããããã®ã€ã³ã¿ãŒãã§ãŒã¹ã¯ãWIT (WebAssembly Interface Types) ãšããèšèªã䜿çšããŠèšè¿°ãããŸãã
WITã¯ãã€ã³ã¿ãŒãã§ãŒã¹ãèšè¿°ããããã®ãã¡ã€ã³åºæèšèªïŒDSLïŒã§ããæŽæ°ãæµ®åå°æ°ç¹æ°ãæååãã¬ã³ãŒããªã©ã®åãå®çŸ©ããŸããWITå®çŸ©ã䜿çšãããšãéçºè ã¯å®£èšçãªã¹ã¿ã€ã«ã§ã€ã³ã¿ãŒãã§ãŒã¹ãå®çŸ©ã§ããŸãã
WITã³ãŒãã®äŸïŒ
package my-component;
interface greeter {
greet: func(name: string) -> string;
}
ãã®äŸã§ã¯ãWITã¯ãgreeterããšããã€ã³ã¿ãŒãã§ãŒã¹ãå®çŸ©ããŠãããããã«ã¯æååãå ¥åïŒååïŒãšããŠåãåããæååïŒæšæ¶ïŒãè¿ãåäžã®é¢æ°ãgreetããå«ãŸããŠããŸãã
2. ã¢ããã¿ãŒïŒ
ã¢ããã¿ãŒã¯ãèšèªéã®çžäºéçšãšã³ã³ããŒãã³ãéã®éä¿¡ãåŠçããäžéã³ã³ããŒãã³ãã§ãããããã¯WITå®çŸ©ã«åºã¥ããŠããŒã«ãã§ãŒã³ã«ãã£ãŠèªåçã«çæã§ããŸããã¢ããã¿ãŒã¯ãèšèªåºæã®åŒã³åºãèŠçŽãšã³ã³ããŒãã³ãã¢ãã«ã®æšæºåãããã€ã³ã¿ãŒãã§ãŒã¹ãšã®éã§å€æãè¡ããŸãã
3. ã¯ãŒã«ããšæ§æïŒ
ã¯ãŒã«ãã¯ãã€ã³ã¿ãŒãã§ãŒã¹ãšãã®æ§æã®ã³ã¬ã¯ã·ã§ã³ã§ãããããã®ã€ã³ã¿ãŒãã§ãŒã¹ãå®è£ ã䜿çšããã³ã³ããŒãã³ããæ¥ç¶ããŸããã¯ãŒã«ãã¯ãã³ã³ããŒãã³ãããªãŒã±ã¹ãã¬ãŒã·ã§ã³ãããããã¬ãã«ã®æ§æã§ããã¯ãŒã«ãã®åœ¹å²ã¯ãã³ã³ããŒãã³ããæ¥ç¶ãããããã®é¢ä¿ãå®çŸ©ããã©ã®ã³ã³ããŒãã³ããã¢ããªã±ãŒã·ã§ã³ã®ãšã³ããªãŒãã€ã³ããšããŠå ¬éãããããæå®ããããšã§ãã
4. ããŒã«ãµããŒãïŒ
ã³ã³ããŒãã³ãã¢ãã«ããµããŒãããããã«ãäžé£ã®ããŒã«ãå©çšå¯èœã§ãã
- Wasmtime, WizerïŒãããã¯Wasmã¢ãžã¥ãŒã«ãå®è¡ããã©ã³ã¿ã€ã ç°å¢ã§ãããã³ã³ããŒãã³ãã¢ãã«ããµããŒãããŠããŸãã
- Cargoããã³ãã®ä»ã®ãã«ãããŒã«ïŒRustãGoãªã©ïŒïŒãããã®ãã«ãããŒã«ã¯ãã³ã³ããŒãã³ãã¢ãã«ã«åŸã£ãŠã³ã³ããŒãã³ãããã«ãããã³ããã±ãŒãžåããããã®ãµããŒããæäŸããŸãããŸããå€ãã®å ŽåãWITå®çŸ©ã®äœæãå¿ èŠãªã¢ããã¿ãŒã³ãŒãã®çæãåŠçããæ©èœãåããŠããŸãã
- wasi-sdkïŒãã®ããŒã«ãã§ãŒã³ã¯ãC/C++ã³ãŒããWebAssemblyã³ã³ããŒãã³ãã«ã³ã³ãã€ã«ããããã«å¿ èŠãªSDKãšããŒã«ãæäŸããŸãã
WASI Preview 2ãšã¯ã©ãŠãã³ã³ãã¥ãŒãã£ã³ã°ã®æªæ¥
ã³ã³ããŒãã³ãã¢ãã«ã®åœ±é¿ã¯ãã¯ã©ãŠãã³ã³ãã¥ãŒãã£ã³ã°ã®é åã«ãåã³ãŸãããã€ã¯ããµãŒãã¹ã¢ãŒããã¯ãã£ãæ§ç¯ããããã®ãã¬ãŒã ã¯ãŒã¯ãæäŸããŸãããŸãããµãŒããŒã¬ã¹ã¢ããªã±ãŒã·ã§ã³ããšããžã³ã³ãã¥ãŒãã£ã³ã°ã«ãéåžžã«é©ããŠããŸãã
1. ãµãŒããŒã¬ã¹ãšãšããžã³ã³ãã¥ãŒãã£ã³ã°ïŒ
Wasmã¯ãWASIãšçµã¿åãããããšã§ããµãŒããŒã¬ã¹ã³ã³ãã¥ãŒãã£ã³ã°ã«ç¹ã«é©ããŠããŸãããã®å°ããªãµã€ãºãå¹ççãªå®è¡ãã»ãã¥ãªãã£ç¹æ§ã«ããããšããžããã€ã¹ããµãŒããŒã¬ã¹ç°å¢ã§ã®ã³ãŒãå®è¡ã«çæ³çã§ããã³ã³ããŒãã³ãã¢ãã«ã¯ãã¢ãžã¥ãŒã«åŒã®ãµãŒããŒã¬ã¹é¢æ°ã®ããã±ãŒãžã³ã°ããããã€ã管çã容æã«ããŸãã
äŸïŒã°ããŒãã«ãªã³ã³ãã³ãé ä¿¡ãããã¯ãŒã¯ïŒCDNïŒãèããŠã¿ãŸããããã³ã³ããŒãã³ãã¢ãã«ã䜿çšãããšãéçºè ã¯ãšããžãµãŒããŒå šäœã«ç¹åããWasmã³ã³ããŒãã³ããå±éã§ããŸãããããã®ã³ã³ããŒãã³ãã¯ãç»åæé©åãã³ã³ãã³ã倿ããŠãŒã¶ãŒèªèšŒãªã©ã®ã¿ã¹ã¯ãå®è¡ãããããããŸããããã®åæ£ã¢ãŒããã¯ãã£ã¯ãããã©ãŒãã³ã¹ãåäžãããé å»¶ãåæžãã匷åãããã»ãã¥ãªãã£ãæäŸããŸãã
2. ãã€ã¯ããµãŒãã¹ã¢ãŒããã¯ãã£ïŒ
ã³ã³ããŒãã³ãã¢ãã«ã®ã¢ãžã¥ãŒã«æ§ãšçžäºéçšæ§ã®ç¹åŸŽã¯ããã€ã¯ããµãŒãã¹ã®äœæãå¯èœã«ããŸãããµãŒãã¹å ã®åã³ã³ããŒãã³ãã¯ããã€ã¯ããµãŒãã¹ãšããŠæ©èœã§ããŸãããã®ã¢ãžã¥ãŒã«æ§ã«ããããã€ã¯ããµãŒãã¹ã®æŽæ°ãšã¹ã±ãŒãªã³ã°ãç°¡çŽ åãããŸããæšæºã€ã³ã¿ãŒãã§ãŒã¹ã«ãããç°¡åãªéä¿¡ãšãµãŒãã¹ãã£ã¹ã«ããªãå¯èœã«ãªããŸãã
äŸïŒå€§èŠæš¡ãªå€åœç±äŒæ¥ã¯ãæ³åŸãé貚ãåžå Žååã®å°åçãªå·®ç°ã«å¯Ÿå¿ããããã«ãã¢ãžã£ã€ã«ãªã¢ãŒããã¯ãã£ãå¿ èŠãšãããããããŸãããåæ©èœé åïŒæ¯æããåšåº«ããŠãŒã¶ãŒèªèšŒïŒã¯ãã³ã³ããŒãã³ããšããŠåé¢ããŠæ§ç¯ã§ããŸãããã®ã¢ãžã¥ãŒã«æ§ã«ãããäŒæ¥ã¯çµ±äžãããå šäœã·ã¹ãã ãç¶æãã€ã€ãç°ãªãå°ççèŠä»¶ã«é©å¿ã§ããŸãã
3. ã¯ãã¹ãã©ãããã©ãŒã å±éïŒ
ã³ã³ããŒãã³ãã¢ãã«ã¯ãããã°ã©ã ãç°ãªããã©ãããã©ãŒã ã§å®è¡ããã®ã容æã«ããŸããWasmã䜿çšããããšã§ãåäžã®ã³ãŒãããŒã¹ãã¯ã©ãŠããã©ãããã©ãŒã ããšããžããã€ã¹ãå«ãããŸããŸãªç°å¢ã§å®è¡ã§ããŸããããã«ãããéçºè ã¯ãã©ãããã©ãŒã ããšã«åå¥ã®ã³ãŒããæžãããšãªããåãã¢ããªã±ãŒã·ã§ã³ãå šäžçã«å±éã§ããŸãã
éçºè ã«ãšã£ãŠã®WASI Preview 2ã®å©ç¹
ã³ã³ããŒãã³ãã¢ãã«ã¯ãéçºè ã«å€§ããªå©ç¹ãæäŸããŸãã
- éçºãµã€ã¯ã«ã®é«éåïŒã³ã³ããŒãã³ãã¢ãã«ã¯ã¢ãžã¥ãŒã«æ§ãšã³ãŒãã®åå©çšãä¿é²ããéçºæéãšåŽåãåæžããŸãã
- ã³ãŒãå質ã®åäžïŒæšæºåãããã€ã³ã¿ãŒãã§ãŒã¹ãšéé¢ãããã³ã³ããŒãã³ãã«ãããã³ãŒãã®çè§£ããã¹ããä¿å®ã容æã«ãªããŸãã
- ã»ãã¥ãªãã£ã®åŒ·åïŒWasmã®ãµã³ãããã¯ã¹åãããæ§è³ªãšã³ã³ããŒãã³ãã¢ãã«ã«ãããã»ãã¥ãªãã£ã®è匱æ§ãæžå°ããŸãã
- çžäºéçšæ§ã®åäžïŒã³ã³ããŒãã³ãã¢ãã«ã¯ãèšèªã«é¢ä¿ãªããç°ãªãã³ã³ããŒãã³ãéã®äºææ§ãä¿èšŒããŸãã
- ãããã€ã®ç°¡çŽ åïŒã³ã³ããŒãã³ãã¯ç°¡åã«ããã±ãŒãžåããããŸããŸãªãã©ãããã©ãŒã ã«å±éã§ããŸãã
éçºè åãã®å®è·µçãªæŽå¯ïŒ
- WITãåŠã¶ïŒãŸããWITã®åºæ¬ãåŠã³ãã³ã³ããŒãã³ãã®ã€ã³ã¿ãŒãã§ãŒã¹ãå®çŸ©ããããšããå§ããŸãããã
- ããŒã«ãã§ãŒã³ã䜿çšããïŒwasmtimeãwizerãªã©ãWasmã³ã³ããŒãã³ããæ§ç¯ããããã®å©çšå¯èœãªããŒã«ã«æ £ã芪ãã¿ãŸãããã
- ã¢ãžã¥ãŒã«æ§ãåãå ¥ããïŒç°¡åã«æ§æã»åå©çšã§ããã¢ãžã¥ãŒã«åŒã®ã³ã³ããŒãã³ããäžå¿ã«ã¢ããªã±ãŒã·ã§ã³ãèšèšããŸãããã
- ã»ãã¥ãªãã£ãèæ ®ããïŒå ¥åæ€èšŒããªãœãŒã¹ç®¡çãªã©ãå®å šãªWasméçºã®ããã®ãã¹ããã©ã¯ãã£ã¹ãå®è£ ããŸãããã
- ç°ãªãèšèªã§å®éšããïŒç¥ã£ãŠããèšèªã§å®éšããWasmã³ã³ããŒãã³ãã®äœæãšçžäºäœçšãã©ãã»ã©ç°¡åãã確èªããŸãããã
å®äžçã®äŸãšãŠãŒã¹ã±ãŒã¹
ã³ã³ããŒãã³ãã¢ãã«ãšWASI Preview 2ã¯ãããŸããŸãªæ¥çãã¢ããªã±ãŒã·ã§ã³ã§æ¯æãåŸãŠããŸãã
- ã¯ã©ãŠãã³ã³ãã¥ãŒãã£ã³ã°ïŒãµãŒããŒã¬ã¹é¢æ°ããã€ã¯ããµãŒãã¹ãã³ã³ããåãããã¢ããªã±ãŒã·ã§ã³ã®æ§ç¯ã
- ãšããžã³ã³ãã¥ãŒãã£ã³ã°ïŒIoTããã€ã¹ãã²ãŒããŠã§ã€ããšããžãµãŒããŒãžã®ã¢ããªã±ãŒã·ã§ã³ã®å±éã
- ã»ãã¥ãªãã£ïŒå®å šãªãµã³ãããã¯ã¹åãããã¢ããªã±ãŒã·ã§ã³ã®éçºãšã»ãã¥ãªãã£ç£æ»ã
- éèæè¡ïŒå®å šã§å¹ççãªéèã¢ããªã±ãŒã·ã§ã³ã®äœæã
- ã²ãŒã ïŒã²ãŒã ããžãã¯ãç©çãšã³ãžã³ãã¯ãã¹ãã©ãããã©ãŒã ã®ã²ãŒã ãã¬ã€ã®å®è¡ã
- ã³ã³ãã³ãé ä¿¡ãããã¯ãŒã¯ïŒCDNïŒïŒã³ã³ãã³ãé ä¿¡ã®æé©åãšãšããžããŒã¹ã®ãµãŒãã¹ã®å®è¡ã
WasmãšWASIã䜿çšããŠããäŒæ¥ã®äŸïŒ
- CloudflareïŒCloudflare Workersã¯WasmãæŽ»çšããéçºè ããŠãŒã¶ãŒã«è¿ããšããžã§ã³ãŒããå®è¡ã§ããããã«ããŠããŸãã
- FastlyïŒFastlyã¯WasmããµããŒããããµãŒããŒã¬ã¹ã³ã³ãã¥ãŒãã£ã³ã°ãµãŒãã¹ãæäŸããéçºè ãã³ã³ãã³ãé ä¿¡ãã«ã¹ã¿ãã€ãºã§ããããã«ããŠããŸãã
- DenoïŒDenoã¯ãå®å šãªãµãŒããŒãµã€ãããã³ãšããžã§ã®JavaScriptå®è¡ã®ããã®ã³ã¢æè¡ãšããŠWasmããµããŒãããŠããŸãã
äžççãªåœ±é¿ïŒWasmãšWASIã®æ¡çšã¯äžççã§ãããåç±³ããšãŒããããã¢ãžã¢ããã®ä»ã®å°åã®éçºè ãäŒæ¥ããããã®æè¡ã掻çšããŠããŸãããããã¯çžäºéçšå¯èœãªã¢ããªã±ãŒã·ã§ã³ã®éçºãä¿é²ããäžçèŠæš¡ã§ã®ã€ãããŒã·ã§ã³ãšååã匷åããŸãã
課é¡ãšå°æ¥ã®æ¹åæ§
ã³ã³ããŒãã³ãã¢ãã«ãšWASI Preview 2ã¯å€§ããªå©ç¹ãæäŸããŸããã課é¡ãååšããŸãã
- ãšã³ã·ã¹ãã ã®æç床ïŒWasmãšã³ã·ã¹ãã ã¯æ¯èŒçæ°ããã§ããæŽ»çºã«æé·ããŠããŸããããã確ç«ããããã©ãããã©ãŒã ã«æ¯ã¹ãŠã©ã€ãã©ãªãããŒã«ãå°ãªãã§ãã
- ãããã°ïŒWasmã³ãŒãã®ãããã°ã¯ããã€ãã£ãã¢ããªã±ãŒã·ã§ã³ã®ãããã°ãããè€éã«ãªãããšããããŸãã
- ããã©ãŒãã³ã¹ãªãŒããŒãããïŒWASMããã³ã¢ãžã¥ãŒã«ééä¿¡ã«é¢é£ããåæãªãŒããŒããããèæ ®ããå¿ èŠããããŸãã
- ããŒã«ã®è€éãïŒWasmã³ã³ããŒãã³ãã®äœæãšãããã€ã«äœ¿çšãããããŒã«ã¯ãåæã®åŠç¿æ²ç·ã瀺ãå¯èœæ§ããããŸãã
å°æ¥ã®æ¹åæ§ïŒ
- ãšã³ã·ã¹ãã ã®ç¶ç¶çãªæé·ïŒWasmãšã³ã·ã¹ãã ã¯ãããå€ãã®ã©ã€ãã©ãªãããŒã«ããã¬ãŒã ã¯ãŒã¯ãšãšãã«æçããŠãããšäºæ³ãããŸãã
- ããã©ãŒãã³ã¹ã®æé©åïŒWasmããã³WASIã©ã³ã¿ã€ã ã®ããã©ãŒãã³ã¹ãåäžãããããã®ç¶ç¶çãªåãçµã¿ãè¡ãããŸãã
- æšæºåã®åãçµã¿ïŒãããªãæšæºåã®åãçµã¿ã«ãããçžäºéçšæ§ãšéçºã®å®¹æããåäžãããšæåŸ ãããŸãã
- èšèªãµããŒãã®æ¡å€§ïŒããå€ãã®èšèªã®ãµããŒãã«ãããããåºç¯ãªéçºè ãWasmã䜿çšã§ããããã«ãªããŸãã
çµè«
WASI Preview 2ã«ãã£ãŠåŒ·åãããWebAssemblyã³ã³ããŒãã³ãã¢ãã«ã¯ããœãããŠã§ã¢éçºã«ãããå€é©çãªã·ããã衚ããŠããŸããã¢ãžã¥ãŒã«æ§ãçžäºéçšæ§ãã»ãã¥ãªãã£ãä¿é²ããããšã§ãéçºè ã¯ããŸããŸãªãã©ãããã©ãŒã åãã«å¹ççã§ç§»æ€æ§ãé«ããå®å šãªã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ã§ããããã«ãªããŸããWasmãšã³ã·ã¹ãã ãæçããã«ã€ããŠããã®æè¡ã¯ã¯ã©ãŠãã³ã³ãã¥ãŒãã£ã³ã°ããšããžã³ã³ãã¥ãŒãã£ã³ã°ããããŠäžçäžã®ãœãããŠã§ã¢éçºã®æªæ¥ã圢äœãäžã§ãŸããŸãéèŠãªåœ¹å²ãæããç¶ããã§ããããWasmãåãå·»ãããŒã«ããµããŒããã³ãã¥ããã£ã¯çµ¶ããæé·ããŠããããã®æè¡ã掻çšããããšããããŸã§ä»¥äžã«å®¹æã«ãªã£ãŠããŸãã
WASI Preview 2ãšã³ã³ããŒãã³ãã¢ãã«ãžã®ç§»è¡ã¯ãWebAssemblyã®é²åã«ãããéèŠãªç¬éã瀺ããŠããŸããããã«ãããç§»æ€æ§ãé«ããã¢ãžã¥ãŒã«åŒã§å®å šãªãœãããŠã§ã¢ã®äœæãå¯èœã«ãããã¬ãŒã ã¯ãŒã¯ãçãŸããäžçã®éçºè ã«ãšã£ãŠé åçãªãã©ãããã©ãŒã ãšãªã£ãŠããŸãããã®ãã©ãããã©ãŒã ã§æåããããã®éµã¯ãWasmã®äžæ žããªãã€ã³ã¿ãŒãã§ãŒã¹ãããŒã«ãã³ã³ããŒãã³ãã®æ§æãçè§£ããããšã§ãã