http://stylecop.codeplex.com/
はじめに
http://msdn.microsoft.com/ja-jp/library/vstudio/ff926074.aspx
C#にはMSで使用しているコーディング規約があり、VisualStudioのコード整形のデフォルト動作なんかも、その規約に従って整形するようになっています。
特に問題なければ、こちらに合わせて記述した方がよいのですが、なかなか記述漏れなどを目視でチェックするのは難しいです。
そこで静的解析ツールなるものを使用すると違反をチェックできるのですが、C#の場合はMicrosoftからリリースされています。
それがStyleCopです。
インストール
※StyleCopは Visual Studio 2008、2010、2012 に対応しているツールです。これらの環境がインストールされていることを確認してください。
http://stylecop.codeplex.com/
以上のURLからmsiファイルをダウンロードし、インストールを実行します。
使い方
では、さっそく使ってみましょう。
StyleCopをインストール後、Visual Studioを起動して、C#のプロジェクトを選択してコンテキストメニューを開くとStyleCopの項目が追加されています。
作成されたばかりのWindows Formアプリケーションでさっそく実行してみると…。
おおぉ。いきなり36個も警告が出ています。
英語ベースですのでわかりにくいですが、書いてある内容は簡単なので以下のページを参考にしながら考えていきます。
http://www.stylecop.com/docs/
(なぜかアクセスできないときがある)
http://stylecop.soyuz5.com/StyleCop%20Rules.html
(4.5なのでちょっと古いけど、こちらの方がアクセスできる)
SA1101
フォームデザイナが吐き出すDisposeメソッドで、まず次のように怒られています。
SA1101 : CSharp.Readability : The call to components must begin with the 'this.' prefix to indicate that the item is a member of the class.
メンバーアクセスにはthisプレフィックスをつけなさい。って言われてますね。
最初からつけとけよーーていう突っ込みはさておき、つけてみましょう。
もう一度 Run StyleCopを実行すると、見事消えたのが確認できます。
SA1126
さて次です。
SA1126 : CSharp.Readability : The call to InitializeComponent must begin with the 'this.', 'base.', object.' or 'Form1.' or 'Form.' prefix to indicate the intended method call.
InitializeComponentメソッドのコールにプレフィックスがないから、何かつけなさないって怒られます。
InitializeComponentはForm1のプライベートメソッドの為、thisを付けます。
SA1200
じゃんじゃん行きましょう。
SA1200 : CSharp.Ordering : All using directives must be placed inside of the namespace.
・・・・・・・・・?
using句をnamespaceの中に入れなさい。
・・・・すみません。自分この警告を見るまで、namespaceの中にusingを書ける事すら知りませんでした。^^;
この規約はうち的には無しってことで、警告から除外しましょう。
コンテキストメニューから「StyleCop settings」を選択します。
今回除外したいのはOrderingの SA1200なので、それを探してチェックをOFFにします。
SA1400
まだ、21個も残っています。頑張ります。
SA1400 : CSharp.Maintainability : The class must have an access modifier.
アクセス修飾子をつけなさいって怒られます。
Programクラスなんてアセンブリの外に出る必要がないので、ここではinetrnalを付けておきます。
もちろんクラスによって必要な修飾子は違うので注意です。
Form1.Designerクラス内のpartialクラスでも怒られます。
この場合もう片割れをみるんじゃねーの?と思わんでもないですが、まぁ省略しちゃダメっていうのもわかるのでここは、Form1.cs側でpublicと指定されているのを確認して、同じようにpublic指定します。
SA1507
SA1507 : CSharp.Layout : The code must not contain multiple blank lines in a row.
空行が複数続いているぜ。
…厳しい…が、確かに無駄な空行はコードの見た目を崩す…ということで、ここも直します。
SA1513
SA1513 : CSharp.Layout : Statements or elements wrapped in curly brackets must be followed by a blank line.
これちょっと悩みました。
http://stylecop.soyuz5.com/SA1513.html
を見てもこんな書き方してないし。
よく読みなおすと、}の次にステートメントをを書く場合、改行を入れなさい…ってことで、このように直します。
SA1600
SA1600 : CSharp.Documentation : The class must have a documentation header.
クラスヘッダ書いてないよってことですね。ちゃんとサマリーつけましょう。
SA1601
SA1601 : CSharp.Documentation : The partial class element must have a documentation header containing either a summary tag or a content tag.
partialクラスの場合は、summaryかcontentタグを持ったヘッダが必要ってことで、こちらもsummaryを追加します。
SA1630
SA1630 : CSharp.Documentation : The documentation text within the summary tag does not contain any whitespace between words, indicating that it most likely does not follow a proper grammatical structure
required for documentation text.
required for documentation text.
要約すると、コメントにスペース含まれてないから文章おかしくないか?ということですが、英語前提なので、これはルールから外します。
同様に、SA1642,SA1643,SA1650も英語のお話なので、ルールから外します。
SA1633
ついに最後になりました。
SA1633 : CSharp.Documentation : The file has no header, the header Xml is invalid, or the header is not located at the top of the file.
ファイルヘッダが無い事ことで、ファイルヘッダを付けますが、ここで注意。クラスのコメントなどは、ほぼXMLコメントで記載している方が大半だと思いますが、ファイルのヘッダは割と会社毎に独自フォーマットがあるように思われます。
Microsoft的なファイルヘッダは次の形になるようです。
http://stylecop.soyuz5.com/SA1633.html
もしファイルヘッダの記述方法を独自にする場合は、SA1634~SA1649までは無効化します。
変えることが可能な場合は、この際なので、Microsoft形式に合わせておいた方がファイル名の一致などもStyleCopがチェックしてくれるため、便利です。
さいごに
やっときえたーーーーーーー!!!!!!!
この作業、コーディングの最後にまとめて…なんてとてもできません。
こまめに実行して、修正していくことをお勧めします。
では、よいC#ライフを!
0 コメント:
コメントを投稿