こんにちは、ケイタです
先週から今週にかけてはサッカーの国際Aマッチ期間ということで、
日本代表がオランダ、ベルギーといったヨーロッパの強豪国との親善試合が行われました
サッカー好きかつJリーグ好きな僕としては大迫、柿谷といった普段Jリーグで活躍している期待の若手選手が日本代表でも活躍しているのを見るととても嬉しくなります
これからさらに成長し、来年のブラジルW杯でも光り輝いて欲しいと願うばかりです
さてさて、普段僕はプログラムを書くのにVisualStudioを愛用しています。
VisualStudioにはintellisenseと呼ばれる入力補完機能が組み込まれていて、
コーディングが楽に出来るようにされています。
その補完機能をはじめ、VisualStudioでのコーディングをさらに便利にする
アドオンの「Visual Assist X」を今日は紹介します
Visual Assist Xは、これまでブログで紹介してきたものと違って有料のソフトです
値段もスタンダードライセンスが$249とそれなりのお値段がかかります
さらにVisualStudio専用のアドオンなのでExpressEditionでは使用出来ません
「いいものかもしれないけど有料だしデフォルトの機能もあるし…」
という方の為に実際使ってみてこれは便利と感じたポイントを4つに絞って紹介させていただきます

ソリューション内ファイル検索、展開
既に入力補完の機能ではないですが、これが非常に便利
言ってみればこれは単に「ファイルを開く」機能です。
しかし、ソリューション内にソースファイルが大量にあると目的のファイルを
VisualStudioのソリューションエクスプローラーから探すだけで一苦労してしまいます
この機能はショートカットキー(Alt+Shift+O)を押してファイル名を入力すればそのファイルをソリューション内から検索して開いてくれます。
ファイル名の入力中は開くファイルの候補を常に出してくれるので、ファイルを開こうとした時に
「Memoryから始まる…なんだっけ…」といううろ覚え状態でも安心
VisualStudio2012からソリューションエクスプローラー上で検索出来る機能が追加されましたが、
今のところVisualAssistの方が圧倒的に高速で動作し、わかりやすいです
スニペット
入力補完のテンプレートの定義、それを呼び出すためのショートカット設定などを行います。
例えばファイルヘッダのインクルードガード設定から、if文を入力補完する際の中括弧の位置など細かいところまで。
VisualAssistの入力補完をどの様に行うかはこのスニペットで設定します
説明だけだとピンと来ないかもしれませんので、実例を紹介してみたいと思います。
例えばこんなよくあるif文をスニペットに追加してみます。
if(pInstance != nullptr) { // 処理 }
・スニペットのエディターで定義を追加
エディターはVisualStudioに統合されているため別のツールを立ち上げる必要はありません。
今回ショートカットを「ifn」にしてみました。
・コード上でショートカットの「ifn」を入力するとVSのintellisenseのように候補が表示されます。
・TabかEnterを押すと定義したスニペットがコードに追加されます。
スニペット上で$end$の定義をifの条件文の中に設定しているため、カーソル位置は設定した箇所になっています。
例えばこの$end$を中括弧{}の中に設定すれば、スニペットを挿入した時のカーソル位置は中括弧の中に移動します。
このようにスニペットを上手く使うことでコーディングの手間を省略することが出来ます
中括弧、括弧などのブロック補完
例えば普段下記のようなコードを書くことは多いのではないでしょうか。
中括弧でブロックを作る場合、当然そのブロックを閉じる必要があります
void Hoge::Function() { }
このように中括弧でブロックを作る時、中括弧の開始 { を入力した時点で } が入力補完されてブロックを閉じてくれます。
これは括弧()でもダブルクォーテーション“”でも同じ動作をします。
そのためブロックの閉じ忘れや、括弧の数が合わないといったつまらないケアレスミスを極端に減らすことが出来ます
ポインタかどうかを自動判別して置換
ポインタの場合、
Hoge* foo = new Hoge(); foo->Init();
のようにポインタのクラスにアクセスするときは->を記述する必要があります。
VisualAssistが入っていると、ピリオドを打つだけで -> に補完してくれます
上の例だと
foo.
とピリオドを打った時点で
foo->
に置換されます。
つまりコードを書く人が「この変数はポインタだから->」「この変数はポインタじゃないからピリオド」
というようにポインタかどうかを意識せず「クラスにアクセスするときはピリオド」で統一することが出来ます
(逆に変数がポインタかどうかを判別したいときは、とりあえず変数の後ろにピリオドをつければわかります)

普段使っていて特に便利だと感じるところを絞って紹介してみましたがいかがでしたでしょうか。
他にもシンボル検索、リネーム機能、コード内色分けや関数ドキュメントコメント生成など
便利な機能がたくさんあるので、興味が湧いた人はまず公式サイトの機能紹介動画を見てみるのをオススメします
それではまた