連載
» 2017年06月30日 05時00分 UPDATE

連載:簡単! Visual Studio 2017入門:第6回 IntelliSenseを活用してキモチいいコーディングを実現しよう (1/2)

Visual Studio 2017の入力支援機能を使うと、プログラムコードをより高速に、より正確に入力することが可能だ。そうした機能を幾つか紹介していこう。

[かわさきしんじ,Insider.NET編集部]
「連載:簡単! Visual Studio 2017入門」のインデックス

連載目次

 前回は、初めてのWindowsアプリとして簡単な時計アプリを作成しながら、Visual Studio 2017(以下、VS 2017)を使用したアプリ開発の流れを見た。今回は息抜き話になるが、プログラムコードを記述する際に役に立つ機能を幾つか見ていこう。

VS 2017の入力支援機能

 前回のコードを実際に入力してみた人は、例えばsecTimer_Tickメソッド内に「Set」とだけ入力した時点で、これから呼び出そうとしている「SetDisplay」メソッドが入力候補としてコンテキストメニューにポップアップ表示されたり、「SetDisplay(」と入力した時点で開きかっこと対になる閉じかっこが自動的に入力されたりしたことにビックリしたかもしれない。

 VS 2017ではこうした入力支援機能が多数提供されている。例えば、そうした機能の1つに変数名やメソッド名などの補完機能がある。現在では変数やメソッドの名前は、それが何のためのものであるかが読めば分かるように説明的なものとすることが多い。これに伴って、それらの名前が長くなることもよくある。そうなると、キーボードから長い名前の変数やメソッドを常に間違えることなく入力するのが難しくなる。そこで、入力支援機能を使うことで、ポップアップメニューから名前を選択したり(後述するように)[Tab]キーを押したりすることで、名前を全て入力する必要がなくなる。これにより入力ミスが減り、効率的にコーディングを行えるようになる。

 VS 2017はとても使いやすい統合開発環境(IDE)とよくいわれるが、そうした評価は本稿で取り上げる入力支援機能によるところも大きい。この機能を活用して、プログラムコードを間違えることなく、かつ、わずかなキータッチ数で入力できれば、プログラマーのストレスも減り、気持ちよく開発を進められる。こうした機能はさまざまな面でプログラマーを支援してくれるので、どんどん活用していきたいところだ。

 以下では大きく分けて次の3つの入力支援機能を紹介しよう。

  • IntelliSense(インテリセンス)による入力候補の表示
  • かっこの自動挿入
  • クイック操作アイコンによる支援

 なお、実際のプロジェクトをVS 2017で開きながら、本稿の内容を試してみたいという方はここからソースコードをダウンロードしてみてもよい。なお、詳細なコードの説明については前回の記事を参照されたい。ここではコードの詳細については触れない。「ふんふん」と鼻歌混じりで読んでいただければ幸いだ。

IntelliSenseによる入力候補の表示

 まずはIntelliSenseと呼ばれる機能について見ていこう。これはコードエディタで現在どの位置にカーソルがあるか、どんなメソッドや変数を利用可能か、プログラマーがどんなテキストを入力したかなどの情報を基にして、適切な入力候補をVS 2017自体が推測してお勧めの候補をポップアップ表示してくれるものだ。ここでは前回に紹介したSetDisplayTimeメソッドのコードを入力した場合を例にIntelliSenseの機能を見ていく。

private void SetDisplayTime()
{
  timeNow.Text = DateTime.Now.ToString("HH時mm分 ss秒");
}

SetDisplayTimeメソッド

 SetDisplayTimeメソッドを実装しようとして、コードエディタでの入力を始めると次のようになる。これは「private」の最初の文字「p」を入力した直後の状態だ。

IntelliSenseによる入力候補の表示(1) IntelliSenseによる入力候補の表示(1)
「partial」キーワード(部分クラスであることを示すキーワード)が選択されているので候補を絞り込む必要がある。

 「p」を入力した時点で入力候補が一覧表示されるとともに、ここでは[partial]キーワードが選択状態になっている。続けて、「r」を入力すると次のようになる。

IntelliSenseによる入力候補の表示(2) IntelliSenseによる入力候補の表示(2)
「pr」の2文字(と候補を確定させるキー)の入力だけで、「private」をスペルミスの心配なく入力できる。

 これにより[private]が選択状態になった。「private void SetDisplayTime()」と入力したいので、これは好都合だ。続けて「ivate」を入力してもよいが、[Tab]キー/[Enter]キー/[Space]キー/ピリオド/セミコロンなどを押すことで選択されている入力候補が確定される(このような動作をする状態のことを「完了モード」あるいは「標準の完了モード」と呼ぶ。IntelliSenseには「提案モード」あるいは「提案される完了モード」と呼ばれるモードがあるが、これについては後述する)。あるいは「IntelliSenseによる入力候補の表示(1)」の状態でカーソルキーを利用しても候補を選択できる(が、カーソルキーに手を伸ばすのが面倒という人の方が多いだろう)。

 [Space]キー/ピリオド/セミコロンで候補を確定した場合には、押したキーの内容が続けて自動的に入力される([Tab]キーと[Enter]キーの場合は、候補が確定するだけだ)。ここでは「private」に続けて半角スペース、そして「void」と入力を続けたいので、[Space]キーで候補を確定するのが一番オトクだ。

 なお、VS 2017では、ポップアップメニュー下部に絞り込みを効率的に行うためのボタンも表示されている(以下の画像の赤枠内)。

入力候補の絞り込みを行うためのボタン 入力候補の絞り込みを行うためのボタン

 このポップアップに表示される候補は、インタフェース/クラス/構造体/列挙型/デリゲート/名前空間/キーワード/スニペットなどのカテゴリーに分類されていて、上のボタンはそれぞれのカテゴリーに対応するようになっている。また、これらのボタンはトグル形式になっていて、どれかのボタンをクリックすると、それを候補に表示するかどうかが切り替わるようになっている。2つのボタンをオンにすれば、それら2つのカテゴリーに属する候補だけが表示されるといった具合だ。以下に例を示す。

キーワードだけで絞り込んだので、「private」と「protected」だけが候補として表示される キーワードだけで絞り込んだので、「private」と「protected」だけが候補として表示される

 例えば、上の画像では「private」というC#のキーワードを入力しようとしているところなので、[キーワード]ボタンを押して、このカテゴリーに属するものだけを候補として表示している。これにより、候補が「private」と「protected」の2つだけに絞り込まれるので、選択も簡単になる。

 絞り込みの話をもう少し続けよう。以下は、SetDisplayTimeメソッドの本体の入力時に、「ti」を入力した直後の状態だ。

IntelliSenseによる入力候補の表示(3) IntelliSenseによる入力候補の表示(3)
「timeNow」の隣にはこれがラベルコントロールであり、Displayクラスに含まれていることが分かるように情報が表示されている。このように、プログラムを入力していく上で必要な情報が適宜与えられるのもIntelliSenseを使う上での大きなメリットだ。

 入力候補の絞り込みが行われ「timeNow」が選択状態になったので、[Tab]キーなどを押して候補を確定すればよいのだが、前掲のリストによれば「timeNow.Text」と入力したいのでピリオドで候補を確定するのがここでは最適だ。ピリオドを押すと次のようになる(完了モードの場合)。

IntelliSenseによる入力候補の表示(4) IntelliSenseによる入力候補の表示(4)
これは候補が何も選択されていない状態。何かキー入力をすると、その内容に沿って候補が選択される。「timeNow.」に続くのはプロパティ、イベント、メソッドのいずれかなので、下にあるボタンがそれに応じたものになっていることにも注目。このように、IntelliSenseは、ユーザーが現在どんなコードを入力しているのか(コンテキスト=状況、文脈といった意味合い)を理解した上で適切と思われる入力候補を示してくれる。

 この後の詳細は省略するが、ここで「te」を押せば「Text」が選択状態になるので今度は[Space]キーを押すことでそのまま「=」記号の入力につなげられる。以降も同様だ。このようにわずかなキー入力だけでプログラムコード(ここでは「timeNow.Text = ……」)をスペルミスの心配なく入力できるのがIntelliSenseのよいところだ。また、候補を確定させると次はその候補が優先して表示/選択されるようになるので、必要なキーストロークはさらに減らせる。

 候補を確定させるのにどのキーを入力するかは、場合によって異なる。上でも見たように、次に入力するのが何かによって、オトクなキーが異なるのだ。最初のうち、使い分けは難しいが、慣れてくれば頭の中で何かを考えることなく、「メンバーや名前空間が続くときにはピリオド」「空白を置くときには[Space]キー」のように、コーディングの流れに沿ってIntelliSenseを使いこなせるようになっていくはずだ。

 なお、IntelliSenseは入力候補の記述だけではなく、メソッドのパラメーターに関するヒントの表示など、さまざまな部分でプログラミングの支援を行ってくれる。どんどん活用していこう。IntelliSenseの詳細についてはMSDNの「IntelliSense の使用方法」なども参照してほしい。

 ここまでに述べてきた内容は、「完了モード」あるいは「標準の完了モード」と呼ばれるモードでの動作だ。IntelliSenseにはもう1つ、「提案モード」あるいは「提案される完了モード」と呼ばれるモードがある(余談だが、「完了」とは「completion」の日本語訳だが、どちらかといえば「補完」という訳語の方が適切だろう)。

 完了モードでは[Tab]キー以外に[Space]キーや[Enter]キー、ピリオドなどを入力した時点でIntelliSenseが提案した語が自動的にコードエディタに入力されるが、提案モードでは[Tab]キーを押して候補を明示的に選択した場合にのみコードエディタに入力が行われる点が異なる。[Space]キーや[Enter]キー、ピリオドなどを入力した場合には、そこまでにプログラマーが入力した内容だけがコードエディタに入力される。例えば、提案モードで上述した「ti」→ピリオド(.)という入力を行うと、コードエディタには次のように入力が行われる。

提案モードで「ti.」というキーストロークを入力すると、補完が行われずに、それがそのままコードエディタに入力される 提案モードで「ti.」というキーストロークを入力すると、補完が行われずに、それがそのままコードエディタに入力される

 つまり、提案モードではIntelliSenseはあくまでも「提案」をするだけで、それを取り入れるかどうかはプログラマーが明示的に[Tab]キーを押すか押さないかで決まるということだ。一方の(標準の)完了モードはプログラマーのキーボード入力の流れをなるべく邪魔しないモードといえる(キーボード入力の流れはプログラマーの思考の流れに直結しているので、これを邪魔しないようにすることはVS 2017のようなIDEでは不可欠な要素だ)。また、IntelliSenseによるコード補完は強力だが、逆に邪魔になることもある。そうした場合には提案モードにすることで、IntelliSenseの動作をある程度抑制できる。

 なお、2つのモードの切り替えには[Ctrl]+[Alt]+[Space]キーを押す。あるいはメニューバーから[編集]−[IntelliSense]−[完了モードの切り替え]を選択するか、[テキスト エディター]ツールバーの[提案される完了モードと標準の完了モードを切り替えます]ボタンを押す。いずれの方法でも、トグル式に切り替えが行われる。どちらのモードかは[テキスト エディター]ツールバーの[提案される完了モードと標準の完了モードを切り替えます]ボタンがオン(提案モード)かオフ(完了モード)かで見分けられる。

[テキスト エディター]ツールバーの[提案される完了モードと標準の完了モードを切り替えます]ボタン(赤枠内。オンになっているので、今は提案モードになっている) [テキスト エディター]ツールバーの[提案される完了モードと標準の完了モードを切り替えます]ボタン(赤枠内。オンになっているので、今は提案モードになっている)

 次にかっこの自動挿入とクイック操作アイコンによる支援について見てみよう。

       1|2 次のページへ

Copyright© 1999-2017 Digital Advantage Corp. All Rights Reserved.

@IT Special

- PR -

TechTargetジャパン

この記事に関連するホワイトペーパー

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。