特集:初めてのVisual Studioアドイン(前編)

開発環境Visual Studioをカスタマイズせよ!

株式会社NTTデータ
技術開発本部 ソフトウェア工学推進センタ
瀬下 真吾
2009/01/20
Page1 Page2 Page3 Page4

■第3章 アドイン・プロジェクトの中身を見てみよう

 本章では、アドイン・ウィザードを利用して作成したアドイン・プロジェクトの構成やアドインの内部動作について説明します。

●アドイン・プロジェクトの構成

 アドイン・ウィザードを利用して作成したアドイン・プロジェクトの構成は以下のようになっています。

図3-1 アドイン・プロジェクトの構成

要素 説明
参照設定  
  EnvDTE Visual Studioの機能拡張用のクラスを提供するライブラリ
  EnvDTE80 Visual Studio 2005で追加された、EnvDTEを機能拡張したライブラリ
  EnvDTE90 Visual Studio 2008で追加された、EnvDTE80を機能拡張したライブラリ
  Extensibility アドインの起動や終了など、各種のアドイン・イベントにアクセスするために必要なIDTExtensibility2インターフェイスを提供するライブラリ
  Microsoft.VisualStudio.CommandBars コマンドバー・コンポーネントを提供するライブラリ
  stdole プライマリ相互運用機能アセンブリ
AssemblyInfo.cs アセンブリにバージョン情報を設定するためのクラス
CommandBar.resx コマンドバーの表示に使用するリソースを定義したファイル
Connect.cs アドインの処理内容を実装するクラス
SampleAddin - For Testing.AddIn Visual Studioにアドインを登録するためのXML形式の設定ファイル(開発環境でアドインを実行する場合に使用する)
SampleAddin.AddIn Visual Studioにアドインを登録するためのXML形式の設定ファイル(本番環境でアドインを実行する場合に使用する)
表2-1 アドイン・プロジェクトの構成

 この中で特に重要なのは「.AddInファイル」と「Connect.csファイル」です。それぞれの中身がどうなっているのか、詳しく説明していきます。

●.AddInファイルについて

 アドイン・プロジェクトには、「.AddIn」という拡張子の付いたファイルが2つ存在しています。どちらもVisual Studioにアドインを登録するためのXML形式の設定ファイルです。2つあるのは、開発環境と本番環境で使い分けるためです。

 この設定ファイルには、アドイン・ウィザードで選択した項目が反映されています。

<?xml version="1.0" encoding="UTF-16" standalone="no"?>
<Extensibility xmlns="http://schemas.microsoft.com/AutomationExtensibility">
  <HostApplication>
    <Name>Microsoft Visual Studio</Name>
    <Version>9.0</Version>
  </HostApplication>
  <Addin>
    <FriendlyName>サンプルアドイン</FriendlyName>
    <Description>アドインのサンプルです。</Description>
    <AboutBoxDetails>このアドインに関する詳細は……省略……</AboutBoxDetails>
    <AboutIconData>000001000600202010……省略……</AboutIconData>
    <Assembly>C:\Documents and Settings\user\MyDocuments\Visual Studio 2008\Projects\SampleAddin\SampleAddin\bin\SampleAddin.dll</Assembly>
    <FullClassName>SampleAddin.Connect</FullClassName>
    <LoadBehavior>0</LoadBehavior>
    <CommandPreload>1</CommandPreload>
    <CommandLineSafe>0</CommandLineSafe>
  </Addin>
</Extensibility>
開発環境用のSampleAddin - For Testing.AddInファイル

 <Extensibility>要素内のタグの意味を以下にまとめました。

要素 必須 説明 アドイン・ウィザードとの対応
HostApplication
○
   
  Name
○
アドインを利用するアプリケーション・ホストの名前
・Microsoft Visual Studio
・Microsoft Visual Studio Macros
3. アプリケーション・ホストの選択
  Version
○
アドインを利用するアプリケーション・ホストのバージョン
・9.0:Visual Studio 2008
・8.0:Visual Studio 2005
3. アプリケーション・ホストの選択
Addin
○
   
  FriendlyName   アドインの名前 4. 名前および説明の入力
  Description   アドインの説明 4. 名前および説明の入力
  AboutBoxDetails   Visual Studioのバージョン情報に表示される、アドインの製品情報 6. バージョン情報に関する情報の選択
  AboutIconData   Visual Studioのバージョン情報に表示される、アドインのアイコンのバイナリ・データ 6. バージョン情報に関する情報の選択
  Assembly
○
アドインのバイナリの場所 なし
  FullClassName
○
アドインを実装したクラスの完全修飾名 なし
  LoadBehavior   ホスト・アプリケーションの開始時にアドインを読み込むか&コマンドライン・ビルドで使用できるようにするか
・0:読み込まない&使用できない
・1:読み込む&使用できない
・4:読み込まない&使用できる
・5:読み込む&使用できる
5. アドイン・オプションの選択
「ホスト アプリケーションの開始時にアドインを読み込む」
「アドインでモーダルUIを表示せずに、コマンドライン ビルドで使用できるようにする」
  CommandPreload   アドインをプリロードしてメニュー項目などのUIを作成するか
・0:プリロードしない(作成しない)
・1:プリロードする(作成する)
5. アドイン・オプションの選択
「[ツール] メニュー項目を作成する」
  CommandLineSafe   コマンドライン・ビルドで使用できるようにするか
・0:使用できない
・1:使用できる
5. アドイン・オプションの選択
「アドインでモーダルUIを表示せずに、コマンドライン ビルドで使用できるようにする」
表2-2 .AddInファイルの構成

【参考】 MSDN:アドインの登録

●Connectクラス(Connect.cs)について

 Connectクラスは、アドインの処理内容を実装するためのクラスです。Connectクラスは次の2つのインターフェイスを実装しています。

  • IDTExtensibility2インターフェイス
    • アドインの読み込み時やアンロード時など、アドインに影響するイベントがVisual Studioで発生した際の処理を実行するメソッドを提供します。
  • DTCommandTargetインターフェイス
    • Visual Studioに追加したコマンドのステータスの表示/非表示、有効/無効などを決定したり、コマンドを実行したりするメソッドを提供します。

 これらのインターフェイスに含まれるメソッドは以下の表のとおりです。

メソッド 説明
OnConnection Visual Studioがアドインを読み込む際に呼び出される。Visual Studioにコマンドを追加する処理を実装する
OnDisConnection Visual Studioがアドインをアンロードする際に呼び出される。アドインのクリーンアップ処理を実装する
OnAddInsUpdate Visual Studioがアドインを読み込む際やアドインの設定が変更された際に呼び出される
OnStartupComplete Visual Studioがアドインの読み込みを終了した際に呼び出される
OnBeginShutdown Visual Studioが終了される際に呼び出される
表2-3 IDTExtensibility2インターフェイスのメソッド

メソッド 説明
Exec ユーザーがコマンドを実行した際に呼び出される。コマンド実行時の処理を実装する
QueryStatus Visual Studioの状態が変化する際に呼び出される。コマンドのステータスを設定する処理を実装する
表2-4 IDTCommandTargetインターフェイスのメソッド

 アドイン・ウィザードによってアドイン・プロジェクトのひな形を作成すると、ConnectクラスのOnConnectionメソッド、QueryStatusメソッド、Execメソッドには、次の処理内容が自動で実装されます。

メソッド 処理内容
OnConnection メニューバーの[ツール]に[SampleAddin]というコマンドを追加する
QueryStatusメソッド [SampleAddin]コマンドのステータスを「表示&有効」にする
Exec [SampleAddin]コマンドが処理されたことを呼び出し元に通知する
表2-5 アドイン・ウィザードによって自動で実装された処理内容アドインの内部動作

■アドインの内部動作

 アドインを実行した際の内部動作について説明します。

 デバッグ実行を開始すると、Visual Studioの起動が開始され、最初にOnConnectionメソッドが呼び出されます。OnConnectionメソッドでは、Visual Studioのメニューバーの[ツール]に[SampleAddin]コマンドを追加する処理が実行されます。その後、OnDisConnectionメソッドが呼び出されますが、ひな形コードでは特に処理を行いません。

 Visual Studioの起動後に、ユーザーがコマンドを実行すると、再びOnConnectionメソッドが呼び出されますが、ここではコマンドを追加する処理は実行されません。その後、Query Statusメソッドの呼び出しが有効になります。有効になると、それ以降にVisual Studioでさまざまなイベント(画面状態変化、マウスやキーボード操作など)が発生するたびにQuery Statusメソッドが呼び出されます。Query Statusメソッドでは、[SampleAddin]コマンドのステータスを「表示&有効」にする処理が実行されます。最後に、Execメソッドが呼び出されます。Execメソッドでは、メッセージボックスを表示する処理が実行されます。

 Visual Studioの終了を開始すると、OnBeginShutdownメソッドとOnDisConnectionメソッドが呼び出されますが、ひな形コードでは特に処理を行いません。

図3-2 アドインの内部動作

■

 いかがでしたか? 今回はVisual Studioにおける機能拡張の全体像や簡単なアドインの作成方法とその中身について解説しました。

 次回はコマンドを右クリック・メニューに表示させたり、条件によってコマンドのステータスを変更したりするなど、アドインの少し高度な拡張方法について紹介し、さらに作成したアドインの配布方法を解説する予定です。どうぞお楽しみに。End of Article


 INDEX
  [特集]初めてのVisual Studioアドイン(前編)
  開発環境Visual Studioをカスタマイズせよ!
    1.Visual Studioの機能を拡張する3つの方法
    2.アドインを作成してみよう
    3.アドインを実行してみよう
  4.アドイン・プロジェクトの中身を見てみよう
 
  [特集]初めてのVisual Studioアドイン(中編)
  Visual Studioアドインを実装しIDEで使う!
    1.コンテキスト・メニューにコマンドを表示する
    2.コマンド実行時にXMLファイル編集画面を表示する
    3.コマンドをいろいろな場所に表示してみよう
 
  [特集]初めてのVisual Studioアドイン(後編)
  Visual Studioアドインを配布する!
    1.Visual Studioにアドインが登録される流れ/アドインの配布に必要な作業
    2.インストーラの作成手順


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Insider.NET 記事ランキング

本日 月間