はじめに
FxCopは、Microsoftが提供している、マネージド.NETアセンブリを分析するための無料のコード分析ツール(オープンソース)です。.NETアセンブリは、アセンブリと、含まれているすべてのデータ型を表すメタデータのエントリで構成されています。FxCopは、アセンブリメタデータを読み取り、それが推奨のコーディング標準やプラクティスを記述しているビルトインルールおよびカスタムルールに準拠しているかどうかをチェックします。
FxCopは、アセンブリを分析した後に、ローカライゼーション、パフォーマンス、およびセキュリティの分野におけるルール違反をレポートします。コードのチェックは、埋め込みxmlファイルに格納されている一連のルールとメッセージに対して行われ、ルール違反が発生する場合は、実行時に該当のメッセージが表示されます。ビルトインルールを、自分で作成するカスタムルールで拡張できます。本稿では、FxCopの使用方法と、このようなカスタムルールを作成し、適用する方法について説明します。
本稿で説明する方法を実装するには、FxCop Version 1.32、.NET Framework Version 1.1以上のインストール、およびWindows XP/2000以上のOSが必要です。
FxCopとは?
FxCopは「Framework Police」の略であり、マネージドコードアセンブリがMicrosoft .NET Frameworkのデザインガイドラインおよびカスタムガイドラインに準拠しているかどうかをチェックする、ルールベースのエンジンです。アセンブリに対するチェックは、アセンブリに含まれるMSILを解析し、ルールに一致しないコードを調べてレポートすることによって行われます。FxCopによるテストは、.NET対応言語のソースコードでなく、マネージドアセンブリに対して行われます。つまり、Microsoft.NETマネージド環境対応の言語を使って作成された任意のアセンブリに対して、FxCopを適用することができます。
FxCopを使用する理由
FxCopは、特に複数の.NET言語を使用する会社に、次のような直接的な利益をもたらします。
- Microsoft .NET Framework上で動作する.NET準拠言語によって作成されたマネージドアセンブリと連携します。
- 事前定義された多くのルールセットを備えています。
- カスタムルールを作成できます。
- 適切な形式のXMLテストレポートを生成します。
- オープンソースツールなので、必要に応じて拡張したり変更したりできます。
一方、現時点のFxCopには、次のような制限があります。
- ソースではなくアセンブリメタデータとのみ連携するため、ソースコード分析ツールほど具体的ではありません。
- フラットなルール構造に従うため、大量のポリシーセットの実装は困難です。
- カスタムレポートタイプはサポートされません。
FxCopの入手方法
FxCopはMicrosoftが開発したツールであり、無料でダウンロードできます。
問題や質問がある場合は、FxCopチームまたはMSDNフォーラムにメッセージを送ることができます。
重要なFxCop用語
ターゲットとは、FxCopを使って標準への準拠性を調べる対象となるマネージドアセンブリのことです。
FxCopは、分析時に実行するチェックをルールとして表現します。FxCopルールはpublic
クラスとして実装されます。どのルールも、FxCop SDKのProblemCollection
クラスのオブジェクトへの参照を返すCheck
メソッドを実装します。この値によって、違反が発生しているかどうかが決まります。ルールは、ターゲットを分析するマネージドコードで構成され、検出した内容を示すメッセージを返します。このメッセージは、標準違反を表示するだけでなく、ソースコード内で違反を修正する方法に関するガイダンスも提供します。
FxCop内のルールは、既定ルールとカスタムルールに分けられます。既定ルールは、カテゴリに基づいてグループ化されています。FxCopのいくつかの重要なビルトインルール、その目的、および例を以下に示します。
- デザインルール
- グローバリゼーションルール
- 命名ルール
- パフォーマンスルール
- セキュリティルール
- 使用ルール
FxCopインターフェイス
FxCopには、GUIベースのユーザーインターフェイスとコマンドラインインターフェイスの2種類があります。FxCop GUIは、3つのウィンドウから成ります(図1を参照)。
構成ペインには、現在のFxCopプロジェクトのターゲットとルールがツリービュー形式で表示されます。この構成ペインを使って、ターゲットアセンブリと、ターゲットアセンブリの分析に使用するルールを選択します(複数のアセンブリを同時に分析できます)。
メッセージペインには、検査後のターゲットアセンブリに関する分析レポートが表示されます。これらのメッセージは、その重要度と危険度に基づいて次のレベルで表示されます。
- 重大エラー
- エラー
- 警告
- 重大警告
- 情報
図2は、典型的なFxCop分析レポートです。
プロパティタブには、名前空間、型と型メンバー、ルールグループ、ルール、メッセージなどを含む、ターゲットアセンブリに関する情報が表示されます。ルールやルールグループを選択したり、一部のルールを破棄したりして、FxCopがアセンブリをテストする基準となるルールセットを構築できます。
FxCopでカスタムルールを作成する
FxCopでは、カスタムルールを作成して、独自の標準を適用することができます。このためには、FxCop SDKを使ってカスタムルールを開発し、それをビルトインの既定ルールに追加します。カスタムクラスは、FxCop SDK内のBaseIntrospectionRule
クラスを継承するクラスです。XMLドキュメント内でカスタムクラスを記述し、これをリソースとしてアプリケーション内に埋め込みます。