CodeZine(コードジン)

特集ページ一覧

Visual Studioのコード分析機能を利用してコードの品質を上げよう

さらに使いやすく便利になった「Visual Studio」を始めよう! 第4回

  • LINEで送る
  • このエントリーをはてなブックマークに追加
2015/02/05 14:00
目次

コード分析結果への対処

 コード分析を行い、コードの問題点が明らかになったところで、今度はその修正を行っていきましょう。

指摘事項の修正

 コード分析結果では簡単なヒントは表示されますが、その指摘の詳細は分かりません。詳細を知るには、分析結果内の"CA9999"といったリンクをクリックしましょう。MSDNライブラリ内の該当ページがWebブラウザで表示されます(図6)。

図6 コード分析警告の詳細
図6 コード分析警告の詳細

 ヒントとこの詳細内容を元に、コードを実際に修正していきます。例えば、「CA1709: 識別子では、大文字と小文字が正しく区別されなければなりません」というルールで、名前空間名、クラス名、そしてメソッド名の3か所が指摘されていますので、詳細ページに表示された通り、「大文字始まりの単語区切り大文字」という、いわゆる「PascalCase」な名前に修正します(リスト2)。

リスト2 CA1709を修正したコード(Class1.cs)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace CodeAnalysis  // 名前空間名の修正
{
  public class SomeClass  // クラス名の修正
  {
    public void DoSomething(int count, int i)   // メソッド名の修正
    {
      var newCount = countUp(count);
    }

    private int countUp(int count)
    {
      return count + 1;
    }

    private static void UnUseMethod()
    {
    }
  }
}

 修正したら再びコード分析を実行し、CA1709の指摘がなくなったことを確認しましょう。

コード分析結果の抑制

 コード分析によって指摘された内容の中には、そのシステムの状況によっては対処する必要がないものも含まれます。こういった警告については、「抑制」することで次回以降のコード分析実行時に、その箇所が無視されるようになります。

 抑制にはソース内で直接指定する方法と、「抑制ファイル」というファイルにまとめて記述する方法の2種類があります。どちらも、ツールで自動的に行ってくれますので心配はいりません。順番にやり方を見ていきましょう。

ソース内で指定する方法

 まずはソース内での抑制です。例えばCA1704として指摘されている警告は「メソッドのパラメータ名をiではなくもっと意味のある名前に変更しろ」というものですが、場合によってはiという名前がふさわしいケースもあります。今回はそのケースに該当したとみなして抑制してみましょう。

 「コード分析」ウィンドウでCA1704を選択すると、項目の右下に「操作」というリンクが表示されるので、「メッセージの非表示」→「ソース内」を選択します(図7)。すると、該当箇所にSystem.Diagnostics.SuppressMessage属性が付けられ、抑制するルールとその対象となるモノの名前等(今回はパラメータ名i)が設定されます。

図7 ソース内での抑制指示
図7 ソース内での抑制指示
リスト3 ソース内で抑制したコード(Class1.cs)
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "i")
public void DoSomething(int count, int i)
{
  var newCount = countUp(count);
}

抑制ファイルで指定する方法

 次に抑制ファイル内での抑制です。例えばCA2210として指摘されている警告は「アセンブリに厳密名をつけるために署名しろ」という内容ですが、小さな範囲で閉じたシステムでは、そこまでしなくてもよいケースもあります。今回はそのケースに該当したとみなして抑制してみましょう。

 方法はソース内と同様で、「操作」→「抑制ファイル内」と選択するだけです(図8)。すると、プロジェクトにGlobalSuppressions.csという名前の「抑制ファイル」が作成され、ソース内と同じようにSuppressMessage属性が追加されます。

図8 抑制ファイル内での抑制指示
図8 抑制ファイル内での抑制指示
リスト4 抑制ファイル内で抑制したコード(GlobalSuppressions.cs)
// このファイルは、このプロジェクトに適用される SuppressMessage 
//属性を保持するために、コード分析によって使用されます。
// プロジェクト レベルの抑制には、ターゲットがないものと、特定のターゲット
//が指定され、名前空間、型、メンバーなどをスコープとするものがあります。
//
// このファイルに抑制を追加するには、[コード分析] の結果でメッセージを 
// 右クリックし、[メッセージの非表示] をポイントして、
// [抑制ファイル内] をクリックします。
// このファイルに手動で抑制を追加する必要はありません。

[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA2210:AssembliesShouldHaveValidStrongNames")]

 抑制した状態でコード分析を行い、指摘されなくなっていることを確認しましょう。なお、抑制を解除するには、該当するSuppressMessage属性を削除してください。


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

バックナンバー

連載:さらに使いやすく便利になった「Visual Studio」を始めよう!

著者プロフィール

  • WINGSプロジェクト 高野 将(タカノ ショウ)

    <個人紹介> 新潟県長岡市在住の在宅リモートワークプログラマー。家事や育児、仕事の合間に長岡IT開発者勉強会(NDS)、Niigata.NET、TDDBCなどのコミュニティに関わったり、Web記事や書籍などの執筆を行ったりしている。著書に『アプリを作ろう! Visual C#入門 Visual C...

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

    静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for ASP/ASP.NET。執筆コミュニティ「WINGSプロジェクト」代表。 主な著書に「入門シリーズ(サーバサイドAjax/XM...

あなたにオススメ

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