VS 2008でWeb開発者に非常に喜んで頂けるだろう機能の1つがビルドインされたJavaScriptインテリセンスです。これは無料のVisual Web Developer 2008 ExpressエディションでもVisual Studioでも有効になっており、JavaScriptの使用とAJAXアプリケーションの構築を非常に簡単に行うことができます。
以下で、この新しいJavaScriptインテリセンスの機能の活用方法を簡単に見てみます。:
JavaScript 型の推測
スクリプトブロックでタイプを開始した時にすぐ気付かれると思いますが、Visual Studio 2008ではJavaScriptキーワードと言語機能がよりリッチにサポートされています。:
JavaScriptは動的言語で、明確に型の定義をサポートしていないため、以前は上手くインテリセンスを実行させることが難しかったのです。
Visual Studio 2008は型の推測のサポートを追加したので、JavaScriptブロックがどのように使用されるかを評価、計算し、動的に変数の使用方法やコードの型情報を推測して正確なインテリセンスのサポートを提供します。
例えば、以下のようにVisual Studioはdocument.getElementById()メソッドで取得されるHTML要素をを推測します。:
もし後で数値を"myElement"変数に割り当てた場合(JavaScriptでは数値に変換される)、VSではどのようにこれを検知し後でメソッド内でその変数にIntegerのインテリセンスを提供するのかをご確認ください。:
外部JavaScriptライブラリのインテリセンス
VS 2008がインテリセンスをサポートしているのはインラインスクリプトだけではなく、外部の参照JavaScriptファイルもサポートしています。例えば、以下のように"Util.js"のJavaScriptファイルで定義されている"getMessage"関数があると仮定します。:
単純に標準のJavaScriptスクリプトの参照要素をページに追加すると、その後自動的にそれをサポートしたインテリセンスをコードを書いた時に受け取ることができます。:
VSが自動的に基本のパラメータのインテリセンス情報をメソッド上に提供しているのがお分かり頂けると思います。これを表示させるためにJavaScriptに特に何かを行う必要はありません。:
JavaScriptにインテリセンスのヒントを追加
上記でご覧頂いたように、Visual Studioは自動的にメソッド名や標準のJavaScriptのパラメータに対する基本のインテリセンス ヘルプ情報を提供します。
オプションとしてこのインテリセンスをよりリッチにすることができます。方法は、JavaScriptコードにコメントを追加すると、インテリセンスエンジンがそれを拾って、メソッドやライブラリを消費する際に使用します。例えば、util.jsファイルにあるgetMessage機能に以下のようなコメントを追加することができます。:
そして"Default.aspx"ファイルでそれに対してコードを書くと、Visual Studioは自動的にそのメソッドに対してこのサマリ情報をを表示します。
そしてパラメータの詳細もです。:
アプリケーションを構築し終えるとJavaScriptのコメントを自動的に取り出す(スペースとサイズを圧縮して)ことができるツールを提供しています。VSおよびASP.NET AJAXの両方をサポートしたコメントの書式についての詳細はBertrand Le Royの投稿をここでお読みください。
外部JavaScriptファイル内でのインテリセンス
お分かりの通り、外部JavaScriptファイルで完全なインテリセンスサポートを得ることができます。まさに.htmや.aspxファイル内のスクリプトブロックと同じです。
外部JavaScriptファイルの興味深い性質の1つが、ページがロードした他のJavaScriptファイルにあるJavaScript関数やそれらで宣言された変数を呼び出して使用することができることです。
例えば、もし次のようにページ上で2つ外部JavaScriptファイルの参照を宣言しているとすると:
"MyLibrary.js"JavaScriptファイル内のJavaScriptコードはUtil.jsファイル内で宣言されたメソッドを呼び出すことができます。
外部ライブラリの一番上で/// <reference>コメントを追加することで"MyLibrary.js"ファイル内で"Util.js"ライブラリに対してインテリセンスを提供するようにVisual Studioに伝えることができます。これを一度行うとこれらのメソッドや変数に対する完全なインテリセンスサポートが得られるようになります。:
これは複数のファイルに渡るJavaScriptのルーチンを分割する時に非常に有用なものとなります。
ASP.NET AJAXクライアントサイドJavaScriptライブラリを参照するためには、<reference>を追加して.JSファイル(それを手動でプロジェクトに追加している場合)にポイントする方法、もしくはホストページ上で<asp:scriptmanager>コントロールによってライブラリが動的に出力される場合に<reference>要素をnameの値と共に追加する方法のどちらでも行うことができます。:
これを一度行えば、全てのJavaScriptライブラリとASP.NET AJAX内の型ライブラリパターンに対して完全なインテリセンスを得るようになります。
ASP.NET AJAXを使用してWebサービスを呼び出す
ASP.NET AJAXはクライアントサイドのJavaScriptから呼び出されてアクセスされるサーバ上のメソッドを簡単に公開できるようにします。例えば、以下のように.asmxのWebサービスで簡単なWebメソッドを定義したと仮定します。:
そうすればASP.NET AJAXに自動的にクライアントサイドのJavaScriptプロキシオブジェクトを作成させることができます。そのオブジェクトはJSONプロトコルを使用して、以下の様にページ内で<asp:scriptmanager>コントロールでWebサービスへの参照を追加することでクライアントからそれを呼び出し使用します。:
VS 2008でかっこいいところは、<asp:scriptmanager>コントロールを上記のように使用してWebサービスへの参照を宣言した時に、それに対してクライアントのJavaScriptインテリセンスのサポートを自動的にページ内に追加するところです。:
お分かりの通り、これによりサーバ上のメソッドをより簡単に確認し、非同期でそれらを呼び出し、発生させることができるようになります。これを使用してクライアントとサーバ間で両方のデータ交換ができます。またここに書いているAJAX UIのテンプレート技術を使って、これらのコールバックを使用してサーバからのHTML UIを取得し動的にページを更新することができます。
再利用可能なASP.NET AJAXの動作、コントロール、ライブラリを作成
ASP.NET AJAXは、クラス、インターフェイス、その他のオブジェクト指向概念を定義する際にJavaScript内で型システムサポートを提供しています。これにより機能をカプセル化して、(そのJavaScriptが他のJavaScriptやライブラリと衝突するかどうか心配する必要なく)ページやアプリケーションを渡って安全にそれを再利用するJavaScriptの再利用可能なライブラリを非常に簡単に定義することができるようになります。
VS 2008は新しいASP.NET AJAXの動作、コントロール、ライブラリを簡単に作成できる新しい"追加項目"テンプレートを提供しています。:
ASP.NET AJAXはJavaScript内で"prototype"パターンを使用してクラスやインターフェイスが定義できるようにしています。例えば、上記のプロジェクト項目テンプレートの1つでこのパターンを使用してカプセル化されたJavaScriptクラスを作成することができます。(以下をご覧頂くと、Visual Studioがデフォルトで作成した名前空間が私のプロジェクトの名前空間と同じであることがお分かり頂けると思います。):
お分かりのように、そうするとすべてのページまたは他のJavaScriptファイルからの新しいライブラリを消費している時に完全なインテリセンスのサポートが取得されます。:
まとめ
上記のチュートリアルがまもなく公開される新しいJavaScriptインテリセンスの機能についていくつかご紹介できていればと思います。(もっとありますが、ここから始めます。)今後のブログ投稿で、VS 2008で公開される新しいJavaScriptのデバッグ機能やASP.NET AJAXおよびASP.NET AJAXのコントロールツールキットへのWYSIWYGデザイナサポートのいくつかをカバーしたいと思います。
ASP.NET AJAXの詳細(そして、ASP.NET 2.0で本日から開始されている上記で記述したランタイム機能全ての利用方法)については、最近発売されたオフィシャルなASP.NET AJAX1.0リリースがカバーされたこれらの新しい2つの本をお読み頂くことも、大いにお勧めしたいと思います。:
新しいVS 2008 マルチターゲティングサポートがあるため、.NET 3.5(ASP.NET AJAXがビルドインされた)でビルドされたASP.NETアプリケーションおよび既存のASP.NET2.0のアプリケーション(別のASP.NET AJAX1.0ダウンロードを使用したものを含む)の両方で上記でご紹介したJavaScriptインテリセンスの機能を利用することができます。これは、たとえ.NET2.0アプリケーションのみをターゲットとして使用している人でさえ、VS 2008を使い始める非常にいい理由となると思います。
Hope this helps,
Scott