SHOEISHA iD

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

CodeZine(コードジン) DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

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

Visual Studio 2005 Team Edition for Software Developersを使ってみよう

コード分析による品質向上のキモ - VSTDにおけるFxCopツール活用 -

Visual Studio 2005 Team Edition for Software Developersを使ってみよう (2)


規則を選択しよう

 VSTSのコード分析には11種類の規則に分類された200種類以上の規約が提供されています。規則違反はビルドエラー、もしくは警告として検出するするように設定できます。先程の操作でもお分かりかと思いますが、すべての規約を使用することは、現実的ではありません。表1に11種類の規則を紹介します。

表2
規則名 説明 規約例
グローバリゼーション規則 多国間で使用されるライブラリやアプリケーションの作成に必要な規則 CA1302:メソッドで、特殊なシステムフォルダのパスの一部を表すリテラル文字列を使用している場合に場合にエラーもしくは警告とする
セキュリティ規則 セキュアなライブラリやアプリケーションの作成に必要な規則 CA2121:プライベートではない静的コンストラクタがある場合にエラーもしくは警告とする
デザイン規則 .NET Frameworkデザインガイドラインに沿ったコード作成に必要な規約 CA1062:publicなメソッドで引数がnull(Visual BasicではNothing)であるかどうかを確認せずに引数に操作を行った場合にエラーもしくは警告とする
パフォーマンス規則 パフォーマンスの良いライブラリやアプリケーションの作成に必要な規則 CA1822:インスタンスデータにアクセスしないメソッドがstatic(Visual Basicではshared)になっていない場合にエラーもしくは警告とする
モビリティ規則 CPUを有効に使うために必要な規則 CA1601:タイマが1秒ごとに複数回発生するように設定されている場合にエラーもしくは警告とする
移植性の規則 異なるプラットフォーム間での対応に必要な規則 CA1901:プラットフォームに依存するポインタサイズの変数が必要な場所に、固定サイズの整数を渡したりした場合にエラーもしくは警告とする
使い方の規則 .NET Frameworkを適切に使用するために必要な規則 CA2214:オーバーライドできるメソッドをコンストラクタで呼び出した場合にエラーもしくは警告とする
信頼性の規則 適切なメモリやスレッドの使用のために必要な規則 CA2000:System.IDisposable型のローカルオブジェクトに対するすべての参照がスコープ外になる前に、オブジェクトが破棄されていない場合にエラーもしくは警告とする
相互運用性の規則 COMのクライアントとの使用のために必要な規則 CA1406:VB6クライアントに対してint64の引数を使用している場合にエラーもしくは警告とする
保全性の規則 ライブラリやアプリケーションのメンテナンスのために必要な規則 継承階層内が5つ以上のクラスがある場合にエラーもしくは警告とする
名前指定の規則 .NET Frameworkデザインガイドラインに沿った命名規約 CA1705:メンバの名前に3字以上の英大文字の頭字語が含まれた場合にエラーもしくは警告とする

 どの規約を適応すればいいのかはプロジェクトによって異なるでしょうが、ここまで規約が多いと何か指針が欲しくなります。

 これさえ守っていれば大丈夫! といった指針は示せませんが、例えばグローバリゼーション規則を意識しないといけない局面はあまりないのではないでしょうか。また名前指定の規則もプロジェクトで使用するには少し不便な規則が含まれていそうです。それとは逆にセキュリティ規則やパフォーマンス規則は積極的に使用した方がよさそうです。これらは違反時にビルドエラーとなるように設定しても良いかもしれません。

 それぞれの規則に含まれる規約を1つ1つ解説することは今回はできませんが、規約の詳細はVSTS上から[F1]キーで表示できます。コード分析を実際に使用する場合は規約の内容をよく確認したうえで、開発の初期から使用する事を強くお勧めします。

 VSTSのコード分析には200以上の規約が用意されていますが、これで満足できない場合は独自の規約を作成することもできます。VSTSのマネージコード分析の実体は無償配布されているFxCopとほとんど同様で、FxCopのカスタム規約の作成と同じ要領で独自の規約を作成することができます。VSTSに含まれるFxCopはデフォルトインストールの場合「C:\Program Files\Microsoft Visual Studio 8\Team Tools\Static Analysis Tools\FxCop」にインストールされています。ここに含まれている「FxCopSdk.dll」と「Microsoft.Cci.dll」を使用してカスタム規約を作成することができますので興味がある方はお試しください。ただ、ここで解説したカスタム規約の作成方法の概要や具体的な作成方法についてはMSDNライブラリなどでは公開されていません。またGotDotNetでのFxCopの開発はphase-outしていたりと、今後コード分析のカスタマイズがどうなっていくのかは分かりません。ルールのカスタマイズは十分注意して行ってください。

FxCop
 FxCopはGotDotNetで提供されていたコード分析ツールで、最新版は1.35(ただし英語)です。VSTSのマネージコード分析には統合されたFxCopが使用されています。

ルールをソリューション全体に適用しよう

 ここで述べるルールとは、適用する規約の集合を指しています。ルールの設定はプロジェクトのプロパティ画面から行いますから、プロジェクトごとに最適な規約を選択することができます。でも見方を変えるとプロジェクトごとにルールの設定作業を行うのは面倒だなと思われるかもしれません。そこでTeam Foundation Server(以下、TFS)を用いて、すべてのプロジェクトに同じ規約を適用する方法を解説します。

 手順ですが、次のようにまずTFSのソースコードのチェックインポリシーにコード分析を追加し、次にソリューションに設定を反映させます。

  1. 「チームエクスプローラ」からソースコードが含まれるチームプロジェクトを右クリックし、[チームプロジェクトの選択]-[ソース管理]を選択。
  2. ソース管理の設定画面で「チェックインポリシー」タブの中の[追加]-[コード分析]を選択。
  3. コード分析ポリシーエディタで[マネージコードの分析を強制]を選択し、使用する規約を選択。
  4. ソリューションエクスプローラからソリューションを右クリックし、[コード分析ポリシーの設定をソリューションに移行]を選択。
図4 「コード分析ポリシーの設定をソリューションに移行」画面
図4 「コード分析ポリシーの設定をソリューションに移行」画面

 これで全プロジェクトに同じルールが適用されました。ただし、この方法には一つだけ落とし穴があります。それはチームプロジェクトのチェックインポリシーで定義されているコード分析ルールがプロジェクトに存在しない場合には追加する設定を行いますが、チームプロジェクトのコード分析ポリシーで定義されていないコード分析ルールがプロジェクトに存在していた場合には、それはそのままにするという点です。

 この機能は、本来の用途としては個々のプロジェクトがチームプロジェクトに定義されているコード分析のチェックインポリシーを満すために使うものです。ですからプロジェクトに定義されているコード分析ルールに足りないものを足す、という動きをします。

図5 プロジェクトファイルのルールとチェックインポリシー
図5 プロジェクトファイルのルールとチェックインポリシー

 なお、この方法を使うにはあらかじめTFSのソースコード管理に対象となるソリューションを登録しておく必要があります。

 ではTFSを持ってない場合はどうすればいいの? という人も心配いりません。コード分析ルールはプロジェクトファイルに次のように記載されます。

<CodeAnalysisRules>
  -Microsoft.Globalization#CA1301;-Microsoft.Globalization
#CA1302;-Microsoft.Globalization#CA1303 (中略)
</CodeAnalysisRules>

 「Microsoft.Globalization#CA1301」は「重複するアクセラレータを使用しません」という規約です。「-」が付いていることから、この規約は使用されないという意味であることが直感的に分かるかと思います。使用される規約については記述がなく、使用しない規約のみが列挙されています。1つのプロジェクトでUIからコード分析ルールを設定した後、<CodeAnalysisRules>部分をコピー&ペーストすればUIから設定を行わなくても同じルールを適用することができます。ただ少し手間がかかるので、できればTFSを使用したいところです。

次のページ
SuppressMessageを使って除外の設定をしよう

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

Visual Studio 2005 Team Edition for Software Developersを使ってみよう連載記事一覧

もっと読む

この記事の著者

山田 祥寛(ヤマダ ヨシヒロ)

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるLaravel実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

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

WINGSプロジェクト りばてぃ/FUJIKO/ナオキ(リバティ, フジコ, ナオキ)

WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。 2026年時点での登録メンバは約50名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書記事多数。 RSS X: @WingsPro_info(公式)、@WingsPro_info/wings(メンバーリスト) Facebook

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

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

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/2136 2008/09/04 18:49

イベント

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

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

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

メールバックナンバー