コード分析とは
継続してアプリケーションを開発していく中では、コードの保守性も重要になってきます。特にチームの開発では、メンバーのスキルにバラつきがあるため、中にはあまり良いとは言えない品質のコードが書かれてしまうこともあります。
こういった問題に対処するための方法にはいくつかあります。有識者、他のメンバーによるレビューを通じて直していくという方法もその一つです。しかし、せっかくの貴重なレビューの場を、ある意味些末な「コーディングルール」というようなものの指摘に費やすのは、非常にもったいないことです。レビューでは機能要件に沿った内容やコードの設計、構造といった、「人でしかできない」ことに注力したいものです。
そこで、「コーディングルール」のような決まりきったものについては、ツールを使って検出し、直していきましょう。そのためのツールの一つが、今回紹介するVisual Studioに搭載された「コード分析」機能です。
コード分析はコードをビルドしてできたアセンブリの中間コード(IL)を解析することで、コードがある一定の「ガイドライン」に沿っているかチェックします(図1)。また、指摘箇所とともにその問題の修正方法のヒントも得ることができます。
必要環境の準備
コード分析の実行にはVisual Studioが必要です。「Visual Studio Community」などの製品を、はじめにインストールしておいてください。
Visual Studio Communityは個人開発者であるか、企業内であればOSS開発を行うなど一定の条件を満たしていれば、無償で使用できます。企業内で使用する際の条件については、上記ページに簡単にまとめられていますので、ライセンス違反しないように内容を確認してからインストールしてください。
本記事ではこのVisual Studio Communityを、以降の説明に使っていきます。
サンプルコード
本記事のサンプルコードは、ページ上部のリンクからダウンロードする他に、GitHubでも公開しています。
このリポジトリをGitでクローンしてコミットをさかのぼることで、本記事の各フェーズのコード分析実行結果を手元で再現できます。記事と併せて、コード分析機能の理解に役立ててください。
コード分析の実行方法
それでは、実際にコード分析を行う方法について見ていきましょう。
コード分析対象プロジェクト作成
コード分析を行う対象となるプロジェクトを作成します。サンプルでは「Visual C#」→「クラス ライブラリ」プロジェクトを作成しています。
次に作成したプロジェクト内に含まれるClass1.csファイルを、次のように編集します(リスト1)。
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() { } } }
コード分析の設定
次にコード分析の設定を行います。
まずプロジェクトのプロパティ ページを開き、「コード分析」タブを選択します。そして、「ルールセット」→「この規則セットを実行」を、既定の"Microsoft マネージ推奨規則"から"Microsoft のすべての規則"に変更して保存します(図2)。
この「ルール セット(規則セット)」とは、どのようなチェックを行うかを指定する「ルール」を管理するものです。"Microsoft のすべての規則"は最も厳しいルールセットで、その名のとおりMicrosoftによって提供されるすべてのチェックが行われます。
実際に開発で利用する際は、そのシステムに合わせてルールをカスタマイズするのが一般的です。その方法については、後ほど紹介します。
コード分析の実行
準備ができたところで、実際にコード分析を行ってみましょう。
コード分析を行うには、Visual Studioの「分析」メニュー→「ソリューションでコード分析を実行」を選択します(図3)。また、メニュー項目に表示されているように、Alt+F11というショートカットキーでも実行できます。
コード分析の実行が終わると、「コード分析」ウィンドウが表示され、コード分析によって見つかった警告事項の一覧が表示されます(図4)。
これらの警告事項をクリックするとことで、コード内の該当箇所にジャンプすることができ、さらにその修正のヒントが表示されます(図5)。