Connect(); 2016

Volume 31 Number 12

Visual Studio 開発 – Visual Studio 2017 RC での生産性向上のための機能強化

Kasey Uhlenhuth; 2016

生産性を向上するには、毎日実行するタスクにかかる時間と労力をさらに減らす必要があります。Visual Studio 2017 RC は、タスクの自動化、ナビケーションの改善、コードの品質と状態についての迅速なフィードバックによりユーザーの生産性を向上します。

Visual Studio のリファクタリング、コード生成、コード分析、ナビゲーション、テスト、デバッグに加えた .NET 開発者向けの機能強化は、6年にも及ぶ C# と Visual Basic コンパイラの再構築プロジェクト「Roslyn」で実現されました。Visual Studio 2017 RC では、Visual Studio 2015 で Roslyn に対して行った取り組みを利用して、数多くの有益な新機能を次々と生み出しています。

コードのナビゲーション

バグを見つけるとき、リファクタリングの効果を見極めるとき、馴染みのないコード ベースを把握しようとするとき、開発者の頼りは、コード ナビゲーションの容易さと正確性です。今回のリリースでは、ナビゲーション エクスペリエンスが大幅に向上しています。「すべての参照の検索」、GoTo および Indent Guides により、(大きなコード ベースでも) 混乱しないで確実に A から B に移動できます。

以前の「すべての参照の検索」では、シンボルの用途をすべて見つけ出し、結果ウィンドウに単純なフラット リストが出力されていました。これが改善され、リスト内に多くの参照が含まれていても必要とする特定の参照にすばやくたどり着けるように、参照が色分けされ、カスタム グループ、並べ替え、フィルターの各機能により階層形式で表示されるようになりました (図 1 参照)。また、参照の表示をマウスでポイントするとツール ヒントが表示され、実際に移動する前にナビゲート先を簡単に確認することができます。(リファクタリングの効果を詳しく調べる場合など) コマンドを複数回実行する必要があるが、元の結果は保存しておきたい場合、「すべての参照の検索」の結果を保存または「ロック」できるようになりました。

色分け表示、カスタム編成、マウス ポイントによるプレビューなどの「すべての参照の検索」の機能強化
図 1 色分け表示、カスタム編成、マウス ポイントによるプレビューなどの「すべての参照の検索」の機能強化

さらに時間を節約するには、便利なキーボード ショートカットを習得します (図 2)。

図 2 一般的なナビゲーションのキーボード ショートカット

定義へ移動 定義をここに表示 すべての参照の検索 実装に移動 GoTo All (ファイル/型/メンバー/シンボル)
F12 Alt + F12 Shift + F12 Ctrl + F12 Ctrl + T または Ctrl + コンマ (,)

 

今回のリリースで大きく強化されたもう 1 つの機能が GoTo (以前の「移動」) です。GoTo All では、ソリューション内の任意のファイル、型、メンバーまたはシンボル宣言がすばやく、完全に検索されます。図 3 に示すように、検索バーの下部にあるアイコンを使うと、結果をグループ別にフィルター選択したり、検索の対象範囲を調整することができます (マウスよりもキーボードをお好みの場合は、クエリ構文を利用して、簡単なプレフィックスを入力することで直接フィルター選択することも可能です)。右下隅の歯車アイコンを使うと、検索バーの位置、ファイルのライブ プレビューでの結果の強調表示、各結果の詳細ファイル情報など、いくつかの設定をカスタマイズできます。

アイコンまたはクエリ構文を使用した、ファイル、型、メンバーまたはシンボル別の結果のフィルター処理
図 3 アイコンまたはクエリ構文を使用した、ファイル、型、メンバーまたはシンボル別の結果のフィルター処理

最後は、人気の Productivity Power Tools 拡張機能の Indent Guides (インデントのガイド) です。この機能は核となる製品の一部として機能し、灰色の縦の点線がコード内のランドマークとしての役割を果たして、ビューのフレーム内のコンテキストを提供します。閉じかっこをポイントすると、対応する開きかっこが色分けされてプレビュー表示されます。ガイド自体をポイントすると、そのコードを囲む開きかっこと閉じかっこが色分けされてプレビュー表示されます。こうした機能の目的は、ユーザーがスクロールや移動を行わなくても、コードの「構成」とコンテキストを理解できるようにすることです。Indent Guides は、Visual Studio 既存のアウトライン機能とも適切に連動し、より多くのリージョンを展開および折りたたみ可能にします。

スクロール バーで「マップ モード」を有効にすることもできます。これによりスクロール バーがコードの「マップ」に変わり、エラー、ブレークポイントなどを含むドキュメント全体の縮小版を表示することができます。「マップ」の任意の部分をマウスでポイントすると、ドキュメント内のその位置のコードがプレビュー表示されます。

ここでも便利なキーボード ショートカットを習得すれば、効率を高めることができます (図 4 参照)。

図 4 GoTo のキーボード ショートカット

  GoTo All 指定行へ移動 ファイルへ移動 型定義へ移動 メンバーへ移動 シンボルへ移動
ショートカット Ctrl + T または Ctrl + コンマ (,) Ctrl + G Ctrl + 1、F Ctrl + 1、T Ctrl + 1、M Ctrl + 1、S
クエリ プレフィックス プレフィックスなし コロン (:) f t m #

コードの記述と読み取り

ナビゲーション以外に、開発者はコードの記述と読み取りにも多くの時間を費やします。Visual Studio 2017 RC では、正しいコードの記述を促すことと、開発者のコード ベースの読みやすさを維持することに重点が置かれています。Visual Studio 2015 の機能を基盤にビルドされている今回のリリースでは、IntelliSense エクスペリエンスの調整、リファクタリングとコード修正機能の増強、カスタマイズ可能なコード スタイルの構成と適用が実現されています。

IntelliSense: Visual Studio の目標は、今日使用されているさまざまなコード記述ワークフローを妨げるのではなく、支援することです。Visual Studio の機能強化のうち、最もわかりやすく開発者の生産性を向上する機能の 1 つが IntelliSense です (図 5 参照)。Visual Studio 2017 RC では、スマートな事前選択機能、フィルター処理、XAML のサポートなど、いくつか機能が強化され、Intelli­Sense のエクスペリエンスが新しくなりました。

強調表示とフィルター機能を備えた IntelliSense
図 5 強調表示とフィルター機能を備えた IntelliSense

スマートな事前選択機能は、あるコード位置に必要な「ターゲット型」を判断し、その型に一致するアイテムを IntelliSense の補完リストから事前選択します。この機能により、フローの入力が速くなり、特定の場所に必要な型を考える必要がなくなります。IntelliSense のフィルター機能では、補完リストをカテゴリー別にフィルター選択できます。たとえば、拡張メソッドにフィルターで除外することやイベントのみを表示することができます。この機能により、補完リストに多数のアイテムを含むコードベースで作業を行う場合や、使い慣れていないコードを扱う場合に生産性が高まります。

最後に、今回のリリースでは、まったく新しく XAML IntelliSense のエクスペリエンスが提供されます。これにより、開発者はすばやく正確にバインドできるようになり、必要な情報だけを表示できるようになります。 この優れた補完エクスペリエンスには、x:Bind を使ってイベント、パス、関数をバインドする際の補完、camelCase のマッチング サポート (「RTB」が「RichTextBox」に補間されるなど)、名前空間プレフィックスのオートコンプリートなどがあります。

コード 分析: Visual Studio 2015 では、「入力と同時に」コードについてのフィードバックが得られるライブ コード分析機能が導入されました。これにより、一連の問題点が累積してから修正する場合に修正を忘れる可能性がなくなるため、問題点が累積する前の早い段階で問題を理解できるようなります。ライブ コード分析で特定されたエラーを解決するには、電球メニューまたはショートカット「Ctrl + ピリオド (.)」を使用して、コードの修正機能とリファクタリング機能にアクセスします。Visual Studio 2017 RC ではライブ分析とコード修正機能がさらに強化され、リファクタリングとコード修正機能の利用可能なセットが増え、コードが入力されると即座にスタイルに関する問題を特定するコード スタイル アナライザーが導入されます。

Visual Studio 2015 では、メソッドやインターフェイスの抽出、メソッド シグネチャの変更、一時変数のインライン化、ローカル変数の導入、不要な using や import の削除など、いくつかの中核となるリファクタリング機能が採用されました。Visual Studio 2017 RC では一連のリファクタリングとコード修正機能が拡張され、コード ベースを読みやすく維持して、開発ワークフロを促進できるようになっています。たとえば、多くの開発者は、最初にすべてのクラス、インターフェイス、およびその他の型を 1 つのファイルに記述し、その後それぞれの型を名前が対応するファイルに取り出しています。Visual Studio 2017 RC では、リファクタリング オプションの「対応するファイルへの型の移動」によって、このプロセスが迅速になります。 その他のリファクタリング機能は、以下のとおりです。

  • ファイルと型名を同期
  • プロパティをメソッドに変換
  • オブジェクト初期化子を使用
  • null-check + throw を use ?? + throw に変換
  • string.Format を補間文字列に変換
  • メソッドを同期
  • 欠如している case を追加
  • 中かっこを追加

また、今回のリリースでは、XAML の基本的なコード分析と修正機能がいくつか導入されています。C# と Visual Basic と同じ電球メカニズムを使用して、XAML ファイル内で不要な名前空間の並べ替えまたは削除や、不足している名前空間の追加が可能です。 

コードベースの一貫性を確保し、読みやすく保つのは簡単なことではありません。読みやすいコード ベースを追及するのには、正当な理由があります。 すべてのコードの見た目が一貫していると、新たな開発者が参加しやすくなります。コードのレビュー時に、書式やスタイルの細かな点よりもロジックに集中できます。Visual Studio 2017 RC では、組み込みスタイルの規則とカスタムの名前付け規則でコード スタイルを構成する方法が用意されました。

Visual Studio 2017 RC では、[ツール]、[オプション]、[テキスト エディター]、[C#/Basic]、[コード スタイル]、[全般] の順に移動すると、組み込みの構成可能なスタイル規則を確認できます。たとえば、明示的な型よりも var を優先、フレームワーク型よりも事前定義型を優先、nothing よりも this を優先などがあります。それぞれのルールに説明、構成可能な設定、構成可能な重要度があります。各重要度は、以下のように機能します。

  • Error (エラー) は、エディター内で赤の波線で示され、[エラー一覧] に表示されて、ビルドを中断します。
  • Warning (警告) は、エディター内で緑の波線で示され、[エラー一覧] に表示されて、構成「treat warning as errors (警告をエラーとして扱う)」を有効にしていると、ビルドを中断します。
  • Suggestion (修正候補) は、エディター内で灰色の点線で示され、[エラー一覧] に表示されますが、ビルドを中断しません (図 6 参照)。
  • None (なし) は、エディターには示されず、[エラー一覧] に表示されず、ビルドを中断しません。

ルール違反発生時リアルタイムに診断できるように、エディター内でチーム スタイルと名前付け規則を適用
図 6 ルール違反発生時リアルタイムに診断できるように、エディター内でチーム スタイルと名前付け規則を適用

名前付けスタイルの設定は .NET 開発者コミュニティの中でもバラエティに富んでいるため、各チーム独自のカスタム名前付け規則を作成し、適用できるようにしています。Visual Studio 2017 RC では、一連の既定の規則を用意しています。たとえば、メンバー (フィールドは除く) をパスカルケースにする、型をパスカルケースにする、インターフェイスは “I” で始める、非同期メソッドは “Async” で終わる、といった規則があります。 これらの既定の規則は、[ツール]、[オプション]、[テキスト エディター]、[C#/Basic]、[コード スタイル]、[名前設定] の順にアクセスして、構成および追加できます。名前付け規則は、標準のスタイル規則と同様、構成のグリッドに配置します (配置の順序が重要です。最初に一致するスタイル規則が適用されます)。

カスタム名前付け規則を追加するには、規則グリッド下部にある緑のプラス (“+”) ボタンをクリックして、ルール作成ダイアログを開きます。次に、既定の指定 (「all classes (すべてのクラス)」など) とスタイル (「use prefix _ (プレフィックス _ を使用)」など) を使ってカスタム名前付け規則を作成します。組み込みの指定とスタイルでは目標とする名前付け規則を作成できない場合は、独自のコードを記述することもできます。

エディター内でスタイル規則を調整することも可能です。この場合、「Ctrl + ピリオド (.)」を押して電球メニューを表示し、そのメニューから ルールの修正を選択して、リアルタイムのコード プレビューで歯車アイコンをクリックします。

コードのテスト

単体テストをサポートする場合、コードが正しいことを確認するために十分なテストを行うか、テストの結果を長時間待たなくてもよいように少量のテストを行うかを迷うことがあります。このような正確性と時間との折り合いに悩む開発者は、生産的ではないと感じ、不満を抱くことがよくあります。この負担を減らすために、Visual Studio 2017 RC では、C# と Visual Basic のライブ単体テストが導入されています (図 7 参照)。

成功、失敗、テストなしのいずれかのフィードバックをすばやく提供するライブ単体テスト
図 7 成功、失敗、テストなしのいずれかのフィードバックをすばやく提供するライブ単体テスト

ライブ単体テストでは、編集後に影響を受けるテストのみを実行し、エディター内でのテストの状態についてすばやくフィードバックを提供するために、実行時に生成されるデータを分析します。 これらのインライン表示は 1 行ごとに行われれます。

  • 実行可能なコード行が少なくとも 1 度テストに失敗すると、赤の「×」が付けられます。
  • 実行可能なコード行がすべてのテストに成功すると、緑のチェックマークが付けられます。
  • 実行可能なコード行がテストされない場合は、青いダッシュが付けられます。

ライブ単体テストで提供されるリアルタイムのコード カバレッジと、テスト結果の情報により、手動でテストを選択し、実行する煩わしさが解消されます。また、リアルタイム フィードバックは、行った変更によりプログラムが機能しなくなる場合に、すぐに通知する役割も担います。インライン表示が緑のチェックマークから赤の「×」に変化すると、機能しなくなることがわかります。任意の時点でチェックマークまたは「×」をマウスをポイントすると、その行で行われたテストが表示されます。また、マウスでポイントしたときに表示されるヒントに含まれるテストをクリックすると、そのテストに直接移動できます。

テスト駆動開発を実践するチームの一員の場合、ライブ単体テストによってワークフローがゲーム感覚になります。つまり、最初はすべてのテストに赤の「×」がついて失敗しますが、各メソッドを実装するにつれてテストが成功すると赤の「×」が緑のチェックマークに変わります。テスト駆動開発を行っていなくても、ライブ単体テストは、コードが機能しなくなったときの視覚的なフィードバックになります。

コードのデバッグ

他のすべての方法で問題を解決できない場合、開発者は問題の原因を特定するためにデバッグを頼りにします。Visual Studio 2017 RC では、プログラムをステップ実行し、例外情報を調べるのに必要な操作の回数を減らすことで開発者の時間を節約します。

「Run To Click (クリックした行まで実行)」は、デバッグ モードでコードの目的の行に到達するまでプログラムを実行し、停止します。この機能は、事実上、一時的なブレークポイントを追加して、そこにヒットし、削除するという操作 1 回のクリックにまとめたものです。そのため、開発者はこのような操作を繰り返す必要がなくなります。この機能を利用するには、デバッグ モードでコード行をポイントし、コードの左に表示される緑の「ここまで実行」ボタンをクリックします。

デバッガーの中で生産性向上に最も役立つのは、おそらく新しい例外ヘルパーです。設計が見直されたダイアログには、例外の内部詳細や、null を返す式など、最上位の例外からの最も重要な情報が表示されます (図 8 参照)。Visual Studio 2017 RC では、特定の場合に例外の型で動作を停止するのを防ぐこともできます。これにより、デバッグ中にサードパーティ ライブラリや特定の DLL からスローされた例外を無視できます。

ドロップダウンを詳しく調べ、最も重要な情報と操作を見つける必要性がなくなる新しい例外ヘルパ
図 8 ドロップダウンを詳しく調べ、最も重要な情報と操作を見つける必要性がなくなる新しい例外ヘルパ

まとめ

Visual Studio 2017 RC は、ユーザーの時間と手間を省いて生産性を高めることを重視しています。GoTo や「すべての参照の検索」によって容易になったナビゲーション、C#/VB さらに XAML の IntelliSense の機能強化、リファクタリングや修正機能の追加ならびにコード スタイルの追加によって拡張されたリアルタイム コード分析、ライブ単体テストによるインタラクティブなテスト、新しい例外ヘルパーによるデバッグ エクスペリエンスの効率向上などを開発者の皆さんと共有できることにわくわくしています。皆さんからのフィードバックを楽しみにしています。そして、皆さんが Visual Studio 2017 RC を使用して作業の生産性を高めることを願っています。


Kasey Uhlenhuth は、Microsoft で .NET および Visual Studio チームのマネージャーを務めており、現在は C# 開発者の環境の近代化に取り組んでいます。以前は、Visual Studio 向けの C# の対話型ツールや Node.js ツールに携わっていました。連絡先は、kaseyu@microsoft.com (英語) または Twitter @kuhlenhuth (英語) です。

この記事のレビューに協力してくれたマイクロソフト技術スタッフの David Carmona、Kevin Pilch-Bisson、および Mark Wilson-Thomas に心より感謝いたします。
Kevin Pilch は、ほぼ 15 年にわたり Microsoft で Developer Tools に取り組んでいます。  15 年の間に、IntelliSense、書式設定、リファクタリング、色分けなど、C# と VB の IDE 環境に携わってきました。最近は、Microsoft Roslyn プロジェクトの IDE チームでマネージャーを務めています。子どもとの時間を過ごし、マラソンのトレーニングをし、アイス ホッケーをするのが好きです。  ビールとチョコチップ クッキーに目がないのが弱点です。Kevin の Twitter は @Pilchie (英語) です。

Mark Wilson-Wilson は、Visual Studio IDE チームでプログラム マネージャーを務め、Visual Studio エディターを担当しています。10 年以上にわたり開発者ツールに携わり、Office、SQL、WPF、Silverlight などのツールにも関わってきました。Twitter は @MarkPavWT (英語) です。