NDependã¯HabrÃ©ã§æ¢ã«
è¿°ã¹ãããŠããŸã-ããã¯.NETã®éçã³ãŒãã¢ãã©ã€ã¶ãŒã§ãã æè¿ãæ°ããçŽ æŽããããŠãŒãã£ãªãã£ã®ç¬¬6ããŒãžã§ã³ããªãªãŒã¹ãããŸããããã®æ°ããæ©èœã«ã€ããŠã¯ä»¥äžã§èª¬æããŸãã ããã¯ç¿»èš³
ã§ã ãå
ã®èšäºã¯
ãã¡ãã§ãã
æ°æ©èœã®æ£ããéžæ
æè¿
ãªãªãŒã¹ããã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ã¯ãã¥ãŒãªã¹ãã£ãã¯åæã䜿çšããŠãããŒãžã§ã³ãäŸåé¢ä¿ãããã³ãã¡ã€ã«ãµã€ãºã«åºã¥ããŠæ£ããã¢ã»ã³ããªãèŠã€ããŸãã