CodeZine(コードジン)

特集ページ一覧

FxCopとカスタムルールを使って.NETコードの品質を監視する

アセンブリに含まれるMSILを解析しルールに一致しないコードを調べる

  • ブックマーク
  • LINEで送る
  • このエントリーをはてなブックマークに追加
2006/09/21 00:00

コードの問題点を見つけるのに、これまでのように経験とコードのレビューにだけ頼る必要はありません。FxCopがあなたに代わって多くの問題点を見つけてくれます。さらに、自社コード専用のカスタムルールを作成し、適用することもできます。

目次

はじめに

 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のいくつかの重要なビルトインルール、その目的、および例を以下に示します。

  • デザインルール
  • .NETのデータ型とアセンブリのデザインに関するルール。
    例: 抽象型にはコンストラクタを指定できない。
  • グローバリゼーションルール
  • グローバリゼーションとローカライゼーションに関するルール。
    例: ロケール固有の文字列をハードコード化してはならない。
  • 命名ルール
  • 命名規約に関するルール。
    例: データ型の名前をパラメータで使用してはならない。
  • パフォーマンスルール
  • コードのパフォーマンスの向上または障害の可能性をチェックするルール。
    例: 文字列長を使って空の文字列をテストする。
  • セキュリティルール
  • セキュアなコードをチェックするルール。
    例: ポインタが認識可能であってはならない。
  • 使用ルール
  • 標準的な.NET Frameworkの使用に関するガイダンスを提供するルール。
    例: ファイナライザは保護する必要がある。

FxCopインターフェイス

 FxCopには、GUIベースのユーザーインターフェイスとコマンドラインインターフェイスの2種類があります。FxCop GUIは、3つのウィンドウから成ります(図1を参照)。

図1 FxCopユーザーインターフェイス: 構成ペイン、メッセージペイン、およびプロパティペインを示すFxCop UIの画面ショット
図1 FxCopユーザーインターフェイス: 構成ペイン、メッセージペイン、およびプロパティペインを示すFxCop UIの画面ショット

 構成ペインには、現在のFxCopプロジェクトのターゲットとルールがツリービュー形式で表示されます。この構成ペインを使って、ターゲットアセンブリと、ターゲットアセンブリの分析に使用するルールを選択します(複数のアセンブリを同時に分析できます)。

 メッセージペインには、検査後のターゲットアセンブリに関する分析レポートが表示されます。これらのメッセージは、その重要度と危険度に基づいて次のレベルで表示されます。

  • 重大エラー
  • エラー
  • 警告
  • 重大警告
  • 情報

 図2は、典型的なFxCop分析レポートです。

 プロパティタブには、名前空間、型と型メンバー、ルールグループ、ルール、メッセージなどを含む、ターゲットアセンブリに関する情報が表示されます。ルールやルールグループを選択したり、一部のルールを破棄したりして、FxCopがアセンブリをテストする基準となるルールセットを構築できます。

図2 FxCop分析レポート: さまざまなメッセージタイプが含まれているFxCop分析レポートのサンプル
図2 FxCop分析レポート: さまざまなメッセージタイプが含まれているFxCop分析レポートのサンプル

FxCopでカスタムルールを作成する

 FxCopでは、カスタムルールを作成して、独自の標準を適用することができます。このためには、FxCop SDKを使ってカスタムルールを開発し、それをビルトインの既定ルールに追加します。カスタムクラスは、FxCop SDK内のBaseIntrospectionRuleクラスを継承するクラスです。XMLドキュメント内でカスタムクラスを記述し、これをリソースとしてアプリケーション内に埋め込みます。


  • ブックマーク
  • LINEで送る
  • このエントリーをはてなブックマークに追加

あなたにオススメ

著者プロフィール

  • Joydip Kanjilal(Joydip Kanjilal)

    業界で10年以上のキャリアを持ち、C、C++、Java、C#、VB、VC++、ASP.Net、XML、デザインパターン、UMLなどに携わる。現在は、インドのハイデラバードにある一流の多国籍企業のシニアプロジェクトリーダーを務めるかたわら、.NETおよび関連テクノロジに関する記事をAspAllianc...

  • japan.internet.com(ジャパンインターネットコム)

    japan.internet.com は、1999年9月にオープンした、日本初のネットビジネス専門ニュースサイト。月間2億以上のページビューを誇る米国 Jupitermedia Corporation (Nasdaq: JUPM) のニュースサイト internet.com や EarthWeb.c...

バックナンバー

連載:japan.internet.com翻訳記事

もっと読む

All contents copyright © 2005-2021 Shoeisha Co., Ltd. All rights reserved. ver.1.5