Visual Studioには多くのアドオンが販売されています。たとえばReSharperは日本でもユーザーが多い、有名なものの一つですね。
同様にVisual Studioの有名なアドオンの一つにNDependがあります。今回NDepend開発元から機会をいただいたので、Pro版の紹介をします。
NDependって何?
そもそもNDependってどういうアドオンでしょう?機能紹介のページはこちらにあります(英語)。NDepend | Achieve higher .NET code quality with ndepend
機能は豊富で、特徴的なものものも多いです。NDependが提供する機能にはVisual Studioの上位エディション(PremiumとかUltimate)にしかない機能(ソースコードの可視化など)も含まれていますので、Visual Studio Professional Editionを使っている方で予算が合うならばNDependを購入するという方法もあります。
Compare
インストール
インストールは簡単です。ダウンロードしたzipファイルをどこかのフォルダに展開します(展開前にzipファイルの「ブロックの解除」を忘れないように!)。このフォルダがそのままアドオンの実行フォルダになるので、インストールが終わったからといって、削除しないようにしましょう*1。適当な一時フォルダに展開すると悲しい目を見ます。展開したフォルダにあるNDepend.Install.VisualStudioAddin.exeを実行すると、インストーラーが起動します。
インストールされているVisual Studioが表示されているので、追加したいVisual Studioを選択します。これだけです。簡単ですね!あ、購入した場合はライセンスファイルが送られてきていると思います。そのファイルをこの展開したフォルダに入れておいてください。
NDependの検索
NDependの検索は面白いです。NDepend Searchというウィンドウが表示され、ここにタブを追加することにより、いろんなタイプの検索ができます。検索がLINQです(!)。検索に正規表現をサポートしてます!なんてのはいっぱいありますが、検索にLINQが使えて、VSの情報にアクセスできると、抽出の幅が広がりますね。大きなプロジェクトになると面白そうです。
たとえばNDependのウィンドウに以下のようなクエリを入力すればPublicなメソッドが30文字超えるようなメソッドを検出することができます。
from m in Application.Methods where m.NbLinesOfCode > 30 && m.IsPublicselect m
この検索はメソッドの名前だけではありません。たとえば、カバレッジが特定の%に達していないメソッドの検索なんてこともできます(もちろん事前にコードカバレッジを採取しておく必要があります)。
このNDepend SearchウィンドウからSearchをMethodにして、By Coverageを選択します。「Edit Query」ボタンを押せば、ウィンドウが開いて、LINQで検索項目の修正ができます。すばらしい!
実際にどんなクエリ式が書けるのか、サンプルも紹介されているので、こちらからどうぞ。
NDepend | Achieve higher .NET code quality with ndepend
NDepend Power Tools
ちょっと面白いコマンドラインツールがNDepend Power Toolsとして搭載されています。Visual Studioに追加されるNDEPENDメニューの"Start Power tools"を選んでください。いろいろ面白そうな機能が並んでいます。nの「.NET Framework v3.5 and v4.X installed, Core Public API Changes」を選んでみましょう。
.NET Framework 3.5と4/4.5でどんなAPIが変更になったのか調べてくれます。ここからさらに選択することにより、以下の選択肢が表示されます。
- 18のパブリックな型が消えた
- 365の新しいパブリックな型が追加された
- 1159の新しいパブリックなメソッドが追加された
- 114の新しいパブリックなフィールドが追加された
これで選べば実際にどんなものが追加されたか表示されます。
やはり消えたものは興味深いので、aを選択してみた結果はこんな感じです。公式ドキュメントにも載っていることですが、やはり実際にインストールされたもので見えると面白いですね。
.NET Framework 4.5 のアプリケーションの互換性
.NET Framework 4 への移行に関する問題
もちろんほかにもよさそうな機能はいっぱいあるので、おいおい紹介します。
*1:はい、私やりました…