Roslynatorは、C#コードの改善に役立つ多数のアナライザー機能およびリファクタリング機能を集めたVS用拡張機能。品質の高いコードの記述に役立つ。
Roslynatorは、C#コードを改善する多数のアナライザー(コード分析)機能とリファクタリング機能を集めたVisual Studio(以下、VS)用拡張機能。その名の通り、Roslynを基盤とする。
RoslynatorはVS 2015/2017用の拡張機能として提供されている(VS 2017では機能ごとに分割してNuGetパッケージとしても提供されている)。大ざっぱな機能としては、次の2つがある。
アナライザーでは190個以上のルールが定められており、それらのルールに従ってコードがVS上でリアルタイムに分析される。分析の結果、問題(ルールに沿っていないコード)が見つかればアナライザーから診断結果(Diagnostic)が返送され、問題があることがIDEに表示される。このとき、その問題を解決する修正案(Code Fix)があれば、どのように修正をすればよいかがプログラマーに提示される。
Roslynatorにおいてアナライザーで定められているルールは「Roslynator Analyzers」ページで一覧できる。これらのアナライザーには「RCS」で始まるIDが割り当てられている。例えば、RCS1001というルールは「式が複数行に分けて書かれている場合には波かっこを付加する」というものだ(前述のページの[Category]欄を見ると、これはコーディングスタイルに関連するルールとなっている)。そこで、次のようなコードを書いてみよう。
int[] array = { 1, 2, 3, 4, 5 };
foreach (var item in array)
Console.WriteLine(
$"item: {item}");
VS 2017にRoslynatorをインストールしていると、RCS1001ルールに上記のコードが引っ掛かるので診断結果が報告され、[エラー一覧]ウィンドウに次のように「情報」として、波かっこを追加した方がよいと表示される。
その他にも、ProgramクラスにはスタティックなMainメソッドしかないので、「Programクラスをスタティッククラスにするように」「ProgramクラスとMainメソッドにアクセス修飾子を付けるように」「argsパラメーターが使われてないよ」といったメッセージも表示されている。これらも[コード]欄を見ると「RCS」で始まるIDが割り当てられているので、Roslynatorが問題があると判断したコードであることが分かる。「Programクラスをスタティッククラスにするように」だけはレベルが「警告」となっているので、エディタにも波線で「問題があること」が示されている。それ以外は「情報」なので、エディタには特に示されていないが、[エラー一覧]ウィンドウには問題が報告される。
「Console.WriteLine」行にカーソルがある状態で[Ctrl]+[.]キーを押すか、電球アイコン([クイック操作]アイコン)をクリックすると、次のように修正案が表示される。
このようにRoslynatorのアナライザーはC#で記述したコードを分析し、さまざまな観点(コーディングスタイル、冗長性、可読性など)から問題を報告してくれる。
一方のリファクタリングは、プログラマーの必要に応じて特定の範囲のコードに対するリファクタリング案を提示してくれる。リファクタリング機能を呼び出すには、任意のコード位置で[Ctrl]+[.]を押したり、電球アイコンをクリックしたりする。例えば、以下のようなコードを書いたとする。
int[] array = { 1, 2, 3, 4, 5 };
foreach (var item in array)
if (item % 2 == 0)
Console.WriteLine($"even: {item}");
else
Console.WriteLine($"odd: {item}");
このコードを書き、if節あるいはelse節の本体にカーソルがある状態で[Ctrl]+[.]キーを押すと、次のようにリファクタリング候補が表示される(どのようなリファクタリング候補が表示されるかは、カーソル位置や範囲選択に応じて変わるので、興味のある方は実際にRoslynatorをインストールして試してみてほしい)。
一番上の「Add braces」は「foreach文に波かっこを加えた方がよい」という「RCS1001」からのメッセージおよびCode Fixだ。その下に「Add braces to if-else」などのリファクタリング候補が表示される(Code Fixはリファクタリング候補よりも優先してメニューの上部に表示されるようになっている)。
Roslynatorが提供する全てのリファクタリング機能は「Roslynator Refactorings」ページで一覧できる。これらのページを見ると、一部の機能についてはデフォルトの状態では有効となっていないことが分かる。
Roslynatorのアナライザー機能とリファクタリング機能にはデフォルトで有効化されているものとそうではないものがある。アナライザー機能の有効/無効を切り替えたり、レベルを情報/警告/エラーなどを個別に設定するには、ルールセットのカスタマイズを行う必要がある。これにはソリューションエクスプローラーで[参照]の下にある[アナライザー]を右クリックして、コンテキストメニューから[アクティブなルール セットを開く]を選択し、エディタ画面にルールセットを表示する。以下は、[グループ化]ドロップダウンで[アナライザーID]を選択し、Roslynatorで定められているルールを表示したところだ。
左端のチェックボックスがオンになっているのが、有効化されているルールである。また、[操作]欄にある[情報]などは、それをどのように扱うのかを示している。RCS1001は有効化されていて、[情報]となっているので、最初に見た複数行にまたがるConsole.WriteLineメソッドの呼び出しが「情報」として[エラー一覧]ウィンドウに表示されたというわけだ。
リファクタリング機能の有効/無効の切り替えは[オプション]ダイアログから行う([ツール]メニューの[オプション]を選択)。なお、このダイアログではCode Fixの有効/無効の切り替えもできる。
Roslynatorが提供するアナライザー機能やリファクタリング機能を、自分たちのプロジェクトに合わせたものに変更することで、より適切なコード記述がはかどるようになるはずだ。
Roslynatorは、C#コードの改善に役立つ多数のアナライザー機能およびリファクタリング機能を集めたVS用拡張機能であり、より適切、より可読性の高い、冗長度の低いコードの記述に役立つ。
Copyright© Digital Advantage Corp. All Rights Reserved.