2013年6月22日土曜日

個人的に無効にしたいFxCopとStyleCopのルール

多人数で開発する場合に特に有効と考えられるFxCopとStyleCopですが、個人的にはどうしても無効にしたいルールがいくつかあります。そこら辺を簡単に。

FxCop


FxCopでは、受け入れがたいものはあまり多くありません。でもプロジェクトの内容によりますが、以下は無効にすることが多いです。
Globalizationの2つについては、いずれも文字列の操作時なんかに余計なパラメータをセットすることを要求されます。これらはかなり細かい国際化をする場合じゃなければ必要になりませんし、必要無ければコードを汚しているようにしか感じられません。どうしても必要になったときにONにすればよいでしょ。

Designの2つについて、まずアセンブリの厳密名については、.net 1.x の頃ならともかく、GACに登録するようなものでなければ、厳密名は必要ないと個人的には認識しています。

また、CA1020は「アセンブリ内に同じ名前空間内にクラスやenum等の『型』を5つ以上含めるべき。」という内容ですが、使う側からすると、Usingをたくさん指定しなくちゃいけなくなって厄介なのはわかりますが、名前空間のUsing指定で拡張メソッドのON/OFFをしたりするので、名前空間の分割と統合は、型の数で制限すべきではないんじゃないかなぁ。ってことでOFFに。

StyleCop


StyleCopのほうは好みが出そう。ただ、あんまり無効にしちゃうと統一性が失われて意味がなくなっちゃうので、最低限に抑えておきたい。

デフォルト状態から、以下の項目をOFFにしています。
DocumentationRulesは、コードコメントの書き方のルール。さらにその中でも、ここで挙げたものは英語でコメントするときの問題で、日本語では関係ない(というか、無理)のでOFFにします。

OrderingRulesは記述の順番に関係するもの。ただ、SA1200は「名前空間の中でUsingを使え。」と言っています。つまり、こう書けと。
namespace Xxx.Yyy.Zzz
{
  using System;
  using System.Collections.Generic;
  using System.Linq;

  public class TheClass
  {
  }
}

はい?はじめて聞きました。こんなの。VisualStudioが吐き出すコードもこうなってないので、これは却下。

LayoutRulesのSA1503は、「中かっこは省略可能でも省略するな。」と言っています。つまり、こう書いちゃだめってこと。
if (condition())
    return false;

うーん。よく言われます。でもねぇ、コードが無意味に縦に伸びるの嫌なんですよ。インデントはされるわけですし、これは勘弁していただきたい。駄目かな?

SA1402は「一つのファイルには一つのクラスのみ含めよ。」と言っています。これもよく言われます。が、たとえばpublicなクラスでも、あるクラスにのみ依存するクラスってありますよね?大概は非常にちっさなクラス。この手のクラスにひとつひとつファイルを作っていると、ファイル数が多くなりすぎて却って参照性が悪くなると思うんです。…やっぱ駄目っすか?


それぞれ無効化しておきたいのはこれっくらいですねぇ。そのほかはMicrosoftさんのルールに従えるなー、というのが個人的な感想です。まぁ、これまでずっと、勉強するときのサンプルコードとかで散々Microsoftの書き方を見て、なんとなくでもわかりやすいと思って真似をしていた部分はあるんだと思います。多分、そのせい。

あー、もちろん、これ以外にその時々で「そんなの従えない!」ってことはあります。その場合は「SuppressMessage」属性をセットします。ちゃんと理由(Justification)を付けて。プロジェクトならできればコードレビューもしましょう。

0 件のコメント:

コメントを投稿