ãã¬ã€ã¶ãŒãšã¯äœã§ããïŒ ããã¯ã.NETã§èšè¿°ãããWebAssemblyã䜿çšããŠèµ·åããããã©ãŠã¶ãŒã¢ããªã±ãŒã·ã§ã³çšã®ãã¬ãŒã ã¯ãŒã¯ã§ãã ãªããã§ã¢ãã³ãªåäžããŒãžã¢ããªã±ãŒã·ã§ã³ïŒSPAïŒã®ãã¹ãŠã®å©ç¹ãæäŸãããšåæã«ããµãŒããŒããã³ã¯ã©ã€ã¢ã³ãã®å ±éã³ãŒãã«è³ããŸã§ã.NETãæåããæåŸãŸã§äœ¿çšã§ããŸãã çºè¡šä»ãã®æçš¿ã§ã¯ ãäž»ãªã¢ããªã±ãŒã·ã§ã³ã®ã±ãŒã¹ãçšèªãªã©ã詳现ã«èª¬æãããŠããŸãã
ãã®æçš¿ã§ã¯ããããã©ã®ããã«æ©èœãããã«èå³ããã人ã®ããã«ãæè¡çãªè©³çŽ°ã«ã€ããŠããæ·±ãã話ããããšæããŸãã
ãã©ãŠã¶ã§.NETãå®è¡ãã
.NETã§SPAãã¬ãŒã ã¯ãŒã¯ãæ§ç¯ããæåã®ã¹ãããã¯ãäœããã®æ¹æ³ã§ãã©ãŠã¶ãŒã§.NETã³ãŒããå®è¡ã§ããããã«ããããšã§ãã æåŸã«ãWebAssemblyã®ãããã§ããªãŒãã³ã¹ã¿ã³ããŒãã䜿çšããŠå®è¡ã§ããä»»æã®ãã©ãŠã¶ã§ïŒãã©ã°ã€ã³ãªãã§ïŒåäœã§ããŸãã
WebAssemblyã¯çŸåšãã¢ãã€ã«ãã©ãŠã¶ãå«ããã¹ãŠã®äž»èŠãªãã©ãŠã¶ã§ãµããŒããããŠããŸãã ããã¯ãããŠã³ããŒããããããŒã¿ã®éãæžãããŠå®è¡ãé«éåããããã«æé©åãããã³ã³ãã¯ããªãã€ãã³ãŒã圢åŒã§ãã å€ãã®éçºè ãããæããããããªããšããäºå®ã«ãããããããWebAssembly ã¯æ°ããã»ãã¥ãªãã£åé¡ãå°å ¥ããŸããããããã¯éåžžã®ãã€ããªãã¡ã€ã«ïŒx86 / x64ãªã©ïŒã§ã¯ãªãããã§ã-ããã¯åãããšããã§ããªããã€ãã³ãŒããå«ãæ°ãã圢åŒã§ãããã³javascriptã
ã§ã¯ãã©ã®ããã«ããŠ.NETãå®è¡ã§ããŸããïŒ ããã¯ã MonoããŒã ããããžã§ã¯ãã«WebAssemblyãµããŒããè¿œå ããããã§ãã ãã¥ãŒã¹ãèŠéããå ŽåãMonoãããžã§ã¯ãã¯2016幎ã«Microsoftã®äžéšã«ãªããŸããã Monoã¯ãã¯ã©ã€ã¢ã³ããã©ãããã©ãŒã ïŒãã€ãã£ãã¢ãã€ã«ã¢ããªã±ãŒã·ã§ã³ãã²ãŒã ãªã©ïŒã®å ¬åŒ.NETã©ã³ã¿ã€ã ã§ãã WebAssemblyã¯ã¯ã©ã€ã¢ã³ããã©ãããã©ãŒã ã®1ã€ã«ãããªããããMonoã䜿çšããããšã¯éåžžã«åççã§ãã
Monoã¯ã 解éã¢ãŒããšAOTã®2ã€ã®ã¢ãŒãã§WebAssemblyã§å®è¡ã§ããŸãã
解é
解éã¢ãŒãã§ã¯ã Monoã©ã³ã¿ã€ã ã¯WebAssemblyã«ã³ã³ãã€ã«ãããŸããã.NETã¢ã»ã³ããªã¯ã³ã³ãã€ã«ãããŸããã ãã©ãŠã¶ã¯ã©ã³ã¿ã€ã ãããŠã³ããŒãããŠèµ·åããŸããã©ã³ã¿ã€ã ã¯ãéåžžã®.NETããŒã«ãã§ãŒã³ã«ãã£ãŠã³ã³ãã€ã«ãããæšæºã®.NETã¢ã»ã³ããªïŒéåžžã®.NET .dllãã¡ã€ã«ïŒãããŒãããŠå®è¡ã§ããŸãã
ããã¯ãéåžžã®CLRã®å Žåãã¡ã€ã³ã³ã¢ããã€ãã£ãã³ãŒãã«ã³ã³ãã€ã«ãããŠé åžããã.NETã¢ã»ã³ããªãèªã¿èŸŒãã§å®è¡ããæ¹æ³ãšäŒŒãŠããŸãã å¯äžã®éèŠãªéãã¯ããã¹ã¯ãããCLRãJITã³ã³ãã€ã«ãç©æ¥µçã«äœ¿çšããŠå®è¡ãé«éåããã®ã«å¯ŸããŠãWebAssemblyã®Monoã¯åŸæ¥ã®è§£éã¢ãã«ã«ããè¿ãæ©èœããããšã§ãã
äºåïŒAOTïŒã³ã³ãã€ã«
AOTã¢ãŒãã§ã¯ã.NETã¢ããªã±ãŒã·ã§ã³ã¯ãã¢ã»ã³ããªããããšããã«çŽç²ãªWebAssemblyãã€ããªã«å€ãããŸãã ã©ã³ã¿ã€ã ã«ã¯è§£éããããŸãã-ã³ãŒãã¯éåžžã®WebAssemblyã³ãŒãã®ããã«å®è¡ãããŸãã ãã®ã¢ãŒãã§ã¯ãMonoã©ã³ã¿ã€ã ã®äžéšïŒã¬ããŒãžã³ã¬ã¯ã·ã§ã³ãªã©ã®äœã¬ãã«ã®.NETãµãŒãã¹ïŒãããŒãããå¿ èŠããããŸããã.NETãã¡ã€ã«ããŒãµãŒãªã©ã®ã³ã³ããŒãã³ããç Žæ£ã§ããŸãã
ããã¯ãæããngenãŠãŒãã£ãªãã£ã .NETã¢ã»ã³ããªããã€ãã£ããã·ã³ã³ãŒãã«AOTã³ã³ãã€ã«ããæ¹æ³ããŸãã¯æè¿ç»å Žããæ¬æ Œçãªãã€ãã£ãAOT .NETã©ã³ã¿ã€ã -CoreRTã«äŒŒãŠããŸãã
AOTã«å¯Ÿãã解éã¢ãŒã
ã©ã¡ãã®ã¢ãŒããè¯ãã§ããïŒ ãŸã ããããŸããã
ãã ãã解éã¢ãŒãã¯AOTãããã¯ããã«é«éãªéçºããã»ã¹ãæäŸããããšãããã£ãŠããŸãã ã³ãŒããå€æŽããåŸãéåžžã®.NETã³ã³ãã€ã©ãŒã§ã³ãŒããåæ§ç¯ãããã©ãŠã¶ãŒã§æŽæ°ãããã¢ããªã±ãŒã·ã§ã³ãæ°ç§ã§ååŸã§ããŸãã AOTã®ã³ã³ãã€ã«ã«ã¯ãæ°åãããå ŽåããããŸãã
æçœãªèãã¯ã解éã¢ãŒããéçºã®äž»ãªãã®ã§ãããçç£ã®ããã®AOTã§ãããšããããšã§ãã
ããããé©ãã¹ãããšã«ã解éã¢ãŒãã¯æã£ããããã¯ããã«é«éã§ãããããããã¯ãã¹ãŠå®å šã«ééã£ãŠããå¯èœæ§ããããŸãã ãããŠããã€ãã£ãã¢ãã€ã«ã¢ããªã±ãŒã·ã§ã³ã«.NETã䜿çšããXamarinã®æ åœè ãããAOTã¢ã»ã³ããªãšã¯ç°ãªããéåžžã®ïŒéAOTïŒ.NETã¢ã»ã³ããªã¯éåžžã«å°ãããéåžžã«å§çž®å¯èœã§ãããšèããŸããã éãã客芳çã«è©äŸ¡ããæ©äŒãåŸããããŸã§ãäž¡æ¹ã®ãªãã·ã§ã³ãæ€èšããŸãã
BlazorãSPAãã¬ãŒã ã¯ãŒã¯
ãã©ãŠã¶ãŒã§.NETãå®è¡ã§ããããšã¯è¯ãã¹ã¿ãŒãã§ãããååã§ã¯ãããŸããã çç£çãªã¢ããªã±ãŒã·ã§ã³éçºè ã«ãªãã«ã¯ãUIã®äœæ/åå©çšãç¶æ 管çãã«ãŒãã£ã³ã°ãåäœãã¹ããã¢ã»ã³ããªã®æé©åãªã©ãæšæºçãªåé¡ã«å¯Ÿããäžè²«ããäžé£ã®æšæºãœãªã¥ãŒã·ã§ã³ãå¿ èŠã§ãã .NETéçºè ãæåŸ ããããã«ããããã¯ãã¹ãŠ.NETãšCïŒèšèªã®åŒ·ã¿ãäžå¿ã«èšèšãããæ¢åã®.NETãšã³ã·ã¹ãã ãæ倧éã«æŽ»çšããæé«ã®ããŒã«ãµããŒããæäŸããå¿ èŠããããŸãã
Blazorã¯äžèšã®ãã¹ãŠã§ãã ReactãVueãAngularãªã©ã®ä»æ¥ã®æé«ã®SPAãã¬ãŒã ã¯ãŒã¯ãšãRazor Pagesãªã©ã®Microsoft UIã¹ã¿ãã¯ã«è§ŠçºãããŠããŸãã ç§ãã¡ã®ç®æšã¯ãWebéçºè ã«.NETã§æé©ã«æ©èœãããã®ãæäŸããããšã§ãã
ã³ã³ããŒãã³ã
ææ°ã®ãã¹ãŠã®SPAãã¬ãŒã ã¯ãŒã¯ã§ã¯ãã¢ããªã±ãŒã·ã§ã³ã¯ã³ã³ããŒãã³ãããæ§ç¯ãããŸãã éåžžãã³ã³ããŒãã³ãã¯ãããŒãžããã€ã¢ãã°ãã¿ãã®ã»ããããŸãã¯ãã©ãŒã ãªã©ã®äœããã®UIèŠçŽ ã§ãã ã³ã³ããŒãã³ãã¯ããããžã§ã¯ãéã§ãã¹ããåå©çšãå ±æã§ããŸãã
Blazorã§ã¯ãã³ã³ããŒãã³ãã¯.NETã¯ã©ã¹ã§ãããçŽæ¥ïŒã€ãŸããCïŒã¯ã©ã¹ãšããŠïŒããŸãã¯ããäžè¬çã«ã¯ãRazorããŒã¯ã¢ããããŒãžïŒ.cshtmlãã¡ã€ã«ïŒãšããŠèšè¿°ã§ããŸãã
2010幎é ã«ç»å ŽããRazorã¯ãããŒã¯ã¢ãããšCïŒã³ãŒããçµã¿åãããããã®æ§æã§ãã ããã¯éçºè ã®çç£æ§ã®ããã«ç¹å¥ã«äœæããããã®ã§ã ã€ã³ããªã»ã³ã¹ãå®å šã«ãµããŒãããããšã§ãåŒãªãã§ããŒã¯ã¢ãããšCïŒãåãæ¿ããããšãã§ããŸãã 次ã®äŸã¯ãRazorãã¡ã€ã«MyDialog.cshtmlã§èª¬æãããŠããåçŽãªãã€ã¢ãã°ã³ã³ããŒãã³ãã瀺ããŠããŸãã
<div class="my-styles"> <h2>@Title</h2> @RenderContent(Body) <button onclick=@OnOK>OK</button> </div> @functions { public string Title { get; set; } public Content Body { get; set; } public Action OnOK { get; set; } }
ãã®ã³ã³ããŒãã³ãã䜿çšãããšãããŒã«ãããã¯äœãäŒããã¹ãããç¥ã£ãŠããŸãã
ã¹ããŒããã«ã³ã³ããŒãã³ããã¹ããŒãã¬ã¹ã³ã³ããŒãã³ããé«æ¬¡ã³ã³ããŒãã³ããªã©ã®SPAãã¬ãŒã ã¯ãŒã¯ã®äžè¬çãªãã¿ãŒã³ãªã©ãå€ãã®ãã¶ã€ã³ãã¿ãŒã³ããã®åçŽãªåºç€äžã«æ§ç¯ã§ããŸãã ã³ã³ããŒãã³ããçžäºã«æè³ããæç¶ãçã«çæããã©ã€ãã©ãªéã§åå²ãããã©ãŠã¶ãå¿ èŠãšããã«åäœãã¹ããå®è¡ããäžè¬ã«è¯ãç掻ãéãããšãã§ããŸãã
ã€ã³ãã©
æ°ãããããžã§ã¯ããäœæãããšããBlazorã¯ã»ãšãã©ã®ã¢ããªã±ãŒã·ã§ã³ã«å¿ èŠãªåºæ¬ãµãŒãã¹ãæäŸããŸãã
- ãã¿ãŒã³
- ã«ãŒãã£ã³ã°
- äŸåæ§æ³šå ¥
- é 延èªã¿èŸŒã¿ïŒã€ãŸããå¿ èŠã«å¿ããŠã¢ããªã±ãŒã·ã§ã³ã®äžéšãèªã¿èŸŒãïŒ
- åäœãã¹ã
ã¢ãŒããã¯ãã£ã®éèŠãªåŽé¢ã¯ãã¹ãŠãªãã·ã§ã³ã§ãã äœãã䜿çšããªãå Žåãå ¬éæã«æçµãã«ãããåé€ãããŸãã
ãã1ã€ã®éèŠãªãã€ã³ã-ãã¬ãŒã ã¯ãŒã¯ã®äžæ žã«ããã®ã¯ãæäžäœã¬ãã«ã®äžéšã®ã¿ã§ãã ããšãã°ãã«ãŒãã£ã³ã°ãšãã³ãã¬ãŒãã·ã¹ãã ã¯åãã§ã¯ãããŸããããããã¯ãŠãŒã¶ãŒç©ºéã«å®è£ ãããŸããã€ãŸãããã®ã³ãŒãã¯ãå éšAPIã䜿çšããã«ã¢ããªã±ãŒã·ã§ã³éçºè ãäœæã§ããŸãã ãããã£ãŠãã«ãŒãã£ã³ã°ãŸãã¯ãã³ãã¬ãŒãã·ã¹ãã ãæ°ã«å ¥ããªãå Žåã¯ãèªåã®ãã®ã«çœ®ãæããããšãã§ããŸãã çŸåšã®ãããã¿ã€ããã³ãã¬ãŒãã·ã¹ãã ã¯çŽ30è¡ã®CïŒã³ãŒãã§ãããããå¿ èŠã«å¿ããŠç°¡åã«ææ¡ããŠæžãæããããšãã§ããŸãã
å±é
æããã«ãBlazorã®ã¿ãŒã²ãããªãŒãã£ãšã³ã¹ã®å€§éšåã¯ASP.NETéçºè ã§ãã 圌ãã®ããã«ããµãŒããŒã®äºåã¬ã³ããªã³ã°ãªã©ã®è¿œå æ©èœãåããBlazorã§ã®UIã®ééçãªãã¹ãã£ã³ã°ã®ããã®ããã«ãŠã§ã¢ããªãªãŒã¹ããŸãã
.NETããŸã£ãã䜿çšããªãéçºè ãåæ§ã«éèŠã§ãã Node.jsãRailsãPHPããŸãã¯ãã®ä»ã®ãµãŒããŒãã¯ãããžãŒã奜ãéçºè ããŸãã¯ãµãŒããŒã¬ã¹ã¢ããªã±ãŒã·ã§ã³ãäœæããéçºè ã«ãšã£ãŠBlazorãå®è¡å¯èœã«ããããã«ããµãŒããŒäžã«.NETã¯çµ¶å¯Ÿã«å¿ èŠãããŸããã Blazorã¢ããªã±ãŒã·ã§ã³ããã«ãããçµæã¯ãéçãã¡ã€ã«ã®ã¿ãå«ãdistãã©ã«ããŒã§ãã GithubããŒãžãããã¯ã©ãŠãã¹ãã¬ãŒãžãããNode.jsãµãŒããŒãä»ããŠãäžè¬çã«ã¯ãããããã®ãéããŠããããé åžã§ããŸãã
å ±éã³ãŒããšãããæšæº
.NETæšæºã¯ã.NETã©ã³ã¿ã€ã ãæäŸããæ©èœãŸãã¯.NETã¢ã»ã³ããªãå¿ èŠãšããæ©èœã®ã¬ãã«ãèšè¿°ããæ¹æ³ã§ãã .NETã©ã³ã¿ã€ã ãnetstandard2.0以åããµããŒããã netstandard2.0以éã察象ãšããã¢ã»ã³ããªãããå Žåããã®ã©ã³ã¿ã€ã ã§ãã®ã¢ã»ã³ããªãå®è¡ã§ããŸãã
WebAssemblyã®Monoã¯ã netstandard2.0以äžããµããŒãããŸã ïŒãªãªãŒã¹æ¥ã«ãã£ãŠç°ãªããŸãïŒã ããã¯ãããã¯ãšã³ãã¢ããªã±ãŒã·ã§ã³ãšãã©ãŠã¶ã¢ããªã±ãŒã·ã§ã³ã®äž¡æ¹ã§.NETã©ã€ãã©ãªã䜿çšã§ããããšãæå³ããŸãã ããšãã°ãããžãã¹ããžãã¯ã¢ãã«ã¯ã©ã¹ãå«ããããžã§ã¯ããããããµãŒããŒãšã¯ã©ã€ã¢ã³ãã®äž¡æ¹ã§äœ¿çšã§ããŸãã ãããŠããã¡ãããNuGetããããã±ãŒãžãããŠã³ããŒãã§ããŸãã
ãã ãããã¹ãŠã®.NET APIããã©ãŠã¶ãŒã§æå³ããªãããã§ã¯ãããŸããã ããšãã°ãä»»æã®TCPãœã±ããããªãã¹ã³ããããšã¯ã§ããªãããã System.Net.Sockets.TcpListenerã¯äœã圹ã«ç«ã¡ãŸããã ãŸãããã©ãŠã¶ã¢ããªã±ãŒã·ã§ã³ã§System.Data.SqlClientã䜿çšããªãã§ãã ããã ãããŠãããã¯åé¡ã§ã¯ãããŸããã第äžã«ããã©ãŠã¶ãŒã¯ã人ã ãWebã¢ããªã±ãŒã·ã§ã³ãäœæããããã«æ¬åœã«å¿ èŠãªAPIããŸã ãµããŒãããŠããããã§ãã第äºã«ã.NETæšæºã«ã¯ãã®ãããªå Žåã®åŠçââã¡ã«ããºã ããããŸãã ç¹å®ã®ãã©ãããã©ãŒã ã«é©çšã§ããªãAPIãåŒã³åºããšãåºæ¬ã¯ã©ã¹ã·ã¹ãã ïŒBCLïŒã¯PlatformNotSupportedäŸå€ãã¹ããŒããŸãã æåã¯ãããåé¡ãåŒãèµ·ããå¯èœæ§ããããŸãããNuGetããã±ãŒãžã®äœæè ã¯ãæéã®çµéãšãšãã«ãã©ã€ãã©ãªãå€æŽããŠããŸããŸãªãã©ãããã©ãŒã ããµããŒãããããã«ãªããŸãã .NETãäžçã§æãæ¥éã«æé·ããŠããã¢ããªã±ãŒã·ã§ã³ãã©ãããã©ãŒã ã«ç§»è¡ãããå Žåã¯ããã®æ®µéã«é²ãã§ãã ããã
JavaScript / TypeScriptäºæ
CïŒ/ FïŒã§ãã©ãŠã¶ã¢ããªã±ãŒã·ã§ã³ãèšè¿°ããŠããå Žåã§ãã誰ãã®JavaScriptã©ã€ãã©ãªãŸãã¯ç¬èªã®JavaScript / TypeScriptã³ãŒããæ¥ç¶ããŠãæ°ãããã©ãŠã¶APIãåŒã³åºãå¿ èŠãããå ŽåããããŸãã
WebAssemblyæšæºã¯JavaScriptãšå¯Ÿè©±ããããã«èšèšãããŠããïŒããã¯é©ãã¹ãããšã§ã¯ãããŸããïŒãããã¯.NETã³ãŒãã§ç°¡åã«äœ¿çšã§ãããããéåžžã«åçŽã§ãªããã°ãªããŸããã
ä»ã®äººã®JavaScriptã©ã€ãã©ãªãæäœããããã«ãå®å šãªã€ã³ããªã»ã³ã¹ãåããCïŒã³ãŒãã§TypeScriptåå®çŸ©ã䜿çšããå¯èœæ§ã調æ»ããŠããŸãã ããã«ãããçŽ1000åã®æãäžè¬çãªJSã©ã€ãã©ãªã®çµ±åãéåžžã«ç°¡åã«ãªããŸãã
.NETããå€éšã©ã€ãã©ãªãŸãã¯JS / TSã³ãŒããåŒã³åºãããã®çŸåšã®ã¢ãããŒãã¯ãååä»ãé¢æ°ãJS / TSãã¡ã€ã«ã«ç»é²ããããšã§ãã äŸïŒ
// JavaScript Blazor.registerFunction('doPrompt', message => { return prompt(message); });
...ãããŠã.NETããåŒã³åºãããã®ã©ãããŒãäœæããŸãã
// C# public static bool DoPrompt(string message) { return RegisteredFunction.Invoke<bool>("doPrompt", message); }
registerFunctionã¢ãããŒãã«ã¯ãWebpackã®ãããªJavaScriptãã«ããŒã§ããŸãæ©èœãããšããçŽ æŽãããããŒãã¹ããããŸãã
ãŸããæéãšç¥çµãç¯çŽããããã«ãMonoããŒã ã¯.NETã§æšæºã®ãã©ãŠã¶APIã転éããã©ã€ãã©ãªã®éçºã«åãçµãã§ããŸãã
æé©å
æŽå²çã«ã.NETã¯ãã¢ããªã±ãŒã·ã§ã³ã®ãµã€ãºãããã»ã©å€§ãããªããã©ãããã©ãŒã ã«çŠç¹ãåãããŠããŸããã ASP.NETã¢ããªã±ãŒã·ã§ã³ã®ééã1MBã§ã50MBã§ããããã»ã©éãã¯ãããŸããã ããã¯ããã¹ã¯ããããŸãã¯ã¢ãã€ã«ã¢ããªã±ãŒã·ã§ã³ã«ãšã£ãŠã¯äžçšåºŠã®åé¡ã§ãã ãã ãããã©ãŠã¶ã®å ŽåãããŠã³ããŒããµã€ãºã¯éåžžã«éèŠã§ãã
é²è¡é¢ã§ã¯ãWebAssemblyäžã®.NETã¯äžåºŠã ãããŠã³ããŒããããå¯èœæ§ãé«ããšèšããŸãã çµå±ãæšæºã®HTTPãã£ãã·ã¥ïŒãŸãã¯ãµãŒãã¹ã¯ãŒã«ãŒã®ãããªæŽŸæãªãã®ïŒã䜿çšããŠããŠãŒã¶ãŒãã©ã³ã¿ã€ã ã³ã¢ãäžåºŠã ãèªã¿èŸŒãããã«ããããšãã§ããŸãã ãŸããCDNã䜿çšãããšããŠãŒã¶ãŒã¯1ã€ã®ããŠã³ããŒãã®çµæãè€æ°ã®ã¢ããªã±ãŒã·ã§ã³ã§äžåºŠã«äœ¿çšããããšãã§ããŸãã
ããã¯ãã¹ãŠè¯ãããšã§ãããããã ãã§ã¯ååã§ã¯ãªããšæããŸãã ã©ã³ã¿ã€ã ã®ééã20MBã®å Žåã1åéãã®ããŠã³ããŒãã§ãã£ãŠããããã§ã倧ããããŸãã çµå±ã®ãšãããããã¯ãã©ãŠã¶ã®ãã©ã°ã€ã³ã§ã¯ãããŸãã-æšæºã«åºã¥ããŠæ§ç¯ãããæšæºã®Webã¢ããªã±ãŒã·ã§ã³ã§ãã æåã®èµ·åã§ããé«éã«ãªããŸãã
ãã®ãããããŠã³ããŒããµã€ãºã®åæžã«å€å€§ãªåŽåãè²»ãããŸããã æé©åã«ã¯æ¬¡ã®3ã€ã®ãã§ãŒãºããããŸãã
1. Monoã©ã³ã¿ã€ã ã®æžå°
Monoã©ã³ã¿ã€ã ã«ã¯ãå€ãã®ãã¹ã¯ãããåºæã®æ©èœãå«ãŸããŠããŸãã Blazorã«ã¯ãå®å šãªãã£ã¹ããªãã¥ãŒã·ã§ã³ãããå€§å¹ ã«çž®å°ãããMonoã®ç°¡æããŒãžã§ã³ãå«ãŸããããšãæåŸ ããŠããŸãã æåã§æé©åãè©Šã¿ããšãããåºç€ãšãªãã¢ããªã±ãŒã·ã§ã³ã®åäœãäžæããããšãªãã .wasmã©ã³ã¿ã€ã ãã¡ã€ã«ã®çŽ70ïŒ ãåé€ã§ããŸããã
2.å ¬éæã®ILã³ãŒãã®åæž
ãªã³ã«ãŒ.NET IL ïŒ Monoãªã³ã«ãŒã«åºã¥ãïŒã¯ãéçåæãå®è¡ãã.NETã©ã€ãã©ãªã®ã©ã®éšåãã¢ããªã±ãŒã·ã§ã³ããåŒã³åºãããšãã§ããããå€æããä»ã®ãã¹ãŠãåé€ããŸãã
ããã¯JavaScriptã®ããªãŒã·ã§ãŒãã³ã°ã«äŒŒãŠããŸãããå¯äžã®éãã¯ILãªã³ã«ãŒãã¯ããã«æ£ç¢ºã§ãããåã ã®ã¡ãœããã¬ãã«ã§æ©èœããããšã§ãã ããã«ãããã·ã¹ãã ã©ã€ãã©ãªããæªäœ¿çšã®ã³ãŒãããã¹ãŠåé€ã§ããŸããããã«ãããã»ãšãã©ã®å Žåã«å€§ããªéããçããå€ãã®å Žåãã¢ããªã±ãŒã·ã§ã³ã®ãµã€ãºãããã«70 +ïŒ åæžãããŸãã
3.å§çž®
æåŸã«ãæãæçœãªã®ã¯ããµãŒããŒãHTTPå§çž®ããµããŒãããããšã§ãã ããã¯éåžžãããªã¥ãŒã ã®ããã«75ïŒ ãã«ããããŸãã
ãã¡ããã.NET Webã¢ããªã±ãŒã·ã§ã³ã¯ãåçŽãªReactã¢ããªã±ãŒã·ã§ã³ã»ã©å°ãããªããŸããã ç§ãã¡ã®ç®æšã¯ãå¹³åçãªæ¥ç¶ã®éåžžã®ãŠãŒã¶ãŒããã£ãã·ã¥ããã®åŸç¶ã®ããŠã³ããŒãã¯èšããŸã§ããªããéåžžã«å°ããããããšã§ãã
ã§ã¯ããªãããããã¹ãŠå¿ èŠãªã®ã§ããããïŒ
奜ããšå¥œãŸãããšã«ããããããWebéçºã¯ä»åŸæ°å¹Žéã§å€§ããå€ãããŸãã WebAssemblyã«ãããWebéçºè ã¯ãããŸã§ãããã¯ããã«å€ãã®èšèªãšãã©ãããã©ãŒã ã®ãªã¹ãããéžæã§ããŸãã ãããŠããã¯è¯ãããšã§ã-ç§ãã¡ã®äžçã¯ã€ãã«æé·ããŠããŸãã ãµãŒããŒãœãããŠã§ã¢ãšãã€ãã£ãã¢ããªã±ãŒã·ã§ã³ã®éçºè ã¯ãåé¡ã解決ããã®ã«æé©ãªèšèªãšãã©ãã€ã ãåžžã«éžæã§ããããŒã ã®æåã«å¯Ÿå¿ããæ¢åã®ç¥èã«ãã£ãŠåŒ·åãããŠããŸãã HaskellãŸãã¯Lispã§éèã¢ããªã±ãŒã·ã§ã³çšã®æ©èœãæžãããšã倢èŠãŠããŸããïŒ å°ãäœã¬ãã«ã®Cãå¿ èŠã§ããïŒ ããªãã¯Appleéçºè ã§ãSwiftã®ç¥èã䜿ãç¶ãããã§ããïŒ ãããã¯ãã¹ãŠWebã«åæ ãããŸãã
å¿é ããªãã§ãã ããã ããã¯ãããããã¹ãŠã®èšèªãç¥ãå¿ èŠããããšããæå³ã§ã¯ãããŸããã ããã¯ãç§ãã¡å šå¡ãæ®éã®ãœãããŠã§ã¢éçºè ã«ãªãããšãæå³ããŸãã çŸåšã®ãã©ãŠã¶ããã°ã©ãã³ã°ã®ç¥èã¯é¢é£æ§ãšäŸ¡å€ããããŸãããã¢ã€ãã¢ãè¡šçŸããããä»ã®éçºè ã³ãã¥ããã£ãšã®æ¥ç¹ãå¢ããããããæ°ããæ¹æ³ããããŸãã
ãããŠãç§ãã¡ã®ã€ãã·ã¢ããã¯ã.NETãäœå¹Žãé ããã«ãã®åãã®æåç·ã«çœ®ãããšã§ãã
çŸç¶
è©ŠããŠã¿ããè¡åãæããŸããïŒ é ããªããŸãã-ç§ãã¡ã¯ãŸã ãããžã§ã¯ãã®éåžžã«åæã®æ®µéã«ãããŸãã ãããŸã§ã®ãšãããããŠã³ããŒãã®æºåãã§ããŠãããã®ã¯ãªããäžèšã®å€ãã¯éçºããã»ã¹ã«ãããŸãã ã»ãšãã©ã®äººã¯ãªã©ãã¯ã¹ããŠåŸ ã€å¿ èŠããããŸããæåã®ãã¬ã¢ã«ãã¡ãã«ãã¯çŽ1ãæã§è¡šç€ºãããŸãã
çŸæç¹ã§ã¯ãBlazorã¯ASP.NETããŒã ã®å®éšã§ããããšã«æ³šæããŠãã ããã æ¬æ ŒçãªãµããŒã察象補åã«ã§ãããã©ãããç解ããã«ã¯ãæ°ãæããããŸãã ãŸã äœãçŽæããŠããŸããã®ã§ãBlazorãäžå¿ã«ããžãã¹ãã©ã³ãç«ãŠãªãã§ãã ããïŒ
èå³ãããå Žåã¯ã ãªããžããªãèŠãŠããããåéããŠãã¹ããå®è¡ãã ãã£ããããŠãã ãã ã // TODOã³ã¡ã³ããæ€çŽ¢ããŠãã«ãªã¯ãšã¹ããéä¿¡ããããã¯ãŒã«ãªæ©èœã«é¢ããã¢ã€ãã¢ãå ±æãããããããšãã§ããŸãã
翻蚳è ãã
æåŸã«ãèå³æ·±ããªã³ã¯ãããã€ã玹ä»ããŸãã
- Blazorã®äœæ¥ã㢠ïŒéçºè ããŒã«ããã§ãã¯ããŠãã ãã ïŒïŒ
- NDCãªã¹ãã§ã®æåã®Blazorãããã¿ã€ãã®ãã¢ã³ã¹ãã¬ãŒã·ã§ã³
- Blazorã®çºè¡šã«å°å¿µããSteveãšã®ASP.NET Community Standup