ä»æ¥
ãASP.NETããŒã ã¯ãBlazorãããžã§ã¯ããASP.NETçµç¹ãªããžããªã«ç§»åããããšãçºè¡šããŸãã ã BlazorããµããŒã察象補åã«éçºã§ãããã©ããã確èªããããã«ãå®éšæ®µéãéå§ããŠããŸãã ããã¯å€§ããªåé²ã§ãïŒ

ãã¬ã€ã¶ãŒãšã¯äœã§ããïŒ ããã¯ã.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ãã¡ã€ã«ã«ç»é²ããããšã§ãã äŸïŒ
...ãããŠã.NETããåŒã³åºãããã®ã©ãããŒãäœæããŸãã
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ã³ã¡ã³ããæ€çŽ¢ããŠãã«ãªã¯ãšã¹ããéä¿¡ããããã¯ãŒã«ãªæ©èœã«é¢ããã¢ã€ãã¢ãå
±æãããããããšãã§ããŸãã
翻蚳è
ãã
æåŸã«ãèå³æ·±ããªã³ã¯ãããã€ã玹ä»ããŸãã