SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

japan.internet.com翻訳記事

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

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

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

コードの問題点を見つけるのに、これまでのように経験とコードのレビューにだけ頼る必要はありません。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ドキュメント内でカスタムクラスを記述し、これをリソースとしてアプリケーション内に埋め込みます。

会員登録無料すると、続きをお読みいただけます

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

次のページ
FxCop SDKを使ってカスタムルールを実装する

この記事は参考になりましたか?

  • このエントリーをはてなブックマークに追加
japan.internet.com翻訳記事連載記事一覧

もっと読む

この記事の著者

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

japan.internet.com は、1999年9月にオープンした、日本初のネットビジネス専門ニュースサイト。月間2億以上のページビューを誇る米国 Jupitermedia Corporation (Nasdaq: JUPM) のニュースサイト internet.comEarthWeb.com からの最新記事を日本語に翻訳して掲載するとともに、日本独自のネットビジネス関連記事やレポートを配信。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

Joydip Kanjilal(Joydip Kanjilal)

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

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/582 2006/09/21 00:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング