BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース C#用静的解析ツールRoslynator.Analyzersで500以上の方法によるコード改善が可能に

C#用静的解析ツールRoslynator.Analyzersで500以上の方法によるコード改善が可能に

原文(投稿日:2020/01/31)へのリンク

Roslynator.Analyzersパッケージの新バージョンである2.3.1では、500を越える分析とリファクタリング、修正が可能である。

RoslynatorはC#コードの静的分析に、オープンソースのRoslyn.NET Compiler Platformを使用して、コード改善のためのヒントとアクションをIDEに表示する。インストール可能な対象はVisual Studio 2017、Visual Studio 2019、Visual Studio Codeである。VSCode対応バージョンは、Linux、Mac、Windowsをサポートする。

Roslynの最新バージョンである3.0のメリットを活用するために、Roslynator.Analyzers 2.3.1は、Visual Studio 2017をサポートする最後のバージョンになる予定である。その機能は、単純な"hello world"コンソールアプリケーションを使って確認することができる。

using System;
using System.Collections.Generic;
 
namespace HelloWorldApp
{
    class Program
    {
        static void Main(string[] args)
        {
            var a = new List<string>() { "Hello","World"};
            var b = a.ToArray();
            for (var f = 1;f < b.Length;f++) {
                Console.WriteLine(value: b[f].ToString());
            }
            
        }
    }
}

Roslynatorは、リファクタ可能なアイテムのメニューに電球アイコンのアクションアイテムを追加し、画面下部のパネルに問題をリストアップする。問題パネルで指摘されたソースコード部分は波線で強調表示される。システムはキー入力毎に動作する。例えばFor文をタイプした時、その条件がBooleanと解釈できない場合には、Roslynatorがそれを強調表示する。

コンフィギュレーションファイルまたはVisual Studio IDEを使えば、どのチェックとフィックスをプロジェクトに含めたいかを設定することができる。コンフィギュレーションファイルをチーム全体で共有して、同じセッティングを使用することも可能だ。

analysersには拡張性があるので、廃止APIのような組織内に共通の問題を処理するハンドルを独自に書いたり、あるいはソースコードにセキュリティ証明書を含めるようなことも可能である。コマンドラインからの実行も可能なので、ビルドパイプラインに統合することもできる。

他の静的解析ツールと同じように、Roslynatorでは、ソフトウェアを実行してプログラムの動作や機能を確認する必要はなく、ソースコードの解析によってこれを行う。このようなツールは、Stephen C. Johnson氏が1970年代に、自身のCプログラム用のLintのアイデアを生み出した時に始まった。PythonやJavaScriptといった、非コンパイル言語にも対応が可能だ。

SonarAnalyzerやCode Cracker、FxCop、StyleCopといったツールがこのような解析を比較的容易に行える理由は、Roslynコンパイラがユニークな方法で開発されていることにある。以下に示すように、このコンパイラとツールはブラックボックスではなく、一連のAPIとサービスの連続という形式を採用している。これらのツールにより、コンパイラAPIを使った問題点の特定や置換方法の生成が可能になっているのだ。

イメージ引用: Roslyn Overview on github

すべての一般的なコード分析ツールがRoslynを使用している訳ではない。例えば、古くからあるResharperツールでは、JetBrainsのプロプライエタリな技術が使用されている。ResharperはRoslynより数年前に開発されたもので、そのエンジンでは、ソリューション全体のエラー分析や"ビッグピクチャ"コードインスペクションなどRoslyn APIにはない機能をサポートする。Razorなど、対象とする言語の範囲もRoslynより広い。ただしRider IDEなど他の製品では、JetBrainsもRoslynのテクノロジを使用している。

この記事に星をつける

おすすめ度
スタイル

BT