インテリセンス

**インテリセンス** () は、Microsoft Visual Studio の統合開発環境で使用されている、マイクロソフトによる自動補完システム。インテリセンスはプログラマが入力中のシンボル名を補完するだけでなく、メタデータベースのリフレクションを用いることにより、変数名、関数名、メソッド名のドキュメント化と曖昧性の解消に役立つ。

## メリット
他の自動補完システムと同様に、インテリセンスは関数の仕様、特に引数リストを確認する便利な方法である。数多くの名前を覚えてキーワードを入力する必要性を減らすことによりソフトウェアの開発を効率化する。コーディング中においてシンボル（つまり変数と関数）をインタラクティブにドキュメント化し動的にツールチップを表示できるため、外部のドキュメントを参照する頻度を減らせる。

インテリセンスは、クラス名や変数名および開発中のアプリケーションで定義または参照している構文を、オンメモリ上のデータベースに格納し、これを参照する。インテリセンスの古い実装では、言語に応じてピリオドなどのキャラクタをマーカーキャラクターとして認識して動作する。ユーザーがメンバ（変数や関数）を持つエンティティの直後にマーカーキャラクタをタイプすると、インテリセンスが推定される候補をポップアップウィンドウに表示する。ユーザーは又はまたはC++のセミコロンのような言語固有のマーカーをタイプすることにより候補を確定して自動的に補完させるか、また補完したくなければ名前の入力を継続できる。いずれにしてもインテリセンスはユーザーに十分な情報を提供してユーザーが望んでいる変数や関数を確定する。言語がオブジェクト指向をサポートしている場合はオーバーロードされた関数を選べる。インテリセンスは関数の概略をポップアップウィンドウに表示できる（この機能はソースコードに埋め込まれたドキュメントの量に依存する）。

## 非MS製品

Visual Studio 以外のテキストエディタにも同様の機能がある。たとえばVimのバージョン7.0はインテリセンスに似た*オムニ補完*をサポートしている。多くのエディタやIDE（たとえばUltraEdit）ではctagsを利用して同様の機能を実現している。ボーランドやサン・マイクロシステムズのIDEでは内部のリフレクションデータベースを使用して実装されている。

## 歴史
インテリセンスが初めて登場したのは、1996年にマイクロソフトの主力製品として販売されたVisual Basic 5.0 Control Creation Edition（実質的に公的に入手可能なVisual Basic 5.0のプロトタイプ）の一機能としてである。元々はVisual BasicのIDEが新技術の主要な実験場であったが、（Visual Basicの直後に販売された）Visual Studio 97の製品リリースに合わせてインテリセンスはVisual FoxProとVisual C++に直ちに移植された。インテリセンスはCOMのイントロスペクションの機能を活用したものであったが、Visual C++の5.0や6.0（Visual Studioとしてはそれぞれ97と98）ではその機能が不完全であった。

一方、Visual Basic版のインテリセンスはVisual C++版よりも完成されており安定していた。97のリリース以降数多くのVC++の開発者に批判されていたこれらの欠点は.NET以後大幅に改善された。たとえば今では完全になったテンプレートのサポートは.NET以前のバージョンで最も求められていたものの一つであった。

.NET Frameworkが提供しているパワフルなイントロスペクションとコードのドキュメント化機能により、2002年にリリースされたVisual Studio .NETでインテリセンスは新時代に突入した。インテリセンスはバージョン2013現在、Visual Studio上でC/C++、C#、J#、Visual Basic (VB.NET)、F#、JavaScript (JScript)、XML、HTML、XSLT、CSSをサポートしている（J#はバージョン2005まで）。Visual Studio 2005ではインテリセンスはユーザーがタイプした時点でデフォルトで有効になっており、マーカーキャラクタは不要である（この動作は無効にできる）。このIDEは、開発者の入力の状態に応じて、`for`や`while`といった言語の基本的な構文をも選択肢に含むところまで状況を推測できる。

他にもFrontPage、Expression Web（コードビューの部分）、Microsoft OfficeのVBA のIDEといったマイクロソフトの製品にインテリセンスが搭載されている。SQL Server 2008 Management StudioではSQL構文の補完に使用できるようになる予定である。

C++マネージ拡張の後継・改良版として、Visual Studio 2005で追加されたC++言語拡張であるC++/CLI言語のインテリセンスは、Visual Studio 2005, 2008で対応していたものの、Visual Studio 2010では（C++0x対応やクラスウィザードなどのネイティブ主要機能が優先されたため）いったん削除され、非対応となった。その後、次期バージョンで対応するというアナウンスどおり、Visual Studio 2012で完全復活した。なお、Visual Studio 2012には、WinRT向けの新たな言語拡張であるC++/CXのインテリセンスも搭載されている（C++/CXとC++/CLIは同一コード中に共存できない）。

また、Python/IronPythonに対応するPython Tools for Visual Studioなどのように、Visual Studioのインテリセンスを拡張して追加の言語サポートを行なうサードパーティ製のライブラリ・アドオンも存在する。

## 例
これはVisual Studioで開発しているC++で記述されたアプリケーションであり、クラス`Foo`にはいくつかのメンバ関数がある。


```cpp
class Foo {
  public:
    void bar();
    void foo_bar(char c, int n);
};
```


たとえば開発者が次のようにこのクラスを参照すると、

```
Foo foo;
foo.
```

ユーザーが*<code>foo</code>*に続けてピリオドを入力すると、インテリセンスが自動的に利用可能なメンバ関数をすべて列挙する（この場合は`bar()`と`foo_bar()`）。ユーザーは矢印キーで関数を選択して補完できる。インテリセンスはソースコード上のコメントに記されたメンバ関数の概略を表示する。

引数の入力時は、さらにもう一つのポップアップウィンドウが開き引数のリストが表示される。ユーザーが変数名を入力するとさらに入力した変数の補完候補が現れる。インテリセンスは引数の表示を継続し、ユーザーが入力している引数を強調表示する。

ユーザーは状況にかかわらず+を押すことによりインテリセンスを強制的に起動できる。Visual Studioの場合これは開発中のアプリケーション上で利用できるすべてのグローバルなオブジェクトを表示する。

## 脚注

## 外部リンク
* Microsoft Channel9 Video: インテリセンスを理解する
* [MSDNのインテリセンスについての概要](http://msdn2.microsoft.com/en-us/library/hcw1s69b(vs.71).aspx)
* Red GateのSQLプロンプトはSQL Serverと似た機能を提供する