.NET TIPS

My拡張をパッケージ化して再利用するには?[VS 2008、VB]

デジタルアドバンテージ 一色 政彦
2009/07/30

 「TIPS:My機能を拡張して独自の機能を追加するには?」や「TIPS:既存のMy機能のオブジェクトを拡張するには?」で説明したように、VB(Visual Basic)のMy機能は独自に拡張できる。そして、拡張したMy機能(以降、My拡張)は、パッケージ化して再利用できる。さらにVisual Studio 2008には、パッケージ化したMy拡張を管理するための機能が搭載されている。

 そこで本TIPSでは、My拡張をパッケージ化して再利用する方法を紹介する。

■1. My拡張の作成

 まずは、My拡張を作成する。作成方法は、冒頭に掲げた2つのTIPSを参考にしてほしい。

 注意点としては、専用のファイルを作成し、パッケージ化したいMy拡張をその中に記述することだ。例えば本稿では、「MyAtmarkitExtention.vb」というファイルを作成し、その中に以下のコードを記述した。

Namespace My.Atmarkit.Saying

  <Global.Microsoft.VisualBasic.HideModuleName()> _
  Friend Module SayingModule

    ReadOnly Property Hello() As String
      Get
        Return "Hello My.Atmarkit !"
      End Get
    End Property

  End Module

End Namespace
MyAtmarkitExtention.vbファイルに記述したMy拡張のコード
この例では、「My.Atmarkit.Saying.Hello」というプロパティを実装している。

■2. My拡張ファイルの項目テンプレート化

 次に、My拡張のファイル(本稿では「MyAtmarkitExtention.vb」)をパッケージ化して、項目テンプレートを作成する。

 これにはまず、Visual Studioで開いているプロジェクト内のすべてのファイルが保存されている状態で、メニュー・バーから[ファイル]−[テンプレートのエクスポート]を選択する*1

*1 このメニュー項目が表示されない場合は、ツールバーの右クリック・メニューから[ユーザー設定]を選択し、表示されるダイアログの[コマンド]タブで該当のコマンドを見つけ出し、そこから表示したいメニュー・バーの位置にドラッグ&ドロップすればよい。

 これにより、[テンプレートのエクスポート ウィザード]が表示されるので、[項目テンプレート]ラジオボタンにチェックを入れ、[テンプレートの作成元のプロジェクトを指定してください]コンボボックスから適切なプロジェクトを選択し、[次へ]ボタンをクリックする。

[テンプレートの種類の選択]ページ

 すると、下に示すページが表示されるので、先ほど作成したファイル(MyAtmarkitExtention.vb)にチェックを入れ、[次へ]ボタンをクリックする。

[エクスポートする項目の選択]ページ

 次のページが表示されるので、My拡張で参照しているアセンブリにチェックを入れ(本稿の例ではチェックは不要)、[次へ]ボタンをクリック。

[項目参照の選択]ページ

 最後に、下に示すページが表示されるので、[テンプレート名]と[テンプレートの説明]を入力し(本稿の例では、順に「MyAtmarkitExtentiosn」「@IT/.NET TIPS で作成した My 拡張」を入力)、[テンプレートを自動的に Visual Studio にインポート]のチェックを外して[完了]ボタンをクリックする。

 また、この後、出力されたファイルを編集したいので、[出力ファイル フォルダにエクスプローラ ウィンドウを表示](日本語が少しおかしいが、「出力ファイルのフォルダをエクスプローラ・ウィンドウで表示」の意)のチェックは入れたままにしておく。

[テンプレート オプションの選択]ページ
[テンプレートを自動的に Visual Studio にインポート]は、テンプレート項目を[新しい項目の追加]ダイアログに表示したい場合にチェックする。今回はテンプレート項目を作成したいわけではないので、チェックは外す。

 以上で、パッケージ化された項目テンプレート(本稿の例では「MyAtmarkitExtention.zip」)が生成され、生成先のフォルダ(基本的には「%UserProfile%\Documents\Visual Studio 2008\My Exported Templates」)がWindowsエクスプローラで表示される。

■3. 項目テンプレートのMy拡張パッケージ化

 以上の作業で項目テンプレートが作成できたが、このままではVisual StudioはMy拡張パッケージとして取り扱ってくれない。My拡張パッケージにするには、次の2つの作業が必要だ。

  • MyTemplate.vstemplateファイルの編集
  • MyTemplate.customdataファイルの追加

●MyTemplate.vstemplateファイルの編集

 「MyTemplate.vstemplateファイル」は項目テンプレートとして生成された.zipファイルに格納されているので、これを取り出す。その際のツールは何を使ってもよいが、例えばWindows Vistaに付属のWindowsエクスプローラを使う場合は、次の画面のように.zipファイル(本稿の例では「MyAtmarkitExtention.zip」)をダブルクリックして開き、「MyTemplate.vstemplate」を選択してコピーし、任意のフォルダにペーストすればよい。

WindowsエクスプローラによるMyTemplate.vstemplateファイルの抽出

 そして、MyTemplate.vstemplateファイルに、次のコードの太字部分のコードを追記する。

<VSTemplate Version="2.0.0" xmlns="http://schemas.microsoft.com/developer/vstemplate/2005" Type="Item">
  <TemplateData>
    <DefaultName>MyAtmarkitExtention.vb</DefaultName>
    <Name>MyAtmarkitExtention</Name>
    <Description>@IT/.NET TIPS で作成した My 拡張</Description>
    <ProjectType>VisualBasic</ProjectType>
    <SortOrder>10</SortOrder>
    <Icon>__TemplateIcon.ico</Icon>

    <!-- テンプレート項目としては非表示にする設定 -->
    <Hidden>true</Hidden>

    <!-- My拡張として取り扱わせる設定 -->
    <CustomDataSignature>Microsoft.VisualBasic.MyExtension</CustomDataSignature>

  </TemplateData>
  <TemplateContent>
    <References />
    <ProjectItem SubType="Code" TargetFileName="$fileinputname$.vb" ReplaceParameters="true">MyAtmarkitExtention.vb</ProjectItem>
  </TemplateContent>
</VSTemplate>
MyTemplate.vstemplateファイルに追記するコード

 なお、コメントなどで日本語を含める場合、ファイルの文字コードを「UTF-8(BOMなし)」として保存するよう注意してほしい。

●MyTemplate.customdataファイルの追加

 一方、MyTemplate.customdataファイルは.zipファイルには含まれていないので、自分で新規作成する必要がある。

 具体的には、「MyTemplate.customdata」という名前(実際には名前は任意)のテキスト・ファイルを新規に作成し、下記のコードを記述する。こちらも、ファイルの文字コードを「UTF-8(BOMなし)」として保存するよう注意すること。

<VBMyExtensionTemplate
    ID="MyAtmarkitExtention"
    Version="1.0.0.0" />
MyTemplate.customdataファイルに記述するコード

 .customdataファイルは、一般的なテンプレート項目には用意されていない独自データ(=カスタム・データ)を含めるためのもので、ここでは<VBMyExtensionTemplate>タグによりMy拡張に特有のデータを含めている。

 <VBMyExtensionTemplate>タグのID属性には、My拡張を一意に識別するためのIDを指定する。これは必須だ。

 Vesrsion属性には、バージョン番号を指定する。こちらも必須。

 今回は不要なので指定していないが、AssemblyFullName属性はこのMy拡張を有効化するトリガ(=きっかけ)となるアセンブリ名(例えば「System.Windows.Forms」など)を指定する。これを指定しておくと、該当アセンブリをプロジェクトに追加/削除するときに、このMy拡張も追加/削除するかを開発者に問い合わせるようになる。次の画面はその例。

アセンブリへの参照の追加時に、My拡張の追加を問い合わせるダイアログ

●My拡張パッケージの作成

 最後に、上記の2つのファイルを元の.zipファイルの中に格納する。Windowsエクスプローラであれば、先ほどと逆の作業を行うだけだ。「MyTemplate.vstemplate」と「MyTemplate.customdata」の2つのファイルをコピーしたら、.zipファイル(本稿の例では「MyAtmarkitExtention.zip」)をダブルクリックして開き、そこにペーストすればよい。

 これでMy拡張パッケージは完成だ。

■4. Visual StudioでのMy拡張パッケージの利用

 それでは、作成したMy拡張パッケージ「MyAtmarkitExtention.zip」を、Visual Studioで使えるようにしてみよう。Visual Studio 2008では、My拡張パッケージを(基本的に)下記のフォルダに配置する。

「%UserProfile%\Documents\Visual Studio 2008\Templates\ItemTemplates\」

 これで作成したMy拡張パッケージが利用できるようになった。

 Visual StudioのIDEを立ち上げ、VBのプロジェクトを作成してほしい。

 [ソリューション エクスプローラ]のプロジェクト項目を右クリックして、表示されるコンテキスト・メニューから[プロパティ]を選択する。プロジェクト・デザイナが表示されるので、次の画面のように[マイ拡張]タブを開き、[拡張の追加]ボタンをクリックする。

[マイ拡張]タブからのMy拡張の追加

 次の画面のダイアログが表示されるので、先ほど追加したMy拡張の項目を選択して[OK]ボタンをクリックすれば完了だ。

[Visual Basic My Namespace 拡張の追加]

 以上で、コード・エディタでMy拡張が再利用できる。IntelliSenseも有効である。End of Article

カテゴリ:Visual Basic 2008 処理対象:My機能

この記事と関連性の高い別の.NET TIPS
My拡張パッケージを配布するには?
既存のMy機能のオブジェクトを拡張するには?
My機能を拡張して独自の機能を追加するには?
C#からVBのMy機能を利用するには?
拡張メソッドを作成するには?[C#/VB]
このリストは、(株)デジタルアドバンテージが開発した
自動関連記事探索システム Jigsaw(ジグソー) により自動抽出したものです。
generated by

「.NET TIPS」


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 記事ランキング

本日 月間