æ°æ©èœã®æ£ããéžæ
æè¿ãªãªãŒã¹ãããNDepend 6 ã ãããŸã§ãã¡ãžã£ãŒãªãªãŒã¹ã®ãªãªãŒã¹ã¯Visual Studioã®ãªãªãŒã¹åŸãã°ããã®éäºå®ãããŠããŸããããçŸåšVisual Studio 2015ã¯ãã¬ãªãªãŒã¹ç¶æ ã§ãã NDepend 6ã¯ã18ãæéã®ããŒãã¯ãŒã¯ã®çµæã§ãã 11幎ã®éçºã®åŸã NDependã¯äžå®ã®æç床ã«éããŸãããããŸã å€ãã®æ©äŒãšæ¹åãå¯èœã§ãã ãŸããããŒãžã§ã³6ã®æãããªã±ãŒããªåé¡ã¯ããŠãŒã¶ãŒã®ããã«æ°æ©èœãšæ¹åãéžæããããšã§ããã ããŒãžã§ã³5ã2013幎ã«ãªãªãŒã¹ãããŠä»¥æ¥ã Visual Studio User Voicesããã³NDepend User Voicesã§ã¢ã€ãã¢ãå¯ããããŠããŸã ã å®éã®ãšããã第6ããŒãžã§ã³ã®æ°æ©èœã¯ãå®æãããæã人æ°ã®ããæ©èœãããåæ ããŠããŸãã
ãã«ãããã»ã¹ãžã®çµ±å
ãŠãŒã¶ãŒã¯ãNDependãèªåãã«ãããã»ã¹ã«ããã«çµ±åããããšãèŠæ±ããŠããŸãã NDepend.Console.exeãå®è¡ããŠãæ å ±ãåéãããã«ãããã»ã¹ã倱æãããéèŠãªã«ãŒã«ã«éåããŠãããã©ãããå ±åããŸããïŒãã®æ å ±ã¯ãNDepend.Console.exeããã®ãªã¿ãŒã³ã³ãŒãããååŸã§ããŸãïŒã ãŠãŒã¶ãŒã¯ããã«ãããŒã«ã§ããå€ãã®æ å ±ãçŽæ¥è¡šç€ºããããã«æ±ããããŸããã å€ãã®ãã«ããã¯ãããžããããŸãããæãèŠæ±ãããã®ã¯TFS ã TeamCity ãããã³SonarQubeã§ãã ãã®çµæãéçºè ã¯ãããã®ãã¯ãããžãŒã®æé«ã®å°é家ãšååããŠãçµã¿èŸŒã¿ã®çµ±åãè¡ããŸãããããã«ã¯ãã»ãšãã©ã®äœ¿çšã·ããªãªãå«ãŸããŠãããå°æ¥ã®ããŒãžã§ã³ã§ãµããŒããããæ°ããæ©èœãè¿œå ãããŸãã
Visual Studioçµ±åã®æ¹å
ãªããªã ãŠãŒã¶ãŒã¯ãã«ãããã»ã¹ãšã®çµ±åãããã«æãã§ãããããéå»1幎éãäž»ã«Visual Studioã®ããŒã«ã«åã泚ãã§ããŸããã NDependã¯ãVS Addinãã¯ãããžãŒã䜿çšããŠVisual Studioã«çµ±åãããŸããããã®æ±ºå®ã¯ã2009幎ã«éçºããŒã ã«ãã£ãŠè¡ãããŸããã åœæãVSIXïŒã¹ã¿ãžãªçšã®æ¡åŒµæ©èœãéçºããããã®å¥ã®æ段ïŒã¯æªå å·¥ã§ãããVS2008ãšVS2005ããµããŒãããå¿ èŠããã£ããããVS Addinãæ£ããéžæã§ããã æéãçµã€ã«ã€ããŠãVSã¢ãã€ã³ã®éèŠæ§ã¯äœäžããMicrosoftããã®æ¹åãåãããã¯ã©ãã·ã¥ã«è³ããŸããããæãéèŠãªããšã¯ãå®è¡æã«NDependãŠã£ã³ããŠã®å ŽæãèŠããããšãã§ããªãã£ãããšã§ãã ããã¯ãŠãŒã¶ãŒã«å€§ããªäžäŸ¿ãããããã ãŠãŒã¶ãŒãã€ã¹ããŠã£ã³ããŠã®å Žæãèšæ¶ããããèŠæ±ããçµæãšãªããŸããã
ããŒãžã§ã³6以éãNDependã¯VS 2015ã2013ã2012ã2010ãžã®çµ±åã®ããã®VSIXãã¯ãããžãŒã«åºã¥ããŠããŸããããã«ãMicrosoftã¯2015ã¹ã¿ãžãªã§ã®VS Addinã®äœ¿çšãçŠæ¢ããŠããŸãã ãããã«ãããVSIXã®ãããã§ããŠã£ã³ããŠã®èšæ¶ãæ°æ©èœïŒããšãã°ãNDependãããžã§ã¯ãã.suoïŒ.slnã ãã§ãªãïŒã«ã¢ã¿ãããããããããŒãå®å šã«ãµããŒãïŒã«ãããVisual Studioãšã®ã¹ã ãŒãºã§ä¿¡é Œæ§ã®é«ãçµ±åãå®çŸããããšãå¯èœã«ãªããŸããã
ãŸããNDependã«å«ãŸããŠããç¡æã®ã¹ã¿ãžãªæ¡åŒµæ©èœã«ãã£ãŠæäŸããã3ã€ã®æ©èœããããåžžã«æå ã«ãããŸããã
ã«ãŒã«ã®æ©èœåŒ·å
.NETã³ãŒãã®ã«ãŒã«ã¯ãNDependã®äž»ãªæ©èœã§ãã ãŠãŒã¶ãŒã¯ãäž»ã«èª€æ€ç¥ãæžããããã«ãæ¢åã®ã«ãŒã«ãæ¹åããæ¹æ³ã«ã€ããŠå€ãã®ãã£ãŒãããã¯ãæ®ããŸããã ãã®ãããããã©ã«ãã«ãŒã«ã®çŽ3åã®1ãæšå¥šã«åŸã£ãŠåäœæãããŸããã
ã³ãŒãã®ã«ãŒã«ããããã€ãã®ã³ã¡ã³ããå«ãCïŒ mutable LINQã¯ãšãªã§ããããšã¯çŽ æŽãããããšã§ãã ããããå€ãã®ãŠãŒã¶ãŒã«ãšã£ãŠãã«ãŒã«ãèŠåãçæããçç±ãç¹å®ã®ã«ãŒã«ãžã®æºæ ãã³ãŒããæ¹åããçç±ãã«ãŒã«éåãä¿®æ£ããæ¹æ³ã«ã€ããŠååãªæ å ±ããããŸããã§ããã ãã®ããã
<Description>
ããã³
<HowToFix>
ã¿ã°ã䜿çšããŠãNDependã«ãŒã«ã®ãœãŒã¹ã³ãŒãã«2ã€ã®ãã©ãŒããããããããã¹ããè¿œå ããæ©èœãè¿œå ãããŸããã ããã¯ãããã©ã«ãã§åã«ãŒã«ã説æãããŠãŒã¶ãŒã«è©³çŽ°ã«èª¬æããè¯ãæ©äŒã§ãã ã€ã³ã¿ãŒãã§ã€ã¹ãšã¬ããŒãã®äž¡æ¹ã§ããŠãŒã¶ãŒã¯ç£èŠãããã®ãéžæã§ããŸã-Description / HowToFixãŸãã¯CïŒLINQã®ã«ãŒã«ã®ãœãŒã¹ã³ãŒãã
ãŠãŒã¶ãŒã®ãã1ã€ã®ããŒãºã¯ãè€æ°ã®NDependãããžã§ã¯ãéã§ã«ãŒã«ã䜿çšå¯èœã«ããããšã§ããã éåžžãäŒæ¥ã«ã¯NDependã䜿çšããŠåæãããè€æ°ã®ãããžã§ã¯ããããããŠãŒã¶ãŒã¯ããããäžåºŠã«ãã¹ãŠç®¡çããããšèããŠããŸãã ãããŠã.NETã³ãŒãã®NDependã«ãŒã«ãæžãããšã¯ä»ã®ã©ããããç°¡åã§ããããšãèæ ®ããŠããŠãŒã¶ãŒã¯ç°ãªããããžã§ã¯ãã«1ã€ã®ãããã¡ã€ã«ã䜿çšããæ©èœãæãã§ããŸããã ãããã£ãŠãNDepend 6ã§ã¯ãNDependãããžã§ã¯ãã§äžç·ã«äœ¿çšã§ããã«ãŒã«ã®ãªã¹ããå®çŸ©ã§ããŸãã
ã³ãŒãã¡ããªãã¯ã®èŠèŠå
NDependã«ã¯treemapã䜿çšããã³ãŒãã¡ããªãã¯ã®èŠèŠåããã§ã«ãããè²ä»ããè¿œå ããããšã決å®ãããŸããã ã¢ã€ãã¢ã¯ã2ã€ã®ã³ãŒãã¡ããªãã¯ã衚瀺ã§ãããšããããšã§ãã 1ã€ã¯é·æ¹åœ¢ã®é åã§è¡šããããã1ã€ã¯é·æ¹åœ¢ã®è²ã§è¡šãããŸãã ããšãã°ã次ã®å³ã¯ãç¹å®ã®ãããã䟿å©ã§æ£ç¢ºãªæ¹æ³ã§ã®ãã¹ãã«ããNDepend 6ã³ãŒãã®ã«ãã¬ããžã瀺ããŠããŸãã
- é·æ¹åœ¢-ã¡ãœããã
- é·æ¹åœ¢ã®é åã¯ã³ãŒãã®è¡æ°ã«æ¯äŸãã
- é·æ¹åœ¢ã®è²ã¯ããã¹ãã§ã®ã³ãŒãã«ãã¬ããžã®å²åã§ãã
äžèŠãããšãã«ã©ãŒããªãŒãããã¯ãä»ã®æ¹æ³ã§ã¯ç解ããã®ãé£ããæ å ±ãç解ããã®ã«åœ¹ç«ã€ããšãããã«ããããŸãã NDependã³ãŒãã¯ãã¹ãã§82ïŒ ã«ããŒãããŠãããšããäºå®ã«ããããããããã¹ãã§ååã«ã«ããŒãããŠããªãã³ãŒãã瀺ãèµ€ãé·æ¹åœ¢ã®ã¯ã©ã¹ã¿ãŒãèŠãããšãã§ããŸãã ãã®ãããªç²ŸåºŠã§ããã衚瀺ã§ããããŒã«ã¯ãããããããªãã§ãããã
NDependéçºè ã¯ã補åã®æ©èœãçµ±äžããããšããŠããŸãã ãããã£ãŠã NDependã®å€ãã®ã¡ããªãã¯ã®ãã¡2ã€ã ãã§ãªããCïŒã®LINQã¯ãšãªã§èšè¿°ãããã³ãŒãã¡ããªãã¯ãèŠèŠåã§ããã«ãŒã«ãŸãã¯ã¯ãšãªã®æçµã³ãŒãã匷調衚瀺ããããšãã§ããŸãã ãã®çµæãè€éãªã¡ãœããããªã¯ãšã¹ãããå Žåãããããã«ã©ãŒããªãŒãããã«è¡šç€ºã§ããŸãã
ããã¯æ³šç®ã«å€ãã ãã¹ãã§ã®ã³ãŒãã«ãã¬ããžã¯æãéèŠãªå質ã€ã³ãžã±ãŒã¿ã®1ã€ã§ãããã¯ãšãªã³ãŒãã®çµæã«ã¯ããã®ããã®å¥ã®ã€ã³ã¿ãŒãã§ã€ã¹ãè¿œå ãããŠããŸãã
ä»ã«ããã¹ãããš
補åã¯çµ¶ããå€åããç°å¢ã«ãããŸãã ããã¯ã以åã«æ©èœããŠããããã€ãã®æ©èœã確èªããå¿ èŠãããããšãæå³ããŸãã ãããã®å¿ èŠãªæ¹åã®äžéšã¯ãNDependããŒãžã§ã³6ã§è¡ãããŸããã
CïŒããã³VB.NETã³ã³ãã€ã©ãŒã«ãã£ãŠçæããããã«ããŒã³ãŒãïŒããŒãžã§ã³ããšã«ãCïŒããã³VB.NETã«ã¯ãŸããŸãå€ãã®ç ç³ãç»å ŽããŸããã CïŒ2.0ã®å¿åã¡ãœãããšã€ãã¬ãŒã¿ã§å§ãŸããŸããã 次ã«ãã©ã ããšå¿ååãCïŒ3.0ã«ç»å ŽããCïŒ5.0ã§async / awaitãç»å ŽããŸããã ãããã®æ§æäœã¯ãã³ã³ãã€ã©ã«è¿œå ã®ã¡ãœãããšåãçæãããã ãããŠãªããªã ãããã®æ§æèŠçŽ ã¯éåžžã«é »ç¹ã«äœ¿çšãããçæããããããã®èŠçŽ ã¯ILã³ãŒãã«èç©ãããŸãã ãŸãã NDependã¯ILã³ãŒãã«å€§ããäŸåããŠã³ãŒãæ å ±ãååŸããŸã ã ãããã£ãŠãNDependã³ãŒãã¢ãã«ã«ã¯ãçæããããã¹ãŠã®ã¡ãœãããšåãå«ãŸããããã¯äž»ã«èªåã®ã³ãŒãã ãã«é¢å¿ããããŠãŒã¶ãŒãæ©ãŸããŸãã çŸåšãNDependã¯ãããä¿®æ£ããŠããŸãã ãããã®çæãããèŠçŽ ããã¹ãŠåãé€ãããšã¯ããªãã·ã§ã³ã§ã¯ãããŸããã å®éã«ã¯ãããã€ãã®ãŠãŒã¶ãŒã³ãŒããå«ãŸããŠããŸãã ãã®ããããããã®çæãããèŠçŽ ããã³ã³ãã€ã©ã«çæãããã³ãŒããå«ãã«ã¹ã¿ã ã¯ã©ã¹ããã³ã¡ãœãããšçµã¿åãããããã«ãããã€ãã®ãã¥ãŒãªã¹ãã£ãã¯ãéçºãããŠããŸãã ãããã£ãŠã劥åããå¿ èŠã¯ãããŸããã§ãããã³ãŒãã¡ããªãã¯ïŒè¡æ°ãã«ãã¬ããžã®å²åã埪ç°çè€é床ãªã©ïŒãäŸåé¢ä¿ãéããªã©ããã¹ãŠã®ã³ãŒãã¢ãã«ããŒã¿ãä¿åãããŸããã
éåæãµããŒãã®æ¹åïŒéåæã³ã³ã¹ãã©ã¯ãã¯åºæã§ãããNDependã§ããã€ãã®åé¡ãåŒãèµ·ãããŸããã ã«ã¹ã¿ã ã³ãŒãã¯ãçæãããã¡ãœããã«ã³ã³ãã€ã©ãŒã«ãã£ãŠå®éã«åã蟌ãŸãã IAsyncStateMachine.MoveNextïŒïŒä»®æ³ã¡ãœããããªãŒããŒã©ã€ãããŸãã ãããã£ãŠããã®çæãããMoveNextïŒïŒã¡ãœãããåŒã³åºãILã³ãŒãã¯ãå®è£ ã§ã¯ãªãæœè±¡ã€ã³ã¿ãŒãã§ãŒã¹ã¡ãœããã«é¢é£ä»ããããŸãã éåæã¡ãœããåŒã³åºãã¯ILã³ãŒãã§å€±ããããããNDependã³ãŒãã¢ãã«ã§å€±ãããŸãã åã®æ®µèœã®ããã«æžãããçºèŠçææ³ã®ãããã§ãNDependã¯æ£ããåŒã³åºãéåæã¡ãœãããåæããã³èå¥ããããšãã§ããããã«ãªããŸããã
é«è§£å床ã®ãµããŒãïŒé«è§£å床ã¢ãã¿ãŒïŒ4Kãªã©ïŒãå©çšå¯èœã«ãªãããã®çµæãããå€ãã®éçºè ãé©åãªWindowsèšå®ã§äœæ¥ããŠããŸãã ããã¯ããã¯ã»ã«å¯åºŠãé«ããããã°ã©ãã£ãã¯èŠçŽ ïŒããã¹ããç»åïŒã衚瀺ããããã«ããå€ãã®ãã¯ã»ã«ã䜿çšãããããšãæå³ããŸãã NDependã®ã€ã³ã¿ãŒãã§ã€ã¹ã¯äž»ã«Windowsãã©ãŒã ãšGDI +ã«åºã¥ããŠãããWindowsãé«è§£å床ã«èšå®ãããŠããå Žåããããã®ãã¯ãããžãŒã¯ããã©ã«ãã§ã¯ããŸãããŸãã¹ã±ãŒãªã³ã°ããŸããã ãŠãŒã¶ãŒããã®åé¡ãå ±åãå§ãããšããNDependã€ã³ã¿ãŒãã§ãŒã¹å šäœãããçŽããŠã100ïŒ ãã250ïŒ ã®è§£å床èšå®ã§åäœããããã«ããŸããã ããã¯ãããã€ãã®ã°ã©ãã£ãã¯èŠçŽ ãæ¹åããWindows FormãšGDI +ãé«è§£å床ã§äœ¿çšããããã€ãã®æ¹æ³ãåŠã¶æ©äŒã§ããã ãã®çµæã¯ãä»åŸã®NDependããã°æçš¿ã§èª¬æãããŸãã ã€ã³ã¿ãŒãããäžã§ã¯ããããå€ãã®éçºè ã«ãšã£ãŠåé¡ã§ããããšã¯æããã§ãã
Visual Studioã®ãããã¯ïŒçµ±èšã«ãããšãã»ãšãã©ã®ãŠãŒã¶ãŒã¯Visual Studioã®NDependã䜿çšããŠããŸãã ãããã£ãŠãNDependã€ã³ã¿ãŒãã§ã€ã¹ã®ããŒãã¯ãLightãDarkãBlueãªã©ã®æšæºã®Visual StudioããŒããæšæºã®VS2010ããŒããšããŸã調åããŸããã 幞ããªããšã«ãNDependã§ã¯ãã¡ãã¥ãŒé ç®ãããã«ããã€ã³ãã£ã³ã°ãªã©ã¯DevExpress WinFormã©ã€ãã©ãªã«åºã¥ããŠãããææ°ããŒãžã§ã³ã«ã¯ãããã®ããŒããå«ãŸããŠããŸãïŒãããã ãã§ã¯ãããŸããïŒã ãããã£ãŠãææ°ããŒãžã§ã³ãžã®ç°¡åãªæŽæ°ã圹ç«ã¡ãŸããã
åæã®æ¹åïŒåæã«é¢é£ããŠããã€ãã®æ¹åãè¡ãããã¯ãã§ãã NDependã®ãããžã§ã¯ãã¯ãããã€ãã®ãã£ã¬ã¯ããªãšã¢ã»ã³ããªåïŒãã¡ã€ã«æ¡åŒµåãªãïŒãåç §ããŸãã åæäžãåæããã¢ã»ã³ããªã®å Žæã¯æ¬¡ã®2ã€ã®æ¹æ³ã§èŠã€ãããŸããã ã¢ã»ã³ããªã®ã³ããŒãå€æ°èŠã€ãã£ãå Žåããããããã¹ãŠåãã§ããå ŽåãNDependã¯ãã®ãã¡ã®1ã€ãååŸããç°ãªãå ŽåãNDependã¯ãšã©ãŒãå ±åããŸããã ãã®ç¶æ³ã¯ããœãªã¥ãŒã·ã§ã³ã®å±éã®é倧ãªåé¡ãšèŠãªãããŸãã ããããæéãçµã€ã«ã€ããŠãWindows PhoneãããŒã¿ãã«ã¯ã©ã¹ã©ã€ãã©ãªãªã©ã®æ°ãããã¯ãããžãç»å Žããé©åãªæäœäžã«ãã®ãããªç¶æ³ãçºçããŸããã ãããã£ãŠããã®ãããªç¶æ³ãæ€åºããããšãNDepend 6ã¯ãã¥ãŒãªã¹ãã£ãã¯åæã䜿çšããŠãããŒãžã§ã³ãäŸåé¢ä¿ãããã³ãã¡ã€ã«ãµã€ãºã«åºã¥ããŠæ£ããã¢ã»ã³ããªãèŠã€ããŸãã