泚 : Fastly Compute@Edge åãã® AssemblyScript SDK (@fastly/as-compute) ã¯å»æ¢ãããããå é²çã§æ©èœãè±å¯ãªÂ JavaScript SDK (@fastly/js-compute) ã代ããã«ãå©çšããã ããŸãã
ããã«ã¡ã¯ïŒCompute@Edge</u> ãµãŒããŒã¬ã¹ã³ã³ãã¥ãŒãã£ã³ã°ç°å¢æ åœã®ã·ãã¢ãœãããŠã§ã¢ãšã³ãžãã¢ã§ãAssemblyScript ã®ã³ã¢ããŒã ã¡ã³ããŒã®ã¢ãŒãã³ã»ã¿ãŒããŒã§ããæè¿ã® Compute@Edge ã¢ããããŒãã§ãAssemblyScript ããµããŒãããŠããããšãçºè¡šããŸããããã®èšäºã§ã¯ããã®æ°ããèšèªã«ã€ããŠè©³ããã玹ä»ããŸãããã ããã®åã«ããŸã㯠JavaScript ã«ã€ããŠã話ãããããšæããŸãã
JavaScript ã¯ãæãåºã䜿çšãããŠããããã°ã©ãã³ã°èšèª</u>ã®ã²ãšã€ã§ãããããããšããžã§ããžãã¯ãå®è¡</u>ããå Žåãšåæ§ã«ãåžžã«å®ç§ã«ãã£ããããããã§ã¯ãããŸãããæ¬ ç¹ã®å€ãã¯ã䞻㫠JavaScript ãåçã«åä»ããããã€ã³ã¿ãŒããªã¿åèšèªã§ãããå®è¡ã«ã¯ã©ã³ã¿ã€ã ãå¿ èŠã§ããããšã§ãã
ãŸããJavaScript ã®ã©ã³ã¿ã€ã ã¯åŸ¹åºçã«æé©åãããŠããå¿ èŠããããŸããããã«ãéçã«åä»ããããã³ã³ãã€ã«èšèªãšåã¬ãã«ã§ JavaScript ãå®è¡ããã«ã¯ãJust-in-Time ã³ã³ãã€ã«ãªã©ã®ãã¯ããã¯ãå¿ èŠã§ããV8 ã®ãããªã©ã³ã¿ã€ã ã¯ããããªãã®éã®ãªãœãŒã¹ã䜿ã£ãŠ JavaScript ãå®è¡ããå Žåã«ã¯çŽ æŽããã广ãäžããŸãããåçã«åä»ããããããŸãã¯è§£éãããèšèªã䜿çšããªãæ¹ãããé«ãããã©ãŒãã³ã¹ãçºæ®ã§ããŸãã ãããJavaScript ãšåããããªéçºè äœéšãåŸãããã ãã§ãªããéçã«åä»ãããã³ã³ãã€ã«ãããèšèªã®ã¡ãªãããåŸããããšãããã©ãã§ããããïŒ
TypeScript ã¯ãJavaScript ã«åã远å ãã€ãŸã JavaScript ã¢ããªã±ãŒã·ã§ã³ã«åå®å šæ§ãå°å ¥ããããšã«ãã£ãŠãã®äžéšãå®çŸããŠããŸããTypeScript 㯠JavaScript éçºè ã®éã§åºã䜿ãããŠããŸããJavaScript éçºè ã®80%以äžã TypeScript ã䜿çšããŠããããããã¯ç¿åŸããããšèããŠããŸã</u>ãããããTypeScript ã¯å®å šãªã³ã³ãã€ã«åèšèªã§ã¯ãããŸãããã³ãŒãã忀æ»ããŸãããæçµçã«ã¯å®å šã«ã³ã³ãã€ã«ããããã€ããªã§ã¯ãªããçŽç²ãª JavaScript ãçæããããã«åãåé€ããŸãã
AssemblyScript ãå ¥å
AssemblyScript 㯠WebAssembly ãã€ããªãçæãã TypeScript ã®å€åœ¢çã§ãFastly ã® Compute@Edge</u> ãåãããã€ããªãã©ãŒãããã§ããããã¯ããã¹ãŠã®äž»èŠãªãã©ãŠã¶ã§ãµããŒããããŠããæ°ãããã¯ãããžãŒã§ãããJavaScript ãšæ¯èŒããŠãäºæž¬å¯èœãªããã©ãŒãã³ã¹ãæäŸãããããWebAssembly ã¯èšç®è² è·ã®é«ãã¿ã¹ã¯ã«é©ããŠããŸãããŸããWebAssembly 㯠npm ã®ãããªããã±ãŒãžã¬ãžã¹ããªã§ç°¡åã«é åžã§ãããã©ãŠã¶ãš Lucet</u> ã®ãããªã¹ã¿ã³ãã¢ãã³ã©ã³ã¿ã€ã ã®äž¡æ¹ã§å®è¡ã§ãããããç§»æ€æ§ãéåžžã«é«ããšèšããŸãã
AssemblyScript ã¯ãTypeScript ãããå³å¯ãªåä»ããå¿ èŠãšããŸãããTypeScript ã®ã·ã³ã¿ãã¯ã¹ãšã»ãã³ãã£ã¯ã¹ã«éããªãè¿ããããã»ãšãã©ã® JavaScript éçºè 㯠AssemblyScript ã䜿ãããããšæããã§ããããããã¯ãå é²ç㪠JavaScript ãšã³ã·ã¹ãã ãžã®å€§ããªãµããŒãã«ãªããŸããäŸãã°ãAssemblyScript ã³ã³ãã€ã©ã¯ npm ã§å©çšã§ãã</u>äžãas-pect</u>ã®ãããªäžè¬ç㪠AssemblyScript ããŒã«ãã©ã€ãã©ãªã§ãå©çšå¯èœã§ãããŸããAssemblyScript ãã¡ã€ã«ã«ã¯ TypeScriptã®ã.tsããšãããã¡ã€ã«æ¡åŒµåã䜿ãããŠãããTypeScript ãªã³ã¿ãŒã®ãã㪠TypeScript ããŒã«ã« AssemblyScript ããã®ãŒããã¯ããããã®åä»ããå«ãŸããŠããŸããã¡ãã£ãšãã調æŽãè¡ãããšã§ãAssemblyScript 㯠TypeScript ã³ã³ãã€ã©ãšäžç·ã«äœ¿ãããšãå¯èœã§ãã
AssemblyScript ã¯ãJavaScript éçºè ã WebAssembly ãåºåããèšèªãéžæããäžã§ããªãŒããŒãããã®å°ãªããšã³ããªãŒãã€ã³ããæäŸãããããããã¯éåžžã«ãšããµã€ãã£ã³ã°ã§ããAssemblyScript ãåŠã¶ãšããç¹ã§ããJavaScript éçºè ã®ã¯ãŒã¯ãããŒã«ãã§ã«ååšããæ¢åã®ããŒã«ã®å€ãã䜿çšã§ãããšããç¹ã§ããäž¡æ¹ã®ç¹ã§åªããŠããŸããWebAssembly ã³ãã¥ããã£ã§ã¯ãAssemblyScript 㯠WebAssembly ã䜿ãããªãããã®åªããã²ãŒããŠã§ã€ãšèããããŠããŸããAssemblyScript 㯠Web ã¢ããªã±ãŒã·ã§ã³ãæžããŠãã倧å¢ã®éçºè ãã¡ã«ãWebAssembly ãåŠã¶ãã£ããããããããŸããJavaScript ã TypeScript ã«ç¹ã«ç²ŸéããŠããªãåå¿è ã®æ¹ã®å Žåã§ããAssemblyScript 㯠WebAssembly ãåºåããããã®èšèªãšããŠå å®ãªéžæãšãããŸããÂ
ããããAssemblyScript ã«ãããã€ãèæ ®ãã¹ãæ¬ ç¹ããããŸãã
2020幎ã«ããã AssemblyScript ã®äŒžã³æ©ã¿
AssemblyScript ã¯ãŸã éåžžã«æ°ããèšèªã®ãããæç床ã«ãããŠããã€ãåé¡ããããŸããäŸãã°ãAssemblyScript ã§ã¯ãäžè¬çãªèšèªæ©èœã§ããã¯ããŒãžã£ãšæ£èŠè¡šçŸããµããŒããããŠããŸãããã¯ããŒãžã£ãæ¬ åŠããŠãããããä»ã®é¢æ°ã«é¢æ°ãæž¡ãããšãå°é£ã«ãªããŸã (JavaScript ã TypeScript ã§ã¯äžè¬ç)ããŸããæ£èŠè¡šçŸããµããŒããããŠããªãã®ã§ãæååã®è§£æãä¿®æ£ãé£ãããªããŸããããã¯ãäžéšã®ã¢ããªã±ãŒã·ã§ã³ã«ãšã£ãŠé倧ãªåé¡ã§ãã幞ããäž¡æ©èœå ±ã« AssemblyScript ã§ãµããŒãããããããéçºãé²ããããŠããŸãã
ããã«ãAssemblyScript ã¯è¥ãèšèªã§ãããããã³ãã¥ããã£ããšã³ã·ã¹ãã ãæçããŠããŸãããã³ãã¥ããã£ãæé·ããã«ã€ããäžè¬ç㪠JavaScript ã TypeScript ã©ã€ãã©ãªã®å€ãã AssemblyScript ã«ç§»æ€ãããããã«ãªãã¯ãã§ãããããç§»æ€çã¯ãnpm ã®ãããªäžè¬ç㪠JavaScript ããã±ãŒãžã¬ãžã¹ããªã§å ±æããããšãã§ããŸãããŸããäžè¬ç㪠JavaScript ã©ã€ãã©ãªã«ä»£ããéåžžã«çŽ æŽããã AssemblyScript åãã®ä»£æ¿ãœãªã¥ãŒã·ã§ã³ãããã§ã«èŠãããããã«ãªã£ãŠããŠããŸããäŸãã°ããas-pectã</u>㯠AssemblyScript çšã®ãŠããããã¹ããã¬ãŒã ã¯ãŒã¯ã§ãJest ããå€ããåŒãç¶ãã§ããŸãããas-wasiã</u>ã¯ãWASI (WebAssembly System Interface) ã®äžã«äœçœ®ããé«ã¬ãã«ã®ã©ã€ãã©ãªã§ãNode API ã®ããã«ã·ã¹ãã ãªãœãŒã¹ (FileSystemãTime ãªã©) ãšããåããããããã®ãã®ã§ãã
AssemblyScript ãåããŠãããã©ããã®å€æ
ãŸããAssemblyScript ãåããŠããªããã®ããåãäžããããšæããŸãããã®èšäºã§ãäœåºŠãè¿°ã¹ãããã«ãAssemblyScript ã¯çŸåšã® JavaScript ãŸã㯠TypeScript ã¢ããªã±ãŒã·ã§ã³ã®ä»£æ¿ã«ã¯ãªããŸããããts-nodeãã¢ããªãããã©ãŠã¶ã®äžè¬çãªã°ããŒãã«ãªããžã§ã¯ã (ãwindowããªã©) ã«äŸåãã JavaScript ã¹ãããã ã䜿ã£ãŠ AssemblyScript ã³ã³ãã€ã©ã§å®è¡ããWebAssembly ããç¡æã§ãååŸããããšãã§ããèš³ã§ã¯ãããŸãããÂ
AssemblyScript ãæäŸããã®ã¯ãæ¢åã® JavaScript ãŸã㯠TypeScript ã³ãŒãããã㊠JavaScript ã TypeScript ã®äŸåé¢ä¿ããããçæéã®åŠç¿ã§ WebAssembly ã«ç§»æ€ããããã®äžçš®ã®è¶³æããã§ããäœæ ãªããæ°ãã AssemblyScript ã¢ããªã±ãŒã·ã§ã³ãšç§»æ€ãããäŸåé¢ä¿ (ãã§ã«ä»£æ¿ã®äŸåé¢ä¿ãååšããªãå Žå) ã¯ãAssemblyScript ã³ã³ãã€ã©ã䜿ã£ãŠ WebAssembly ã«ã³ã³ãã€ã«å¯èœã ããã§ããã¢ããªã±ãŒã·ã§ã³ãã©ã€ãã©ãªããã©ãããã©ãŒã ã®ã°ããŒãã«ãªããžã§ã¯ãã«äŸåããªãå Žå (ã€ãŸã JavaScript ãŸã㯠TypeScript ããååããŸãã¯ããŠãããŒãµã«ãã®å Žå)ãããã€ãã®ã³ãŒãã®åã远å ããã倿Žãããããã ãã§ç°¡åã«ç§»æ€ã§ããŸãããããžã§ã¯ãããã®äŸåé¢ä¿ããã©ãããã©ãŒã åºæã®ã°ããŒãã«ãªããžã§ã¯ãã䜿çšããŠããå Žåã¯ããããã°ããŒãã«ãªããžã§ã¯ããåå®è£ ãããããã¹ãã©ã³ã¿ã€ã ãéããŠã€ã³ããŒãããå¿ èŠããããããç§»æ€ã¯ããå°é£ã«ãªããŸããJavaScript ã¢ããªã±ãŒã·ã§ã³ã AssemblyScript ã«ç§»æ€ãããã¯ããã¯ã«ã€ããŠã¯ãä»åŸã®èšäºã§ã玹ä»ããŸãã
ãããŒãããå§ããããšèšãã®ã§ããã°ãAssemblyScript 㯠WebAssembly ãå§ããã®ã«æé©ãªèšèªã§ãããã§ã« JavaScript ã TypeScript ã®ç¥èããæã¡ã®å Žåã¯ãç¹ã«ç°¡åã« AssemblyScript ãç¿åŸããããšãã§ããã§ããããã·ã³ã¿ãã¯ã¹ã®é¡äŒŒç¹ãšææ°ã® JavaScript ã¯ãŒã¯ãããŒã«ãããAssemblyScript ã®äœ¿ãæ¹ããã£ãšããéã«åŠç¿ããçŸåšã®ãããžã§ã¯ãã«è¿œå ããããšãå¯èœã§ãããŸã JavaScript ã TypeScript ã«æ £ããŠããªãå Žåã¯ãAssemblyScript ã®è¿œå æ©èœã䜿ãããšã§ããçæéã«ç¿åŸããããšãã§ããŸããäŸãã°ãAssemblyScript 㯠WebAssembly ãæ§æããæŠå¿µã®çè§£ãå©ããAPI ãã«ããŒãæäŸããŠããŸãããããã£ãŠãWebAssembly ã¢ãžã¥ãŒã«ãšããŠå®è¡ãããæã«ãã³ãŒããã©ã®ããã«å®è¡ãããããŒã¿ãã¢ããªã±ãŒã·ã§ã³ã«æž¡ãããããçè§£ããã®ã¯ããã»ã©é£ãããããŸãããAssemblyScript ã¯ãšããµã€ãã£ã³ã°ãªæ°èšèªã§ãããç§ãã¡ãã³ãã¥ããã£ãæé·ããã®ã楜ãã¿ã«ããŠããŸãã
詳现ã«ã€ããŠã¯ãäžèšã® Web Directions Code 2020 ã§ã®ç§ã®è¬æŒãã芧ãã ããããã®èšèªããçããŸãã客æ§ãFastly ã®åœ¹ã«ç«ã€ããšãé¡ã£ãŠããŸããä»åŸããç§ãã¡ãšå ±ã« AssemblyScript ã®çºå±ãèŠå®ã£ãŠãã ããã
