ãããä¿®æ£ããããã«ãFilip WãMicrosoft MVPãRoslynã®å¯çš¿è ãããã³ASP.NETã®äžçã§æã人æ°ã®ããããã¬ãŒã®1人ã«ã€ã³ã¿ãã¥ãŒããŸããã Filipãæ°ããCïŒã®å€æŽã«æ°ä»ããªãããšãã«ã¹ã¿ã ã³ãŒãã¢ãã©ã€ã¶ãŒãèšè¿°ããããšããããŠCïŒã§ã®ã¹ã¯ãªãããä»ã®ã¹ã¯ãªããèšèªããåªããŠããããšãä¿¡ããŠããã®ã¯ãªãã§ããïŒ
JUG.ruã°ã«ãŒãïŒãã£ãªããããŠã©ãŒã ã¢ããããå§ããŸãããã ASP.NET Coreã¯å€§ããå€åããŠããŸãã ãã©ãããã©ãŒã ã§äœæ¥ããéçºè ãšããŠé²è¡äžã®å€æŽã«ã€ããŠã©ãæããŸããïŒ
Filip WïŒãã¡ãããå é§è ã¯å€ãã®åé¡ãçµéšããŸããã延æãããŒãžã§ã³ç®¡çã®åé¡ãååã®å€æŽãããŒã«ãããã®åé¡ãäžè²«æ§ã®ãªããããžã§ã¯ã管çã·ã¹ãã ãªã©ã.NET Standardã³ã³ã»ããèªäœã®å€æŽãŸã§ã§ãã ãã£ãšè¯ãã§ããŸããïŒ ç¢ºãã«ããã§ãããæ¯ãè¿ã£ãŠã¿ããšããã¹ãŠãåžžã«ã·ã³ãã«ã§æ確ã«èŠããŸãã
äžè¬çã«èšãã°ãå€åã¯ééããªãè¯ããªã£ãŠããŸãã ã»ãã®æ°å¹ŽåãASP.NETã¯WindowsãšIISã§ã®ã¿æ©èœããŠããŸããã ããã«ãSystem.Web.dllã«åºã¥ããŠãããåHTTPãªã¯ãšã¹ãã«äžåçãªãªãŒããŒããããè¿œå ãããŸããïŒå¹³å29KbïŒã ä»æ¥ã ãã³ãããŒã¯ã«ãããšãASP.NET Coreã¯Linuxäžã§æé«ã®ããã©ãŒãã³ã¹ãçºæ®ãã3ã€ãã5ã€ã®Webãã¬ãŒã ã¯ãŒã¯ã®1ã€ã§ãã ãã®èŠ³ç¹ããããã©ãããã©ãŒã ã¯ééããªãä¿¡ããããªãã»ã©ã®å€åãéããŠããŸãã
JUG.ruã°ã«ãŒãïŒ Linuxã§.NETã¢ããªã±ãŒã·ã§ã³ãäœæããŸãããïŒ ãã®ãããªæ±ºå®ã®å®å®æ§ã¯ã©ãã§ããïŒ ãã©ãããã©ãŒã ã¯å®çšŒåã®æºåãã§ããŠããŸããïŒ
Filip WïŒã¯ããç§ã®æ°ãããããžã§ã¯ãã®å€ãã¯ãDebianããŒã¹ã®ã·ã¹ãã ã®Dockerã§ã¹ãã³ããŠããŸãã æå·åãªã©ã®ãã©ãããã©ãŒã åºæã®ã³ãŒããããã¡ãã¡ã§çºçããå¥åŠãªãããããã¯ã§ããã€ãã®åé¡ã«ééããŸããããäžè¬çã«ã¯ãã¹ãŠãç§ã«åã£ãŠããŸãã ãããŠãã¡ããã Docker Swarmã䜿çšããŠãã©ãããã©ãŒã å šäœã管çããããšã®å©ç¹ã¯å°è±¡çã§ãã
å®éãã©ã®OSã«ãããžã§ã¯ãããããã€ãããã«é¢ä¿ãªããã¯ãã¹ãã©ãããã©ãŒã ã®.NETã³ãŒããèªå® ã§éçºããããšããŠããŸãã ãã®çµæãã»ãšãã©ã®ãããžã§ã¯ãã«ã¯WindowsãmacOSãLinuxçšã®ãã«ããšãŒãžã§ã³ãããããŸãã ãããã£ãŠãMacã§äœããéçºããå°ãªããšãDockerã§ãå°ãªããšãAzure Web Appã§ããã¹ãŠãæ£åžžã«æ©èœããããšãä¿èšŒããŠãããã€ã§ããŸãã
JUG.ruã°ã«ãŒãïŒ CïŒã¯ã©ãã§ããïŒ ããŒãžã§ã³7.0ã§ã¯ãã¿ãã«ããã¿ãŒã³ãããã³ã°ããã®ä»ã®å€ãã®æ©èœã䜿çšã§ããŸãã ãããã®é©æ°ã¯ãéçºè ãšããŠããªãã«ãšã£ãŠæçšã§ããïŒ
Filip WïŒäžè¬ã«ãCïŒ6.0ã®å Žåãšåæ§ã«ãå€æŽã¯ãã€ããŒã§ãããããæ¥ã ã®äœæ¥ã§å€ãã®éçºè ãæ°ããããŒãžã§ã³ãžã®ç§»è¡ã«æ°ä»ããªãå¯èœæ§ããããŸãã å人çã«ã¯ãçŸåšã®åœ¢åŒã§ã¯ã¿ãã«ãéåžžã«äžååã«å®è£ ãããŠãããããã¿ãã«ã¯ééããªã䟿å©ã§ãã éçºè ãããŒã¿ããŒã¹ãã1ã€ãŸãã¯2ã€ã®ãã£ãŒã«ããéã·ãªã¢ã«åãŸãã¯èªã¿åãããã«æ°ããã¯ã©ã¹ãäœæããããšãäœåãªãããããšãã«ããããçŸåšçŽé¢ããŠãããã«ããŒã¯ã©ã¹ã®æ°ãå€§å¹ ã«æžããã®ã«åœ¹ç«ã€ããšãé¡ã£ãŠããŸãã
ãã¿ãŒã³ãããã³ã°ã®æ§æãè¡šçŸã«åºã¥ããŠããªãããšã«å°ãåæºããŠããŸãã 代ããã«ãisãšswitchã«éç¹ã眮ãããŸãããç§ã¯é©æ°ãäžæ©ãã€æ¥ãåçæ§ãç解ããŠããŸãã ããã«ãè¡šçŸåè±ããªèŠçŽ ã¯ç°¡æœãªã³ãŒãã®èšè¿°ã«åœ¹ç«ã¡ãCïŒã¯éåžžã«ãåé·ãã§ããå¯èœæ§ãããããããã®ãããªå€æŽãè¯ãçµæããããããŸãã
CïŒvs Powershell-1ïŒ0
JUG.ruã°ã«ãŒãïŒéå»ã«ã CïŒã§ã® DotNext ã¹ã¯ãªããã«ã€ããŠèª¬æããŸããã ã¬ããŒãã¯ãç«ã¡æ¢ãŸã£ãããšæããŸããïŒ .NETéçºè ã®éã§ãCïŒã®ãã®ãããªãŠãŒã¹ã±ãŒã¹ã¯éèŠããããŸããïŒ
Filip WïŒãããä¿¡ããããªãã»ã©ã®èŠèŽè ã®åå¿ããããŸããïŒ ã¹ã¯ãªããã¯ã以åã¯.NETãšã³ã·ã¹ãã ã§ã¯ã¢ã¯ã»ã¹ã§ããªãã£ãå€ãã®èå³æ·±ããŠãŒã¶ãŒã±ãŒã¹ãžã®ã¢ã¯ã»ã¹ãå¯èœã«ãããããRoslynã®æãã¯ãŒã«ãªåŽé¢ã®1ã€ã§ããããã«æããŸãã ãã¡ãããPowershellã䜿çšããåã«ãCïŒã§ã¹ã¯ãªãããèšè¿°ããæ©èœã¯ã.NETéçºè ã«ã©ãã ãè¿ãããèæ ®ããŠããŸã£ããç°ãªããŸãã åçšãããžã§ã¯ãã§ã®CïŒã®ã¹ã¯ãªããã®äœ¿çšãæ¥æ¿ã«å¢å ããŠããããšãããããŸããã¹ã¯ãªããã¯ãAzure Functionsãã²ãŒã ã®æ¡åŒµæ©èœãªã©ãå®è£ ããŠããŸãã ããã«èšèªãµãŒãã¹ãšCïŒã®ã€ã³ããªã»ã³ã¹/ãããã°ãµããŒããè¿œå ããŸããããã¯ãVS Codeãªã©ã®è»œéãšãã£ã¿ãŒã§ååŸã§ããéåžžã«åªããéçºããã»ã¹ãå®çŸããŸãã éã¹ã¯ãªããèšèªã§ããCïŒãéåžžã«åŒ·åãªç°å¢ã«ãªã£ãããšã¯é¢çœãã®ã§ãããçç£æ§ã®èŠ³ç¹ããã¹ã¯ãªããèšèªã®ãããããè°è«ããããšã¯ã»ãšãã©ãããŸããã
ã¢ã¹ã¯ã¯ã§çŽ2æéããã£ã¹ã«ãã·ã§ã³ãšãªã¢ã§ãã»ãã¥ãªãã£ãã¡ã¢ãªç®¡çãã¢ããªã±ãŒã·ã§ã³æ¡åŒµæ©èœïŒã¹ã¯ãªããããŒã¹ã®ãã©ã°ã€ã³ã·ã¹ãã ïŒãããã«å®è¡å¯èœããã»ã¹ã管çããããã®ãªã¢ãŒãREPLãŸã§ãCïŒã¹ã¯ãªããã®è€éããšäœ¿çšæ¹æ³ã«ã€ããŠè°è«ããŸããã ãããã£ãïŒ
Roslynã®ã«ã¹ã¿ã ã³ãŒãæ€æ»ã®éçº
JUG.ruã°ã«ãŒãïŒã¹ã¯ãªããã«å ããŠãéçã³ãŒãåæã«ãé¢äžããŠããŸãã VSãšResharperãåžå Žã«åºåã£ãŠããå Žåã誰ãç¬èªã®ã¢ãã©ã€ã¶ãŒãéçºããå¿ èŠãããã§ããããïŒ
Filip WïŒã³ãŒãã¬ãã¥ãŒã«é¢äžããããŒã å ã®ã³ãŒãã®å質ãäžè¬çã«æ åœããããŒã ãªãŒããŒã«ã¯ãéåžžãç¬èªã®ã¢ãã©ã€ã¶ãŒãå¿ èŠã§ãã ããã§ç解ããããšãéèŠã§ããéçºããã»ã¹ã§ã¯ããããžã§ã¯ãã®ã³ã³ããã¹ãã«ã®ã¿é¢é£ããç¬èªã®åé¡ãšç²ãã®ããã€ãã«çŽé¢ããŠããŸãã ResharperãšVSã¯ã©ã¡ããå¹ åºããŠãŒã¶ãŒåãã«èšèšããããŠãããŒãµã«ããŒã«ã§ãããäŒæ¥ã®ã¬ã€ãã©ã€ã³ã«äžèŽããç¹å®ã®ãã¿ãŒã³ãŸãã¯ã³ãŒãã®äœ¿çšã確ä¿ããå¿ èŠãããå Žåã¯ã©ãã§ããããã ããšãã°ãã¯ã©ã¹/å€æ°ã®åœåèŠåãèšå®ããå éšAPIãæå³ãããšããã«ã®ã¿äœ¿çšãããŠããããšãã³ãŒããæšæºã«åŸã£ãŠææžåãããŠããããšãHTTPãšã³ããã€ã³ãã確ç«ãããæšæºã«åŸã£ãŠèšèšãããŠããããšã確èªããŸãã æã å¥åŠãªããšãèµ·ãããŸã-ç§ã¯ã©ãããããããã¿ããšïŒé åãã£ã¬ã¯ãã£ãã®äœ¿çšãã³ã³ãã€ã©ã¬ãã«ã§çŠæ¢ãããŠãããããžã§ã¯ãã§åããŠããŸããã
ãã ããç¬èªã®ã¢ãã©ã€ã¶ãŒã®äœæãå¿ããå Žåã§ãããå éšã§ãã©ã®ããã«æ©èœããããç解ããããšãéèŠã§ãã ããã°ã©ãã³ã°ã®ä»ã®åéãšåæ§ã«ãããšãããªãã®æãç¬èªã®ã¢ãã©ã€ã¶ãŒãäœæã§ããªããŠãããããã®æ ¹åºã«ããååãšã³ã³ãã€ã©ãŒAPIã®åäœæ¹æ³ãç解ããŠãã³ãŒãã¢ãã©ã€ã¶ãŒã®åäœãä¿èšŒããããšã¯éåžžã«åœ¹ç«ã¡ãŸãã
JUG.ruã°ã«ãŒãïŒã³ã³ãã€ã©ã«ã€ããŠèšãã°ãRoslyn Compiler APIã䜿çšãããšä»¥åã®ããŒãžã§ã³ãããäœæ¥ã楜ã«ãªããŸãããïŒ
Filip WïŒããã¯ããªãã¯ã®è³ªåã§ããïŒ å®éãå€ãã³ã³ãã€ã©ã§ã¯ãã³ãŒãããã£ãŒãããã ãã§ãåºåã§DLL / EXEãã¡ã€ã«ãååŸããããšããã§ããŸããã§ããã ç§ã«ãšã£ãŠãRoslynã§æãéèŠãªããšã¯ããã€ãã©ã€ã³ã®åã¹ããããç¬èªã®æ¹æ³ã§äœ¿çšã§ããå€éšAPIãåãããå®éã®ãµãŒãã¹ãšããŠã®ã³ã³ãã€ã©ã§ããããšã§ãã ãŸããRoslynã®åã«å ¬åŒã®CïŒASTã©ã€ãã©ãªããªãã£ãããšãé©ãã¹ãããšã§ãïŒãµãŒãããŒãã£ã®ãªãã·ã§ã³ã®ã¿ãèŠã€ãããŸããïŒã
JUG.ruã°ã«ãŒãïŒãšããã§ãäžäœäºææ§ã¯ã©ãã§ããïŒ Roslynã®æ¬¡ã®ãªãªãŒã¹ã§ç§ã®ã¬ã³ãŒããŒãå£ããå¯èœæ§ã¯ãããŸããïŒ
Filip WïŒããã§ãããRoslynããŒã ãåŸæ¹äºææ§ã«å€å€§ãªæ³šæãæã£ãŠããããšã¯ç¢ºãã§ãã ã³ã³ãã€ã©ã³ãŒãã詳ãã調ã¹ããšããã®é©ãã¹ãäŸãèŠã€ããããšãã§ããŸãã ããšãã°ãã³ã³ãã€ã©ã®ãœãŒã¹ã³ãŒããèŠããšããDELIBERATE SPEC VIOLATIONããšããè¡ããããŸãã ããã¯äœã§ãã å€ãCSCã³ã³ãã€ã©ã®ã³ãŒãã¯ããã°ãããã€ãã®èª€è§£ã«ãããããã€ãã®å Žæã§CïŒä»æ§ã«éåããŠããããšãããããŸããã åæã«ãRoslynããŒã ã¯äœããå£ããããªå€æŽãå ããã€ããã¯ãªãã£ãã®ã§ãéçºè ãæå³çã«CïŒä»æ§ã«éåãããããæå³çãªä»æ§éåãšããŠææžåããããã€ãã®å Žæã§ãæ°ããã³ã³ãã€ã©ãåŸãŸãã:) Link ã
ã³ã³ãã€ã©ãšãã®APIã®åŸæ¹äºææ§ã¯ç°ãªããããã¯ã§ããããšãç解ããŠããŸãããç§ã®äŸã¯ããŒã ã®ã¡ã³ã¿ãªãã£ããã瀺ããŠããŸãã ç§èªèº«ãäœããRoslynã«å¯èŒžããŠãããã³ãŒãã¬ãã¥ãŒã®æãéå±ãªåŽé¢ã®1ã€ã¯ãåããããªãã¯ãAPIã®åæã«æããã泚æã®éã§ãããšèšããŸãã ãããã£ãŠãæ£çŽã«èšããšãäžäœäºææ§ã«ã€ããŠã¯å¿é ããŸããã
JUG.ruã°ã«ãŒãïŒã©ã®ããã«ããŠRoslyn APIã®ç 究ãå§ããã®ã§ããïŒ æåã«è§£æ±ºãããå ·äœçãªåé¡ã¯äœã§ããïŒ
Filip WïŒæåã¯ãã¹ã¯ãªããã䜿ã£ãŠRoslynã³ãã¥ããã£ã«åå ããŸããã10幎åŸã«CïŒã§ã¹ã¯ãªããã䜿ã£ãŠãã®ã¹ããŒãªãŒå šäœã圢äœãã®ã«åœ¹ç«ã£ãScripticsãããžã§ã¯ãããããŸããã 次ã«ãOmniSharpãããžã§ã¯ãã«å ¥ããŸããããã®ãããžã§ã¯ãã§ã¯ãemacsãvimãAtomãªã©ã®ãšãã£ã¿ãŒã«ã€ã³ããªã»ã³ã¹ãšCïŒèšèªãµãŒãã¹ãè¿œå ãããŸãã ãã¡ããã.NETã³ãã¥ããã£ã«ãããOmniSharpã®æ倧ãã€æãèªèå¯èœãªãæ¶è²»è ãã¯Visual Studio Codeã§ãã ããã§ãã³ãŒãåæããªãã¡ã¯ã¿ãªã³ã°ãããã³IDEã¬ãã«ã®ä»ã®å€ãã®èšèªæ©èœã®ããã®ããŒã«ã®éçºãéå§ããŸããã
JUG.ruã°ã«ãŒãïŒè¿ãå°æ¥ãéçã³ãŒãåæã§äœãèµ·ããã®ã§ããããïŒ åŸ ã£ãŠãã䟡å€ããã次ã®1-3-5幎ã¯äœã§ããïŒ
Filip WïŒå€ãã®ãã©ã€ãã蚺æã衚瀺ããããšæããŸãã ç§ã®å人ã®1人ã§ããJosh Vartyã¯ãVisual Studioã«ïŒé©ãïŒïŒ AliveãšåŒã°ããæãã¯ãŒã«ãªã¢ããªã³ãæ§ç¯ããŸãããã©ã³ã¿ã€ã ã§çºçããŸãã ããã¯ãã¹ãŠéçãŸãã¯ã»ãã³ãã£ãã¯ã³ãŒãåæãè¶ ããŠããããã¹ãŠãRoslynã«åºã¥ããŠæ§ç¯ãããŠããŸãã
ãããã£ãŠãäžè¬çã«ã¯ãã·ã³ããªãã¯èšç®ãéããŠãã«ãžã®ãªã³ã¯ãèŠã€ãããªã©ãããé«åºŠãªã¢ããªã¹ãã«åºäŒãã§ãããã çŸæç¹ã§ã¯ãã³ãã¥ããã£ã¯ãŸã RoslynãæäŸããæ©äŒãæŽçããŠããŸãã ããã«ãRoslynã¢ãã©ã€ã¶ãŒãOmniSharpãResharperãªã©ã®ãµãŒãããŒãã£ããŒã«ã«ç·å¯ã«çµ±åãããããšãæåŸ ããŠããŸãã Visual Studio Codeã«ã¯åæ§ã®ã¢ãã©ã€ã¶ãŒãæ¢ã«ååšããŸããããããã®äœæ¥ã¯çæ³ãšã¯ã»ã©é ããã®ã§ãã
JUG.ruã°ã«ãŒãïŒããããšãããã£ãªãããDotNextã§ãäŒãããŸãããïŒ
ãã£ãªããã¯ããžã§ã³ã¹ããŒãããµãŒã·ã£ãŽãŒã«ãã·ã¥ãã€ã³ããã³ä»ã®MVPãšåãã¹ããŒãžã§ããµã³ã¯ãããã«ãã«ã¯ã§éå¬ããã次åã®äŒè°ã§ã ããNETã³ã³ãã€ã©ãã©ãããã©ãŒã ïŒRoslynïŒã䜿çšããã³ãŒãåæããŒã«ã®æ§ç¯ãã«é¢ãããã¬ãŒã³ããŒã·ã§ã³ãè¡ããŸã ã ã¹ããŒã«ãŒãšã¬ããŒãã«é¢ãã詳现ã¯ã DotNext 2017 Piter Webãµã€ãã§å ¥æã§ããŸãã
PSæ©æç»é²ã¯2ææ«ãŸã§æå¹ã§ããããããŸã§ã®ãšããç»é²ã§ããæ°å人ç¯çŽã§ããŸãã