RSコラム

Windowsの統合開発環境である「Visual Studio」には、さまざまな機能が搭載されています。ただのエディタとして使うにはもったいない便利な機能をご紹介します。

中編後編もご覧ください。

この記事ではVisual Studio 2015 Enterpriseを使って執筆しています。バージョンにより機能や画面が異なることがありますので、ご了承ください。

ブレークポイント条件

  2017 2015 2013 2012 2010
ブレークポイント条件

デバッグ時、“Forループの5回目の処理を調査したい”ときに、[ステップオーバー]ボタンを5回押していませんか? そんなときに便利な「ブレークポイント条件」機能があります。

ブレークポイント条件を使うと、設定した条件を満たしているときだけ、ブレーク(中断)させることができます。例えば銀行のプログラムでbalance(残高)が異常値を持っているときだけブレークしたいとき、balance < 0条件を指定してブレークポイントを作成すれば、異常値の時だけプログラムをブレークさせることができます。

ブレークポイント条件の指定方法

ブレークポイントを右クリックして[条件...]を選択するか、ブレークポイントをポイントして設定アイコンをクリックします。

[ブレークポイント設定]ウィンドウが開きます。[条件]ボックスをオンにすると、ウィンドウが展開され、さまざまな種類の条件が表示されます。

次の例では、Forループの中で、intNumの値が4、またはintSumの値が30を超える場合にのみ、ブレーク(中断)する設定です。この例では[条件式]について2つめのフィールド(条件)を[trueの場合]に設定しています。他には[変更された場合]があります。

条件は他に、[ヒットカウント]、[フィルター]があり、AND条件で追加できます。[ヒットカウント]はブレークしたい箇所がループ内にあるとき、繰り返し回数に条件をかけられます。例えば「5回目」や「回数が2の倍数のとき」といった条件にできます。

[フィルター]は指定されたデバイスでのみ、または指定されたプロセスやスレッドでのみブレークさせる制限が可能です。3つめのフィールドには以下のように設定します。

設定項目 設定例 意味
MachineName MachineName = “name” プロセスを実行しているコンピュータの名前
ProcessId ProcessId = value 実行中のプロセスId
ProcessName ProcessName = “name” 実行中のプロセス名
ThreadId ThreadId = value 実行中のスレッドId
ThreadName ThreadName = “name” 実行中のスレッド名

より詳細な情報は下記のMSDNのサイトを参照してください。
参考:ブレークポイント条件

リファクター(メソッドの抽出)

  2017 2015 2013 2012 2010
リファクター(メソッドの抽出) × × ×

何千行もの業務処理をメインとなるプログラムに書いていませんか? 繰り返し記述するロジックや、ある程度のまとまった処理はメソッド化しましょう。そんなときに便利な「リファクター(メソッドの抽出)」機能があります。

リファクター(メソッドの抽出)は、選択した範囲のコードをメソッドとして抽出ができます。この機能は、選択範囲やその周囲のコードを解析して、メソッドの引数や返り値の有無(FunctionまたはSub)が適切になるように自動で設定してくれます。

リファクター(メソッドの抽出)の使用方法

以下のコードは、円の面積を計算し、結果を指定したStreamWriterで書き出すプログラムです。面積の計算とStreamWriterを使った書き出しの部分をメソッドに抽出します。

まず、ソースコードの該当範囲を選択します。

右クリックして[クイックアクションとリファクタリング...]をクリックします。もしくは、メニューから[編集]→[リファクター]→[メソッドの抽出...]をクリックします。

[クイックアクションとリファクタリング...]をクリックした場合は、[メソッドの抽出]が選択でき、以下のようにメソッド抽出後のコードがプレビュー表示されます。

Enterキーを押すとメソッド抽出がコードに反映されます。メソッド名は「NewMethod」となりますが、その場で変更が可能です。以下では「WriteAreaValue」に変更しています。

[適用]をクリックすると確定します。

リファクター(メソッド定義の変更)

  2017 2015 2013 2012 2010
リファクター(メソッド定義の変更)△は「名前の変更」のみ

複数の場所から呼び出されているメソッドの名前を変更したいときがあります。そんなとき、メソッド名を変更し、その後呼び出し箇所を一つ一つ修正する、といったことをしていませんか? ここでは、「リファクター」の機能を使ったメソッド名の変更やパラメーターの変更を紹介します。

リファクターを使ってメソッド名やパラメーターを変更すると、そのメソッドの呼び出し側のコードも自動的に修正されます。呼び出し側を一つ一つ修正する手間や、修正の漏れを無くすことができます。

リファクターを使ったメソッド名の変更方法

対象のメソッド名の部分を選択します。

右クリックして[名前の変更...]をクリックします。もしくは、メニューから[編集]→[リファクター]→[名前の変更...]をクリックします。

新しい名前を入力します。以下では「WriteAreaValue」から「WriteCircleArea」に変更しています。このとき、対象のメソッドの呼び出しコード(10行目)も同時に修正されます。

[適用]をクリックすると確定します。

リファクターを使ったパラメーターの変更方法

パラメーターの変更では、引数の順序を変えたり、削除したりすることができます。引数を追加することはできません。

対象のメソッド名を選択して右クリックして[クイックアクションとリファクタリング...]をクリックします。もしくは、メニューから[編集]→[リファクター]→[パラメーターの削除...] / [パラメーターの順序変更...] をクリックします。

[クイックアクションとリファクタリング...]をクリックした場合は[署名の変更...]が選択でき、以下のようなダイアログが表示されます。ここから引数の順序変更や削除を行います。

削除は、基本的にメソッド内で全く使用していない引数が存在する場合に行います。使用している引数を削除すると、メソッド内でビルドエラーが発生します。

[OK]をクリックすると確定します。この例では引数のwriterradiusの順序を入れ替えています。呼び出し側(10行目)も自動で変更されています。

また、メソッド定義の箇所ではなく、呼び出し側の箇所からでもリファクターを使って定義を変更することが可能です(メソッド名の変更/パラメーターの変更いずれも)。

警告の構成

  2017 2015 2013 2012 2010
警告の構成

ソースコードレビューでの指摘漏れにより、不具合を見逃してしまった経験はないですか? そんなとき、コンパイルオプションの「警告の構成」という便利な機能があります。 警告の構成を設定することで、ランタイムエラーが発生する可能性のあるコードの存在を通知させることができます。設定のレベルによってはビルドが完了しないようにすることもできるので、機械的にプログラムコードの品質向上につなげることができます。

なお、プログラムコードの品質向上の目的では「コード分析」という機能もあります。「警告の構成」はあくまでコンパイルのオプションとして可能な範囲の設定ですが、「コード分析」ではより高度な設定が可能です。(コード分析についても、今後、紹介する予定)

警告の構成の設定方法

プロジェクトのプロパティを開き、[コンパイル]タブをクリックすると、[警告の構成]の設定が可能です。[条件]には、[暗黙的な変換]や[割り当て前の変数の使用]、[未使用のローカル変数]といった、ランタイムエラーを発生させる可能性のあるコードや、可読性を下げる原因となるコードの条件が書かれています。これらの条件に合致するコードに対し、[通知]のレベルを設定することができます。

[通知]には[なし]、[警告]、[エラー]の3つが設定できます。警告やエラーに設定した条件に一致するコードは、[エラー一覧]にリスト表示されます。

以下の例では、初期値を設定していない変数writerを10行目で使用しています。警告の構成で[割り当て前の変数の使用]が警告に設定されているため、該当コードがエラー一覧に表示されます。

こういったコードを許さず、コンパイルエラーにするというルールにするのであれば、警告の構成を変更し、[通知]の設定をエラーに変更します。

すると、以下のように該当コードがエラーとして表示されるように変わりました。この状態ではビルドを実行してもビルド失敗となります。

Option Strict

各条件について警告やエラーをどのように設定すればよいか迷う場合は、「Option Strict」設定を有効にすることをお勧めします。以下のように、[コンパイル]タブの[Option Strict(S)]をOnに設定します(デフォルトはOff)。

Option StrictをOnにすると、警告の構成の[条件]のうち、[暗黙的な変換]、[遅延バインディング]、[暗黙的な型]が、エラーとなります。

より詳細な情報は下記のMSDNのサイトを参照してください。 参考:Visual Basic での警告の構成

いかがでしたでしょうか? 1つでも参考になれば幸いです。中編に続きます。

TOP