【VisualStudio チュートリアル】IDE 新機能
チュートリアルは、Visual Studio 2015 RC で作成されています。
本記事は、Visual Studio 2015の新しい機能の中からピックアップしてご紹介するチュートリアルです。
より使いやすい開発環境
プロジェクトの新規作成から [コンソールアプリケーション]を選択し 、Visual Studio 2015の右上にある「サインイン」をクリックしましょう。
Visual Studio 2015では、Microsoft Azure、開発者アカウントなどのサービスを使っていても、その都度アカウントをログインすることなく切り替えることが可能です。自分のアカウントの箇所をクリックすると、[アカウントの設定…] という項目がでてくるので、選択すると自分のアカウント情報が確認できます。
筆者の環境ではアカウントは一つですがアカウントが追加できるようになっています。
サインインすると、自分のVisual Studio 2015のウインドウレイアウトの設定を記憶させておくことができます。
そして、これは、同じアカウントを使っている他のマシンとも共有されます。
このウインドウレイアウトが気に入ったとします。下記のように [ウインドウ] – [ウインドウレイアウトの保存] を選択してください。
保存したいウインドウレイアウトの名前を記入しください。
試しに画面右側にあるソリューションエクスプローラー、チームエクスプローラーのウインドウを閉じてみます。
下記のように [ウインドウ] – [ウインドウレイアウト適用] – [コード作成用] を選択してください。
無事元のウィンドウレイアウトに戻りました。
Visual Studio 2015では、これの他にも、Surfaceなどで使えるタッチパネル対応なども実施されています。
詳しくはこの動画をご覧ください。
Visual Studio: An IDE For All Your Modern Devices & Services (英語)
https://channel9.msdn.com/Events/Visual-Studio/Connect-event-2014/710?wt.mc_id=relatedsession
アプリケーションの構造解析 〰コードマップ〰
次にご紹介するのは、コードマップという機能をご紹介いたします。
この機能はコードの構造を見える化するためのものです。
この機能は、多少複雑な構造をもつクラスではないと面白くありませんので、コンソールアプリケーションのプロジェクトを作成して次のコードを作成してみてください。
プロジェクト名をShachoProjectにして、下記の4つのコードをそれぞれ4つのクラスファイルに貼り付けてください。
Shain.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ShachoProject
{
abstract public class Shain
{
abstract public string StandUp();
abstract public int Salary();
public int BaseSalary {get; set;}
}
public class Tanto : Shain
{
public override int Salary()
{
return BaseSalary;
}
public override string StandUp()
{
return "担当が普通に立ちました";
}
}
public class Shunin : Shain
{
public override int Salary()
{
return BaseSalary * 2 + 1;
}
public override string StandUp()
{
return "主任が素早く立ちました";
}
}
public class Bucho : Shain {
public override int Salary()
{
return BaseSalary * 3;
}
public override string StandUp()
{
return "部長がだるそうに立ちました";
}
}
}
ShainFactory.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ShachoProject
{
public class ShainFactory
{
public Shain Create(string yakushoku)
{
switch (yakushoku) {
case "担当":
return new Tanto();
case "主任":
return new Shunin();
case "部長":
return new Bucho();
default:
throw new ArgumentException("該当する役職がありません");
}
}
}
}
Shacho.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ShachoProject
{
class Shacho
{
public static void Main()
{
Console.WriteLine("役職は?");
var yakushoku = Console.ReadLine();
Console.WriteLine("基本給は?");
var baseSalary = Console.ReadLine();
var shain = new ShainFactory().Create(yakushoku);
shain.BaseSalary = int.Parse(baseSalary);
Console.WriteLine(shain.StandUp());
Console.WriteLine("給料は" + shain.Salary() + "ドルです");
}
}
}
ShainTest.cs
using System;
using Microsoft.VisualStudio.TestTools.UnitTesting;
namespace ShachoProject
{
[TestClass]
public class ShainTest
{
[TestMethod]
public void TestCalcSalary()
{
var shain = GetShainWithBaseSalary100("担当");
Assert.AreEqual(100, shain.Salary());
}
[TestMethod]
public void TestCalcSalaryForShunin()
{
var shain = GetShainWithBaseSalary100("主任");
Assert.AreEqual(201, shain.Salary());
}
[TestMethod]
public void TestCalcSalaryForBucho()
{
var shain = GetShainWithBaseSalary100("部長");
Assert.AreEqual(300, shain.Salary());
}
private Shain GetShainWithBaseSalary100(string role)
{
var shain = new ShainFactory().Create(role);
shain.BaseSalary = 100;
return shain;
}
}
}
これを作成して、ビルドを実施し、テストを流してみましょう。
テストが全部通れば準備完了です。
コードマップを作成するためには [アーキテクチャ] – [ソリューションのコードマップを生成] を選択します。
次のような画面になります。
このコードはどのような構造でしょうか?ShachoProject.exeにマウスカーソルを合わせましょう。
次のような画面になります。左側のvマークをクリックしてみましょう。
ShachoProject.exeの内部構造が展開されました。
これをどんどん続けていって、どんどん内部を見るようにしてみましょう。
さらに内部をクリックすると、かなりプログラムの全体構造が見えてきました。
ピンクが依存、緑が継承、グレー線が依存を表しています。
さらに各クラスをクリックすると、クラスの内部構造が明らかになってきました。
メソッドや、属性を見ることができます。
メソッドをクリックすると、そのメソッドが内部でどのメソッドや属性に依存しているかを見ることができます。
この構造の場合、ShachoのMain メソッドは、ShainFactoryとShainには依存していますが、Bucho, Tanto, Shuninというクラスには依存していないようだということがわかりました。
クラスの内部構造を明らかにするコードマップの機能をより知りたい方は次のリンクをご参照ください。
Code Map improvements in Visual Studio 2015 CTP6 (英語)
Visual Studio 2015 IDE Productivity(英語)
https://channel9.msdn.com/Events/Visual-Studio/Connect-event-2014/028?wt.mc_id=relatedsession
よりわかりやすくなったタスク
上記のコードを使ってさらにみて行きましょう。Shain.cs の Tanto クラスの中身を削除してみましょう。
このコードでは、Shainという抽象クラスがあり、抽象メソッドStandUp()を持っています。
それを継承したクラスはそれを実装しないといけませんが、そうできていないので、IDE 上でどのようにすればいいかのタスクを示してくれます。
この機能のことをライトバルブと言います。
コード分析機能の強化
このように、大変便利なライトバルブですが、すでに準備されている追加ルールを導入することができます。
これは、わかりやすい動画が存在するので、それをご覧ください。
Improve Your Code Quality Using Live Code Analyzers(英語)
https://channel9.msdn.com/Events/Visual-Studio/Connect-event-2014/714?wt.mc_id=relatedsession
診断機能の強化
最後に診断機能です。
Visual Studio 2015 は診断機能がさらに協力になっています。
コードマップのところで使ったアプリケーションを使って診断をかけていきましょう。
デバッグの時に使いやすい診断の方法として次のようなものがあります。
ブレイクポイントを設定しましょう。デバッグ中に止めたい箇所のコードの左側をクリックします。
今回は、ShainTest.cs の [var shain = new ShainFactory().Create(role);] の行に設定します。
ブレイクポイントにカーソルを乗せると [設定…] という箇所がでてきます。
それを選択すると、下記のようにブレイクポイントの設定がコード上で設定できるようになります。
ブレークポイントをShainTest.csの下記のメソッドに二か所設定します。
[var shain = new ShainFactory().Create(role);]
[return shain;]
このメソッドは繰り返し実行されます。その後、[テスト] – [デバッグ] – [すべてのテスト] で、ユニットテストを実行します。
最初のブレイクポイントで動作が一旦停止します。
画面上部の [続行] ボタンを押して次のブレークポイントまで進めましょう。
そうすると、前のブレークポイントから、次のブレークポイントまでの、経過時間(Elapsed time)が表示されています。
これをクリックします。
診断画面では様々なデータが、時系列でみることができます。
さらに、スナップショットをとって、ブレイクポイントごとの状態と、オブジェクトの増分などが見れるようになっています。
いろんな指標をぜひ皆さんの手で確かめてください。
診断機能に関するリソースは次の通りです。
Debugging and diagnostics enhancements in Visual Studio 2015(英語)
https://msdn.microsoft.com/en-us/library/dn874014%28v=vs.140%29.aspx
以上です。Visual Studio 2015で、快適なプログラミングライフを送ってください!