この Visual Studio 拡張が熱い!

この記事は Visual Studio / Visual Studio Code Advent Calendar 2015 の 18 日目です。

Visual Studio の醍醐味のひとつといえばカスタマイズ、そしてその一角を占めるのが拡張 (extension) の導入ですよね。Visual Studio Community の登場により、拡張がサポートされていない Express Edition に遠慮する必要性が相当減ったのは 2015 年の大きな変化といえるのではないでしょうか。

そこで本稿では、私が個人的におすすめしたい「入れてすぐ納得できる」拡張をいくつか紹介したいと思います。(全部知ってたらごめんなさい!)

C# outline

この拡張、私が事あるごとにその素晴らしさを熱く語ってる気もするのですが、本当に素晴らしいので取り上げます。

C# outline 2015 はその名の通り、テキスト エディタ上で C# コードのアウトライン機能を有効にします。

「いや、Visual Studio にデフォルトで搭載されてるでしょ…」という反論が予想されますが、一度体験してしまったら、C# outline の無い環境ではアウトライン機能が無いも同然というのが私の持論です。

左が C# outline 導入前、そして右が導入後のテキスト エディタです。左端のインジケータ部分にご注目ください:

cs-outline-before-after.png

そう…素の状態だと、アウトライン機能 (厳密に言えば Automatic Outlining ですが) は名前空間や型、メンバ等でしか利用できないのです。C# outline を導入すると、あらゆる brace ({}) でアウトラインが有効になってくれます。

これを導入すれば、縦に長いメソッドを読まざるを得ない状況での効率が格段に向上します。何ということはない拡張ですが、なぜ標準でこうしてくれないのか…というくらい便利で自然。是非試してほしい拡張です。

IntelliCommand

Visual Studio のカスタマイズの中でも、キー バインディングは特に奥深いもののひとつと言えるでしょう。それに、カスタマイズなどしなくても、Visual Studio には標準の時点で既に多くのショートカット キーが定義されています。

IntelliCommand は、忘れてしまいがちなキー バインドを思い出す一助となります。導入することで、修飾キー (Ctrl など) を押下し続けたり、複合キー バインド (key chord; 複数キー入力で成立するキー バインド。Ctrl+K, Ctrl+D など) を途中まで入力したまま一定時間 (設定可能) 待機すると、キー バインディングの候補がポップアップで表示されます。要は、こんな感じです (一例):

  • 修飾キーを押下し続けた場合: intellicmd-modkey.png
  • 複合キー バインドを途中まで入力した場合: intellicmd-chordkey.png

このように、どのキーを押せばどのコマンドが実行されるのかが一覧表示され、大変便利です。「あのキーに割り当てたコマンドは何という名前だったかしら…?」というような状況で、いちいちオプション ダイアログから探しに行かなくてすむのもポイントですね。

2016-01-15 追記: IntelliCommand は Visual Studio のロケールが英語に設定されていないと機能しないらしいです。ご注意ください。(thanks: @Grabacr07)

Hide Main Menu

Hide Main Menu は…その名前で全て説明しつくされていますが、メニュー バーを隠してくれる拡張です。

導入すると、標準状態ではメニュー バーが完全に隠れた状態となり、Alt キーを押すと本来の状態のようにメニュー バーが出てくる…という感じの挙動です。

もはやすっかり一般的となってしまったワイド ディスプレイだと、垂直方向の解像度は多少ケチっておきたいというのは至極当然な思いなのではないでしょうか。Atom には標準で付いてる機能ですし、VS Code にも同じような機能を追加する pullreq が出てるみたいなので、私も含め、需要はそれなりにあると思います。

VSCommands という拡張ではツール バーを隠すようにメニュー バーを出現させることもできて、表示時にエディタ部分の高さが変わらないので愛用していたのですが、VSCommands は未だ Visual Studio 2015 に対応したバージョンが出てきていません…残念。

SwitchStartupProject

これもまた名前だけで説明が終わってしまう拡張ですね… SwitchStartupProject は、スタートアップ プロジェクト設定を簡単に変更できるようにする拡張です。この拡張を入れると、ツール バーのビルド構成を変更するドロップダウン リストの隣に、スタートアップ プロジェクトを変更するドロップダウン リストが追加されます。

とはいえ、Visual Studio 2015 でも同様のツール バー項目が追加されています。ですが、この拡張では、ユーザが以下のような項目を設定して、スタートアップ プロジェクトのカスタム構成を自由に追加し、随時切り替えることができます:

  • どのプロジェクトを開始するかの設定: 単一だけでなく、複数プロジェクト ― マルチ スタートアップ構成も可能
  • 開始するプロジェクトごとに、起動時のコマンド ライン引数の設定

また、この設定は独立した設定ファイル ($(SolutionDir)\$(SolutionName).startup.suo) に保存されるので、チーム間でスタートアップ構成を共有するといったことも可能でしょうし、これは大規模な構成のソフトウェアを開発する際には大変有用なのではないでしょうか。

とはいえ、一般的なリポジトリでは *.suo は除外対象に含まれているでしょうし、この設定ファイルには「最近スタートアップに選択したプロジェクト」のリストも含まれているので、実際の運用としては引き続き *.suo 全体を除外対象としつつ、当該設定ファイルのみ git add --force によって特別にバージョン管理下に置く、といった手法が考えられます。

また、スタートアップとして選択可能なプロジェクトをフィルタするための設定 (Single-Project List Mode) では [All] を選択するとライブラリ プロジェクトのような無用のエントリまで表示されてしまう一方で、Visual Studio 標準のように実行可能なプロジェクトのみを表示する [Smart] では、例えば Unity C# プロジェクトのような特殊なプロジェクトがリストに表示されないという問題があります。このような状況では、[None] を選択してカスタム構成のみを表示する設定にした上で、必要な構成を全てカスタム構成として追加してゆく回避策を紹介します。

BetterStartPage

最後に少し趣向を変えてカスタム スタート ページを紹介します。BetterStartPage は、正直あまり表示価値を見出せないであろうニュース フィード部分を取り除き、代わりに (「最近使った項目」とは別に) ユーザが自由にソリューションをカテゴリ分けして登録できます。

better-start-page.png

「最近使った項目」ではソリューションのピン留めが可能とはいえ大変視認性に乏しいものですが、このスタート ページでは自由にカテゴリ分けしてソリューションを登録し、また、上の画像では特に示していませんが表示する項目名もカスタマイズできます。

スタート ページから無駄な情報が排除されて見栄えもすっきりし、さらに、日常の作業効率を向上できるのではないかと思います。特に、特に様々なコードを行ったり来たりしたりする、あるいは日頃よく使うわけではないけれども常に簡単に開けるようにしておきたい項目が多数ある状況などでは特に有用ではないでしょうか。

ちなみに、このスタート ページを実際に有効化するには、拡張のインストール後に設定ダイアログで [環境] - [スタートアップ] ([Environment] - [Startup]) ページから BetterStartPage を選択する必要があります。

その他: いつもの

Productivity Power Tools や、有料ですが ReSharper はあまりにも定番すぎるので今回の紹介からは外しましたが、これらは色々と機能も盛り沢山ですし、また別の機会にゆっくり紹介したいと思います。

結び

今回参加したこの Advent Calendar、何やら濃い目の記事が多くて、何を書いたものか…と恐縮しつつ悩んでみたりもしたのですが、折角なのでちょっと軽め (?) の内容にしてみようと思い立ち、Visual Studio 拡張、それもすぐに便利さを体感できそうなものを 5 つ紹介してみました。

確かに素の Visual Studio でもそれなりに便利だというのも事実ではあります。しかし、それでもなお、導入することで細かい使い心地、ひいては効率が向上するからこそ、様々な拡張が人気を博しているというのもまた事実です。皆様も、是非様々な拡張を試してみては如何でしょうか。

Happy Coding with Customized Visual Studio!