【C#】【フリーツール】StyleCop(コーディング規約に従っているか分析するツール)

StyleCop

 * C#向けのソースコード分析ツール

FxCopとの差異

利点

 * 指摘事項に対するコードを探すのが容易
   (FxCopの場合、IL を解析するので、指摘事項がコードのどこに該当するのか、分かり難い)

欠点

 * C# しか対応していない
 →別の言い方をすれば、C#だけであれば上記の利点から、StyleCopの方が優れていると言える

設定方法

http://nakaji.hatenablog.com/entry/20100507/1273247285
が参考になる。

 [1] 以下のダウンロード先から、StyleCopを落としてくる
http://archive.msdn.microsoft.com/sourceanalysis
 [2] 落としてきたインストーラから、StyleCopをインストールする
 [3] Visual Studio を起動し、適当なクラスを作成する
 [4] 「~.csproj」をテキストエディタで開き、以下を追記する

   </ItemGroup>
  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
  <!-- ★↓ここを追加(注意:「v4.3」の部分はStyleCopのバージョンに併せて下さい) -->
  <Import Project="$(ProgramFiles)\MSBuild\Microsoft\StyleCop\v4.3\Microsoft.StyleCop.targets" />
  <!-- ★↑ここを追加 -->
  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 

 [5] ビルドすると、以下のようなチェックをしてくれる

~~~~
コンパイルの完了 -- エラー 0、警告 1
  ClassLibrary1 -> C:\Users\admin\Documents\Visual Studio 2010\Projects\ClassLibrary1\ClassLibrary1\bin\Debug\ClassLibrary1.dll
Properties\AssemblyInfo.cs(1,1): warning : SA1633: The file has no header, the header Xml is invalid, or the header is not located at the top of the file.
Class1.cs(7,1): warning : SA1600: The class must have a documentation header.
Class1.cs(9,1): warning : SA1600: The field must have a documentation header.
Class1.cs(11,1): warning : SA1600: The method must have a documentation header.
Class1.cs(1,1): warning : SA1633: The file has no header, the header Xml is invalid, or the header is not located at the top of the file.
Class1.cs(9,1): warning : SA1309: Field names must not start with an underscore.
Class1.cs(1,1): warning : SA1200: All using directives must be placed inside of the namespace.
Class1.cs(2,1): warning : SA1200: All using directives must be placed inside of the namespace.
Class1.cs(3,1): warning : SA1200: All using directives must be placed inside of the namespace.
========== すべてリビルド: 1 正常終了、0 失敗、0 スキップ ==========

日本語化について

 [1] 以下のサイトで、該当モジュール「stylecop-f1a1f7cd9f80-ja-1.2.zip」をダウンロードする
http://oss-ja-jpn.sourceforge.jp/
 [2] ダウンロードしたモジュールを解凍する
 [3] Windowsのメニューから[スタート]-[すべてのプログラム]-[アクセサリ]-[コマンドプロント]を
     右クリックして、「管理者として実行」を選択
 [4] コマンドプロントで解凍したファイルのProjectフォルダ下の「Environment.cmd」を実行
  => マイクロソフトのパーシャルサインが設定される

  例:> cd C:\StyleCop\stylecop_f1a1f7cd9f80-ja-1.2\Project
    > Environment.cmd

 [5] Buildフォルダ下のファイルを、インストールしたStyleCopの既存ファイル(DLLなど)
    を上書き
 ~~~~
 ■コピー元
  stylecop_f1a1f7cd9f80-ja-1.2\Build
 ■コピー先
  C:\Program Files (x86)\MSBuild\Microsoft\StyleCop\v4.3
 ~~~~

 →再度、ビルドを実行すると、日本語になっているはず。

参考文献

http://nakaji.hatenablog.com/entry/20100627/1277615741

ルールの適用・不適用

 * デフォルトだとかなり厳しいので、オフりたいルールもあると思うのでその手順を以下に記す。

手順

 [1] C:\Program Files (x86)\MSBuild\Microsoft\StyleCop\v4.3で
    「Settings.StyleCop」をダブルクリック
 [2] 「ルール」タブの左側の「含むルール」内のチェックボックスを外せば、オフれる。
  ※番号さえ分かっていれば、検索機能もあるので、オフるの楽。
 [3] 「ルール」タブの右側の「詳細」内のチェックボックスを外せば、
      デザイナへのチェックがオフれる。

参考

 * 「SA1630」「SA1631」は、OFFった方がいいらしい
  (「SA1630」は実体験でOFFった方がいいと思った)
http://www42.atwiki.jp/jfactory/pages/57.html
 * 以下にものってる
http://honeplus.blog50.fc2.com/blog-category-7.html

カスタムルール

手順

 [1] .NET Library プロジェクトを作成する
 [2] 以下のDLLを参照する
   * C:\Program Files (x86)\MSBuild\Microsoft\StyleCop\v4.3\Microsoft.StyleCop
   * C:\Program Files (x86)\MSBuild\Microsoft\StyleCop\v4.3\Microsoft.StyleCop.CSharp
 [3] クラスとXMLを作成する

 ※ 作成したXMLファイルは、VSのソリューションエクスプローラ上で右クリックし、
  プロパティの「ビルドアクション」を「埋め込まれたリソース」を選択しておくこと
 ※ 以下のサイトを参照のこと
http://d.hatena.ne.jp/white-azalea/20090603/1244040613
 [4] ビルドする
 [5] 作成したDLLファイルをインストーラのフォルダ
  「C:\Program Files (x86)\MSBuild\Microsoft\StyleCop\v4.3」
   に格納しておく
 [6] VSを再起動して、ビルドすると適用される
   (これ忘れると偉いことになる。以下のサイトでもハマっている人がいた)
http://social.msdn.microsoft.com/Forums/ja-JP/csharpgeneralja/thread/f14042c0-c44e-487d-8528-34aa2eb11089/


関連記事

FxCop(コーディング規約に従っているか分析するツール)

http://blogs.yahoo.co.jp/dk521123/21228111.html