方法: コードメトリックスデータを生成するHow to: Generate code metrics data

コードメトリックスデータは、次の3つの方法で生成できます。You can generate code metrics data in three ways:

.NET コード品質アナライザーのコードメトリックス規則.NET code-quality analyzers code metrics rules

.NET コード品質アナライザーには、いくつかのコードメトリックス アナライザー の規則が含まれています。The .NET code-quality analyzers include several code metrics analyzer rules:

これらの規則は既定で無効になっていますが、 ソリューションエクスプローラー または editorconfig ファイルで有効にすることができます。These rules are disabled by default but you can enable them from Solution Explorer or in an EditorConfig file. たとえば、ルール CA1502 を警告として有効にするために、EditorConfig ファイルには次のエントリが含まれます。For example, to enable rule CA1502 as a warning, your EditorConfig file would contain the following entry:

dotnet_diagnostic.CA1502.severity = warning

構成Configuration

コードメトリックスルールが起動されるしきい値を構成できます。You can configure the thresholds at which the code metrics rules fire.

  1. テキスト ファイルを作成します。Create a text file. 例として、 CodeMetricsConfig.txt という名前を付けます。As an example, you can name it CodeMetricsConfig.txt.

  2. 次の形式で、必要なしきい値をテキストファイルに追加します。Add the desired thresholds to the text file in the following format:

    CA1502: 10
    

    この例では、ルール CA1502 は、メソッドのサイクロマティック複雑度が10を超える場合に起動するように構成されています。In this example, rule CA1502 is configured to fire when a method's cyclomatic complexity is greater than 10.

  3. Visual Studio の [ プロパティ ] ウィンドウまたはプロジェクトファイルで、構成ファイルのビルドアクションを additionalfilesとしてマークします。In the Properties window of Visual Studio, or in the project file, mark the build action of the configuration file as AdditionalFiles. 次に例を示します。For example:

    <ItemGroup>
      <AdditionalFiles Include="CodeMetricsConfig.txt" />
    </ItemGroup>
    

[コードメトリックスの計算] メニューコマンドCalculate Code Metrics menu command

[ > コードメトリックスの計算] メニューを使用して、IDE で開いているプロジェクトの1つまたはすべてに対してコードメトリックスを生成します。Generate code metrics for one or all of your open projects in the IDE by using the Analyze > Calculate Code Metrics menu.

ソリューション全体のコードメトリックスの結果を生成するGenerate code metrics results for an entire solution

ソリューション全体に対するコードメトリックスの結果は、次のいずれかの方法で生成できます。You can generate code metrics results for an entire solution in any of the following ways:

  • メニューバーで、[ > > ソリューションの コードメトリックスの分析] を選択します。From the menu bar, select Analyze > Calculate Code Metrics > For Solution.

  • ソリューションエクスプローラー で、ソリューションを右クリックし、[コードメトリックスの計算] を選択します。In Solution Explorer, right-click the solution and then select Calculate Code Metrics.

  • [ コードメトリックスの結果 ] ウィンドウで、[ ソリューションのコードメトリックスを計算 する] ボタンを選択します。In the Code Metrics Results window, select the Calculate Code Metrics for Solution button.

結果が生成され、[ コードメトリックスの結果 ] ウィンドウが表示されます。The results are generated and the Code Metrics Results window is displayed. 結果の詳細を表示するには、[ 階層 ] 列のツリーを展開します。To view the results details, expand the tree in the Hierarchy column.

1つ以上のプロジェクトのコードメトリックスの結果を生成しますGenerate code metrics results for one or more projects

  1. ソリューションエクスプローラー で、1つ以上のプロジェクトを選択します。In Solution Explorer, select one or more projects.

  2. メニューバーで、[ > 選択したプロジェクトの コードメトリックス を分析する] を選択し > ます。From the menu bar, select Analyze > Calculate Code Metrics > For Selected Project(s).

結果が生成され、[ コードメトリックスの結果 ] ウィンドウが表示されます。The results are generated and the Code Metrics Results window is displayed. 結果の詳細を表示するには、 階層 内のツリーを展開します。To view the results details, expand the tree in the Hierarchy.

注意

[ コードメトリックスの計算 ] コマンドは、.net Core および .NET Standard プロジェクトでは機能しません。The Calculate Code Metrics command does not work for .NET Core and .NET Standard projects. .NET Core または .NET Standard プロジェクトのコードメトリックスを計算するには、次のようにします。To calculate code metrics for a .NET Core or .NET Standard project, you can:

コマンドラインコードメトリックスCommand-line code metrics

コードメトリックスデータは、C# の場合はコマンドラインから、.NET Framework、.NET Core、および .NET Standard アプリの場合は Visual Basic プロジェクトに対して生成できます。You can generate code metrics data from the command line for C# and Visual Basic projects for .NET Framework, .NET Core, and .NET Standard apps. コマンドラインからコードメトリックスを実行するには、 Microsoft CodeAnalysis. Metrics NuGet パッケージ をインストールするか、 Metrics.exe 実行可能ファイルを自分でビルドします。To run code metrics from the command line, install the Microsoft.CodeAnalysis.Metrics NuGet package or build the Metrics.exe executable yourself.

Microsoft CodeAnalysis. メトリック NuGet パッケージMicrosoft.CodeAnalysis.Metrics NuGet package

コマンドラインからコードメトリックスデータを生成する最も簡単な方法は、 Microsoft CodeAnalysis. metrics NuGet パッケージをインストールすることです。The easiest way to generate code metrics data from the command line is by installing the Microsoft.CodeAnalysis.Metrics NuGet package. パッケージをインストールしたら、 msbuild /t:Metrics プロジェクトファイルが格納されているディレクトリからを実行します。After you've installed the package, run msbuild /t:Metrics from the directory that contains your project file. 次に例を示します。For example:

C:\source\repos\ClassLibrary3\ClassLibrary3>msbuild /t:Metrics
Microsoft (R) Build Engine version 16.0.360-preview+g9781d96883 for .NET Framework
Copyright (C) Microsoft Corporation. All rights reserved.

Build started 1/22/2019 4:29:57 PM.
Project "C:\source\repos\ClassLibrary3\ClassLibrary3\ClassLibrary3.csproj" on node 1 (Metrics target(s))
.
Metrics:
  C:\source\repos\ClassLibrary3\packages\Microsoft.CodeMetrics.2.6.4-ci\build\\..\Metrics\Metrics.exe /project:C:\source\repos\ClassLibrary3\ClassLibrary3\ClassLibrary3.csproj /out:ClassLibrary3.Metrics.xml
  Loading ClassLibrary3.csproj...
  Computing code metrics for ClassLibrary3.csproj...
  Writing output to 'ClassLibrary3.Metrics.xml'...
  Completed Successfully.
Done Building Project "C:\source\repos\ClassLibrary3\ClassLibrary3\ClassLibrary3.csproj" (Metrics target(s)).

Build succeeded.
    0 Warning(s)
    0 Error(s)

出力ファイル名をオーバーライドするには、を指定し /p:MetricsOutputFile=<filename> ます。You can override the output file name by specifying /p:MetricsOutputFile=<filename>. を指定して、 レガシスタイルの コードメトリックスデータを取得することもでき /p:LEGACY_CODE_METRICS_MODE=true ます。You can also get legacy-style code metrics data by specifying /p:LEGACY_CODE_METRICS_MODE=true. 次に例を示します。For example:

C:\source\repos\ClassLibrary3\ClassLibrary3>msbuild /t:Metrics /p:LEGACY_CODE_METRICS_MODE=true /p:MetricsOutputFile="Legacy.xml"
Microsoft (R) Build Engine version 16.0.360-preview+g9781d96883 for .NET Framework
Copyright (C) Microsoft Corporation. All rights reserved.

Build started 1/22/2019 4:31:00 PM.
The "MetricsOutputFile" property is a global property, and cannot be modified.
Project "C:\source\repos\ClassLibrary3\ClassLibrary3\ClassLibrary3.csproj" on node 1 (Metrics target(s))
.
Metrics:
  C:\source\repos\ClassLibrary3\packages\Microsoft.CodeMetrics.2.6.4-ci\build\\..\Metrics.Legacy\Metrics.Legacy.exe /project:C:\source\repos\ClassLibrary3\ClassLibrary3\ClassLibrary3.csproj /out:Legacy.xml
  Loading ClassLibrary3.csproj...
  Computing code metrics for ClassLibrary3.csproj...
  Writing output to 'Legacy.xml'...
  Completed Successfully.
Done Building Project "C:\source\repos\ClassLibrary3\ClassLibrary3\ClassLibrary3.csproj" (Metrics target(s)).

Build succeeded.
    0 Warning(s)
    0 Error(s)

コードメトリックスの出力Code metrics output

生成される XML 出力の形式は次のとおりです。The generated XML output takes the following format:

<?xml version="1.0" encoding="utf-8"?>
<CodeMetricsReport Version="1.0">
  <Targets>
    <Target Name="ConsoleApp20.csproj">
      <Assembly Name="ConsoleApp20, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null">
        <Metrics>
          <Metric Name="MaintainabilityIndex" Value="100" />
          <Metric Name="CyclomaticComplexity" Value="1" />
          <Metric Name="ClassCoupling" Value="1" />
          <Metric Name="DepthOfInheritance" Value="1" />
          <Metric Name="SourceLines" Value="11" />
          <Metric Name="ExecutableLines" Value="1" />
        </Metrics>
        <Namespaces>
          <Namespace Name="ConsoleApp20">
            <Metrics>
              <Metric Name="MaintainabilityIndex" Value="100" />
              <Metric Name="CyclomaticComplexity" Value="1" />
              <Metric Name="ClassCoupling" Value="1" />
              <Metric Name="DepthOfInheritance" Value="1" />
              <Metric Name="SourceLines" Value="11" />
              <Metric Name="ExecutableLines" Value="1" />
            </Metrics>
            <Types>
              <NamedType Name="Program">
                <Metrics>
                  <Metric Name="MaintainabilityIndex" Value="100" />
                  <Metric Name="CyclomaticComplexity" Value="1" />
                  <Metric Name="ClassCoupling" Value="1" />
                  <Metric Name="DepthOfInheritance" Value="1" />
                  <Metric Name="SourceLines" Value="7" />
                  <Metric Name="ExecutableLines" Value="1" />
                </Metrics>
                <Members>
                  <Method Name="void Program.Main(string[] args)" File="C:\source\repos\ConsoleApp20\ConsoleApp20\Program.cs" Line="7">
                    <Metrics>
                      <Metric Name="MaintainabilityIndex" Value="100" />
                      <Metric Name="CyclomaticComplexity" Value="1" />
                      <Metric Name="ClassCoupling" Value="1" />
                      <Metric Name="SourceLines" Value="4" />
                      <Metric Name="ExecutableLines" Value="1" />
                    </Metrics>
                  </Method>
                </Members>
              </NamedType>
            </Types>
          </Namespace>
        </Namespaces>
      </Assembly>
    </Target>
  </Targets>
</CodeMetricsReport>
<?xml version="1.0" encoding="utf-8"?>
<CodeMetricsReport Version="1.0">
  <Targets>
    <Target Name="ConsoleApp20.csproj">
      <Assembly Name="ConsoleApp20, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null">
        <Metrics>
          <Metric Name="MaintainabilityIndex" Value="100" />
          <Metric Name="CyclomaticComplexity" Value="1" />
          <Metric Name="ClassCoupling" Value="1" />
          <Metric Name="DepthOfInheritance" Value="1" />
          <Metric Name="LinesOfCode" Value="11" />
        </Metrics>
        <Namespaces>
          <Namespace Name="ConsoleApp20">
            <Metrics>
              <Metric Name="MaintainabilityIndex" Value="100" />
              <Metric Name="CyclomaticComplexity" Value="1" />
              <Metric Name="ClassCoupling" Value="1" />
              <Metric Name="DepthOfInheritance" Value="1" />
              <Metric Name="LinesOfCode" Value="11" />
            </Metrics>
            <Types>
              <NamedType Name="Program">
                <Metrics>
                  <Metric Name="MaintainabilityIndex" Value="100" />
                  <Metric Name="CyclomaticComplexity" Value="1" />
                  <Metric Name="ClassCoupling" Value="1" />
                  <Metric Name="DepthOfInheritance" Value="1" />
                  <Metric Name="LinesOfCode" Value="7" />
                </Metrics>
                <Members>
                  <Method Name="void Program.Main(string[] args)" File="C:\source\repos\ConsoleApp20\ConsoleApp20\Program.cs" Line="7">
                    <Metrics>
                      <Metric Name="MaintainabilityIndex" Value="100" />
                      <Metric Name="CyclomaticComplexity" Value="1" />
                      <Metric Name="ClassCoupling" Value="1" />
                      <Metric Name="LinesOfCode" Value="4" />
                    </Metrics>
                  </Method>
                </Members>
              </NamedType>
            </Types>
          </Namespace>
        </Namespaces>
      </Assembly>
    </Target>
  </Targets>
</CodeMetricsReport>

Metrics.exeMetrics.exe

NuGet パッケージをインストールしない場合は、 Metrics.exe 実行可能ファイルを直接生成して使用することができます。If you don't want to install the NuGet package, you can generate and use the Metrics.exe executable directly. Metrics.exe の実行可能ファイルを生成するには:To generate the Metrics.exe executable:

  1. Dotnetリポジトリを複製します。Clone the dotnet/roslyn-analyzers repo.

  2. 管理者として Visual Studio の開発者コマンドプロンプトを開きます。Open Developer Command Prompt for Visual Studio as an administrator.

  3. Roslyn-アナライザー リポジトリのルートから、次のコマンドを実行します。Restore.cmdFrom the root of the roslyn-analyzers repo, execute the following command: Restore.cmd

  4. ディレクトリを Src\ Tools に変更します。Change directory to src\Tools.

  5. 次のコマンドを実行して、 メトリック .csproj プロジェクトをビルドします。Execute the following command to build the Metrics.csproj project:

    msbuild /m /v:m /p:Configuration=Release Metrics.csproj
    

    Metrics.exe という名前の実行可能ファイルは、リポジトリのルートにある artifacts\bin ディレクトリに生成されます。An executable named Metrics.exe is generated in the artifacts\bin directory under the repo root.

Metrics.exe の使用状況Metrics.exe usage

Metrics.exe を実行するには、プロジェクトまたはソリューションと出力 XML ファイルを引数として指定します。To run Metrics.exe, supply a project or solution and an output XML file as arguments. 次に例を示します。For example:

C:\>Metrics.exe /project:ConsoleApp20.csproj /out:report.xml
Loading ConsoleApp20.csproj...
Computing code metrics for ConsoleApp20.csproj...
Writing output to 'report.xml'...
Completed Successfully.

レガシモードLegacy mode

レガシモードMetrics.exe をビルドするように選択できます。You can choose to build Metrics.exe in legacy mode. レガシモードバージョンのツールでは、 生成された以前のバージョンのツールに近いメトリック値が生成されます。The legacy mode version of the tool generates metric values that are closer to what older versions of the tool generated. また、レガシモードでは、 Metrics.exe は、以前のバージョンのツールで生成されたコードメトリックスと同じメソッド型のコードメトリックスを生成します。Additionally, in legacy mode, Metrics.exe generates code metrics for the same set of method types that previous versions of the tool generated code metrics for. たとえば、フィールドおよびプロパティ初期化子のコードメトリックスデータは生成されません。For example, it doesn't generate code metrics data for field and property initializers. レガシモードは、旧バージョンとの互換性を維持したり、コードメトリックスの数値に基づいてコードをチェックインしたりする場合に便利です。Legacy mode is useful for backwards compatibility or if you have code check-in gates based on code metrics numbers. レガシモードで Metrics.exe をビルドするコマンドは次のとおりです。The command to build Metrics.exe in legacy mode is:

msbuild /m /v:m /t:rebuild /p:LEGACY_CODE_METRICS_MODE=true Metrics.csproj

詳細については、「 レガシモードでコードメトリックスを生成できるようにする」を参照してください。For more information, see Enable generating code metrics in legacy mode.

以前のバージョンPrevious versions

Visual Studio 2015 には、 Metrics.exe とも呼ばれるコマンドラインコードメトリックスツールが含まれていました。Visual Studio 2015 included a command-line code metrics tool that was also called Metrics.exe. このツールの以前のバージョンでは、バイナリ分析 (つまり、アセンブリベースの分析) が行われていました。This previous version of the tool did a binary analysis, that is, an assembly-based analysis. 新しいバージョンの Metrics.exe ツールは、代わりにソースコードを分析します。The newer version of the Metrics.exe tool analyzes source code instead. 新しい Metrics.exe ツールはソースコードに基づいているため、コマンドラインコードのメトリックの結果は、VISUAL Studio IDE と以前のバージョンの Metrics.exe によって生成されたものとは異なる場合があります。Because the newer Metrics.exe tool is source code-based, command-line code metrics results may be different to those generated by the Visual Studio IDE and by previous versions of Metrics.exe. Visual Studio 2019 以降では、Visual Studio IDE はコマンドラインツールのようなソースコードを分析し、結果は同じである必要があります。Starting in Visual Studio 2019, the Visual Studio IDE analyzes source code like the command-line tool and the results should be the same.

Visual Studio 2015 には、 Metrics.exe とも呼ばれるコマンドラインコードメトリックスツールが含まれていました。Visual Studio 2015 included a command-line code metrics tool that was also called Metrics.exe. このツールの以前のバージョンでは、バイナリ分析 (つまり、アセンブリベースの分析) が行われていました。This previous version of the tool did a binary analysis, that is, an assembly-based analysis. 新しい Metrics.exe ツールは、代わりにソースコードを分析します。The new Metrics.exe tool analyzes source code instead. 新しい Metrics.exe ツールはソースコードに基づいているため、コマンドラインコードのメトリックの結果は、VISUAL Studio IDE と以前のバージョンの Metrics.exe によって生成されたものとは異なります。Because the new Metrics.exe tool is source code-based, command-line code metrics results are different to those generated by the Visual Studio IDE and by previous versions of Metrics.exe.

新しいコマンドラインコードメトリックスツールでは、ソリューションとプロジェクトを読み込むことができる限り、ソースコードエラーが存在する場合でもメトリックを計算します。The new command-line code metrics tool computes metrics even in the presence of source code errors, as long as the solution and project can be loaded.

メトリック値の違いMetric value differences

Visual Studio 2019 バージョン16.4 とメモリメトリックが (2.9.5) から開始 SourceLines し、 ExecutableLines 以前のメトリックを置き換え LinesOfCode ます。Starting in Visual Studio 2019 version 16.4 and Microsoft.CodeAnalysis.Metics (2.9.5), SourceLines and ExecutableLines replace the previous LinesOfCode metric. 新しいメトリックの説明については、「 コードメトリックスの値」を参照してください。For descriptions of the new metrics, see Code metrics values. この LinesOfCode メトリックは、レガシモードで使用できます。The LinesOfCode metric is available in legacy mode.

LinesOfCode新しいコマンドラインコードメトリックスツールでは、メトリックの精度と信頼性が向上しています。The LinesOfCode metric is more accurate and reliable in the new command-line code metrics tool. Codegen の違いに依存せず、ツールセットやランタイムが変更されても変更されません。It's independent of any codegen differences and doesn’t change when the toolset or runtime changes. 新しいツールでは、空白行やコメントなど、実際のコード行がカウントされます。The new tool counts actual lines of code, including blank lines and comments.

やなどの他のメトリックでは CyclomaticComplexity MaintainabilityIndex 、以前のバージョンの Metrics.exe と同じ数式が使用されますが、新しいツールでは IOperations 中間言語 (IL) 命令ではなく (論理ソースの指示) の数がカウントされます。Other metrics such as CyclomaticComplexity and MaintainabilityIndex use the same formulas as previous versions of Metrics.exe, but the new tool counts the number of IOperations (logical source instructions) instead of intermediate language (IL) instructions. これらの数値は、Visual Studio IDE および以前のバージョンの Metrics.exe によって生成される数値と若干異なります。The numbers will be slightly different to those generated by the Visual Studio IDE and by previous versions of Metrics.exe.

関連項目See also