Visual Studio スタート ページのカスタマイズ
Elizabeth Murray and Jonathan Gordon
Visual Studio Team
Microsoft Corporation
February 2002
日本語版最終更新日 2002 年 7 月 22 日
要約 : この文書では、Microsoft® Visual Studio® .NET のスタート ページの構造の詳細と、新しいコンテンツを追加してスタート ページをカスタマイズする方法について説明します。この文書には、コンテンツの定義に使用する XML と共に 4 つの例が掲載されています。また、情報を取得し、スタート ページに表示するプロセスについても説明します。この文書を読むと、独自のカスタム コンテンツを作成して、Visual Studio のスタート ページに表示することができるようになります。
目次
はじめに
スタート ページの動作
カスタマイズしたコンテンツをスタート ページに追加する
カスタム コンテンツの例
スタート ページのコンテンツのテストとトラブルシューティングを行う
スタート ページのカスタム コンテンツを配置する
まとめ
はじめに
Visual Studio .NET のスタート ページは、統合開発環境 (IDE) を起動するたびに表示されます。既定のコンテンツには、最新の開発者ニュースの提供、新しいソリューション作成のサポート、およびオンライン開発者コミュニティとの対話を促進するための機能があります。
既定のコンテンツを補足するには、タブと呼ばれる新しいコンテンツを追加して、スタート ページをカスタマイズします。既定のコンテンツは保持されます。新しいコンテンツを追加することはできますが、既定のコンテンツをカスタマイズすることはできません。新しいコンテンツは、ダイナミック (動的) にすることもスタティック (静的) にすることもできます。ダイナミック コンテンツはサーバーから更新され、スタティック コンテンツはクライアントに格納されます。
この文書には、スタート ページの新しいコンテンツを作成し、既存のスタート ページのタブに追加する方法を示す例が掲載されています。
スタート ページの動作
スタート ページは IDE 内で使用可能な Web ブラウザに表示され、クライアント側の .htm ページ (この場合はタブの一覧を含む default.htm) で構成されます。これらのタブは、XML を使用して作成され、ローカルに格納されるタブ定義ファイルに基づきます。タブを選択すると、Visual Studio によって関連するタブ定義ファイルが読み込まれます。タブ定義ファイルにフィードがある場合、タブ定義ファイルで指定されたタブのコンテンツがサーバーからダウンロードされます。フィードがない場合は、タブ定義ファイルで指定されたスタティック コンテンツが表示されます。図 1 を参照してください。
図 1.
すべてのコンテンツは、変換されてスタート ページに描画される前に、クライアント側のスキーマ定義ファイル (vstab.xdr) によって検証されます。検証後、コンテンツは、クライアント側の変換、vshome.xsl を使用して HTML として描画されます。コンテンツが有効でなかった場合、タブはスタート ページに表示されません。タブが描画されるたびに、タブのコンテンツがローカルのコンピュータにキャッシュされます。コンテンツのフィードが使用できなくても、タブについて取得した最新のコンテンツを表示することができます。
タブ定義ファイルの形式
スタート ページのカスタム コンテンツは、XML を使用して記述されるタブ定義ファイルで定義されます。タブ定義ファイルには、1 つ以上のタブを含めることができます。カスタム コンテンツをスタート ページに表示するには、その定義に使用する XML が、vstab.xdr 内のスタート ページの XML スキーマと一致している必要があります。
注 : この文書で使用している会社、組織、製品、ドメイン名、電子メール アドレス、ロゴ、人物、キャラクタ、場所、データなどの名称は架空のものです。実在する名称とは一切関係ありません。
スタート ページの基本的なタブ定義ファイルの XML 要素および属性は次のとおりです。
<TabDefinition>
<Tab ID="<一意の名前>" Name="<表示名>">
<Application ID="<一意の名前>">
<PaneSet ID="<一意の名前>">
<Pane ID="<一意の名前>" Title="<表示名>">
<LinkGroupSet ID="<一意の名前>">
<LinkGroup ID="<一意の名前>" Title="<表示名>">
</LinkGroupSet>
</Pane>
</PaneSet>
<Data>
<Context>
<Links>
<LItemEx>
<LItem ID="<一意の名前>" LinkGroup="<リンク グループ ID>"
URL="<URL パス>"> <表示テキスト> </LItem>
</LItemEx>
</Links>
</Context>
</Data>
</Application>
<Feeds>
<Feed>
<Source LCID="<ロケール>" URL="<URL パス>">
<Arg Name="<名前>"></Arg>
</Source>
</Feed>
</Feeds>
</Tab>
</TabDefinition>
基本的な要素と属性
次の要素および属性によって、タブ定義ファイルの基本的なフレームワークが提供されます。
- <TabDefinition></TabDefinition>
必須。ファイルのすべての子要素を含むルート要素です。 - <Tab></Tab>
必須。<TabDefinition> の子要素です。タブ定義ファイルには、少なくとも 1 つの <Tab> 要素が必要です。この要素は、ID、Name、および Filterable 属性を伴います。 - <Application></Application>
必須。<Tab> 要素の子要素で、タブのユーザー インターフェイスを定義します。この要素は ID 属性を伴います。 - ID 属性
必須。要素の一意の ID です。 - Name 属性
必須。要素の表示名です。 - Filterable 属性
任意。値 True または False を受け取ります。True の場合は、[フィルタ] ドロップダウン リストが表示され、選択したフィルタに基づいてタブのコンテンツがフィルタ処理されます。False の場合は、ドロップダウン リストが表示されず、コンテンツはフィルタ処理されません。
次のコードは、スタート ページの 2 つのカスタム タブ (Tab1 と Tab2) に関する情報が格納されているシンプルなタブ定義ファイルの例です。Tab1 にはフィルタ処理が可能なダイナミック コンテンツが表示され、Tab2 にはフィルタ処理されないスタティック コンテンツが表示されます。
<TabDefinition>
<Tab ID="MyTab" Name="Tab1" Filterable="true">
<Application ID="MyApp">
<!-- このセクションに UI 要素を入力します。-->
</Application>
<Feeds>
<!-- このセクションに Feeds 要素を入力します。-->
</Feeds>
</Tab>
<Tab ID="MyOtherTab" Name="Tab2" Filterable="false">
<Application ID="MyOtherApp">
<!-- このセクションに UI 要素を入力します。-->
<Data>
<--- このセクションに Data 要素を入力します。-->
</Data>
</Application>
</Tab>
</TabDefinition>
ユーザー インターフェイス要素
カスタム コンテンツのユーザー インターフェイスは、タブ定義ファイルの <Application> 要素内で定義します。タブの各ユーザー インターフェイスは、<PaneSet> または <Pane> のいずれかの要素を使用して定義します。
<PaneSet></PaneSet>
任意。サブタブ内の複数のペインにコンテンツを表示することを定義します。この要素は ID 属性を伴います。ペイン セットを表示する場合は、例 2 を参照してください。次の XML フラグメントは、サブタブ内の複数のペインを定義しています。
<Application ID="MyApp"> <PaneSet ID="MyPaneSet"> <Pane ID="MyPane1" Title="マイ ペイン 1"> <!-- このセクションに UI 要素を入力します。--> </Pane> <Pane ID="MyPane2" Title="マイ ペイン 2"> <!-- このセクションに UI 要素を入力します。--> </Pane> </PaneSet> </Application>
<Pane></Pane>
任意。1 つのペインにコンテンツを表示することを定義します。この要素は、ID および Title 属性を伴います。ペイン セットを表示する場合は、例 2 を参照してください。次の XML フラグメントは、1 つのペインを定義しています。
<Application ID="MyOtherApp"> <Pane ID="MyPane1" Title="マイ ペイン 1"> <!-- このセクションに UI 要素を入力します。--> </Pane> </Application>
<Pane> 要素内で、UI 要素を使用してコンテンツを表示することができます。
<Image></Image>
任意。ペインにグラフィックスを表示できます。この要素は、ID、Source、Height、Width、および AltText 属性を伴います。次に例を示します。
<Image ID="MyImage" Source="http://www.test-1.msn.com/warning.gif" Height="40" Width="40" AltText="マイ イメージ" />
<TextSpan></TextSpan>
任意。書式設定が可能なスタティック テキスト (静的テキスト) を表示します。<TextSpan> には、任意で <Break> 要素および <Image> 要素を含めることができます。この要素は、ID、FontFamily、および FontSize 属性を伴います。次の XML フラグメントはシンプルなテキスト スパンです。
<TextSpan ID="TextSpanSimple">これは、シンプルな TextSpan です。</TextSpan>
次の XML フラグメントは、書式設定されたテキスト スパンです。
<TextSpan ID="TextSpanFormatted" FontFamily="Tahoma" FontSize="14">これは、Tahoma、24pt の TextSpan です。</TextSpan>
次の XML フラグメントには、<TextSpan> 要素の一部として <Image> および <Break> 要素が含まれています。
<TextSpan ID="TestTextSpan"> <Image ID="TestSpanImage1" Source= "http://www.test-1.msn.com/warning.gif" Height="40" Width="40" AltText="スパン内のイメージ 1" />TextSpan 内のイメージ 1 のテキスト <Image ID="TestSpanImage2" Source= "http://www.test-1.msn.com/warning.gif" Height="40" Width="40" AltText="スパン内のイメージ 2" />TextSpan 内のイメージ 2 のテキスト <Break/> <Image ID="TestSpanImage3" Source="http://www.test-1.msn.com/ warning.gif" Height="40" Width="40" AltText="スパン内のイメージ 3" />TextSpan 内のイメージ 3 のテキスト </TextSpan>
<Break></Break>
任意。改行を挿入します。<HRule></HRule>
任意。水平線を表示します。<Title></Title>
任意。テキストを太字で表示します。次に例を示します。
<Title>これはタイトルです。</Title>
<Hyperlink></Hyperlink>
任意。ハイパーリンクを表示します。この要素は、ID、URL、および Relative 属性を伴います。次の XML フラグメントによって、Web サーバー
www.test-1.msn.com
上のイメージにリンクされます。<Hyperlink ID="TestHyperlink1" URL="http://www.test-1.msn.com/warning.gif">ハイパーリンク</Hyperlink>
次の XML フラグメントによって、MSDN ヘルプのトピックにリンクされます。
<Hyperlink ID="TestHyperlink2" Relative="1" URL="/ms.msdnvs.1041/vsintro7/HTML/vxoriWhatsNewInVisualStudio.htm"> ヘルプ トピックへのハイパーリンク</Hyperlink>
<LinkGroup></LinkGroup>
任意。<Pane> 要素内の LItem 要素のセットの配置を定義します。この要素は、ID および Title 属性を伴います。次に例を示します。
<LinkGroup ID="LG1" Title="マイ リンク グループ" /> <Data> <Context> <Attributes> <!-- このセクションに属性を入力します。--> </Attributes> <Links> <LItemEx> <LItem ID="LI1" LinkGroup="LG1" Image="http://www.test- 1.msn.com/warning.gif">マイ リンク グループの LItem</LItem> <Blurb>LItem を記述するテキスト</Blurb> </LItemEx> </Links> <Context> <Data>
<LinkGroupSet><LinkGroupSet>
任意。<LinkGroup> 要素のセットです。次に例を示します。
<LinkGroupSet> <LinkGroup ID="LG1" /> <LinkGroup ID="LG2" /> </LinkGroupSet>
ID 属性
必須。要素の一意の ID です。Title 属性
必須。要素の表示名です。Source 属性
必須。イメージの完全なパスまたは URL です。Height 属性
任意。イメージの縦の長さです。ピクセルで指定します。Width 属性
任意。イメージの横の長さです。ピクセルで指定します。AltText 属性
任意。ペインにイメージが表示されない場合に表示されるテキストです。FontFamily 属性
任意。MS UI Gothic や MS P Gothic など、テキストの表示に使用するフォントです。FontSize 属性
任意。フォントのサイズです。ポイントで指定します。URL 属性
必須。http:、https:、news:、ms-help:、または vs: で始まる Web の絶対 URL です。Relative 属性
任意。値 1 を受け取ります。この属性を使用すると、MSDN ヘルプに含まれるトピックの URL を指定できます。
Data 要素と Feeds 要素
タブ定義ファイルの <Data> 要素には、タブのコンテンツが含まれます。<Feed> 要素を使用すると、オフライン時にスタティック コンテンツを表示することができますが、インターネットに接続すると、サーバーにアクセスして引数を渡し、更新されたコンテンツを表示することもできます。
<Feeds></Feeds>
<Tab> の子要素で、タブに関するサーバー側のコンテンツをダウンロードする方法を定義します。<Feed></Feed>
Feeds 要素の子です。<Source></Source>
サーバーのコンテンツを指定します。LCID および URL 属性を伴います。<Arg></Arg>
Feed URL と共に追加の引数を渡します。Name 属性を伴います。次に例を示します。
<Feeds> <Feed> <Source LCID="1033" URL="http://myserver/myfeed.aspx"> <Arg Name="feedName">defaultFeed</Arg> </Source> </Feed> </Feeds>
このフィードによって、タブのコンテンツを取得するために URL、<http://myserver/myfeed.aspx?hasArgs=y&feedName="defaultFeed"&FeedLCID=1033&UserLang=en-us> が呼び出されます。
<Data></Data>
タブに表示されるスタティック コンテンツを含みます。<Context></Context>
フィルタ処理が可能な <LItem> 要素のグループを定義します。この要素は、<Attributes> および <Links> 要素を伴います。<Attributes></Attributes>
<Context> 要素内のコンテンツが、事前に定義されているヘルプのフィルタと相互作用するかどうかを示します。この要素は <AItem> 要素を伴います。<AItem></AItem>
<Context> 要素内のコンテンツが、事前に定義されているヘルプのフィルタと相互作用するかどうかを示します。この要素は、Name および Value 属性を伴います。<Links></Links>
任意。<LItemEx> および <LItem> の親要素です。<LItemEx></LItemEx>
任意。<LItem> 要素および任意の <Blurb> 要素を含む、属性を持たない親要素です。次に例を示します。
<LItemEx> <LItem ID="LI1" LinkGroup="LG1" Image="http://www.test-1.msn.com/warning.gif">テキストとイメージ付きの LItem</LItem> <Blurb>LItem を記述するテキスト</Blurb> </LItemEx>
<LItem></LItem>
必須。http、https、ms-help、mail、news など、イメージを含めることができるハイパーリンクです。この要素は、ID、LinkGroup、および Image 属性を伴います。<Blurb></Blurb>
任意。<LItemEx> 要素のスタティック テキストを含みます。ID 属性
必須。要素の一意の ID です。LCID 属性
任意。対象となる言語のロケール ID 番号です。言語 LCID 繁体字中国語 1028 ドイツ語 1031 英語 1033 フランス語 1036 イタリア語 1040 日本語 1041 韓国語 1042 簡体字中国語 2052 スペイン語 3082 URL 属性
必須。http:、https:、news:、ms-help:、または vs: で始まる Web の絶対 URL です。Image 属性
必須。イメージの完全なパスまたは URL です。LinkGroup 属性
任意。LItem が属する <LinkGroup> 要素の ID です。Name 属性
必須。Help 属性カテゴリの名前です。Value 属性
必須。Help 属性の値です。次に <Data> 要素の例を示します。
<Data> <Context> <Attributes> <AItem Name="DocSet" Value="Visual Studio" /> <AItem Name="Product" Value="VS" /> </Attributes> <Links> <LItemEx> <LItem ID="LI1" LinkGroup="LG1" URL=" http://www.test-1.msn.com/warning.gif" Image=" http://www.test-1.msn.com/warning.gif ">このリンクは、Visual Studio フィルタが適用された場合に表示されます。</LItem> <Blurb>リンクを記述するテキスト</Blurb> </LItemEx> </Links> </Context> </Data>
カスタマイズしたコンテンツをスタート ページに追加する
スタート ページをカスタマイズするには、スタティック コンテンツまたはダイナミック コンテンツを含むカスタム タブを追加します。スタート ページにその他の変更を行うこともできますが、Microsoft によるサポートの対象とはなりません。カスタム コンテンツを作成する際のその他の注意事項は次のとおりです。
- すべてのコンテンツが、スタート ページのスキーマ定義ファイル、vstab.xdr と一致している必要があります。一致していない場合は、コンテンツがスタート ページに描画されません。
- 現時点では、すべての UI やクライアント側のスクリプトをスタート ページで使用できるわけではありません。使用可能な UI は、リンク、テキスト、イメージなどに制限されています。
- スタート ページに表示されるタブの順序を変更することはできません。既定のタブ、カスタム タブ、[マイ プロフィール] タブの順に表示されます。
- Visual Studio で提供される既定のタブのコンテンツを変更することはできません。
カスタム コンテンツとセキュリティ
クライアント側のコンテンツは、コンピュータにローカルで格納されているファイルと同様に安全です。サーバーから送信されるコンテンツもクライアントに格納されているコンテンツも、スタート ページに描画される前に、スタート ページのスキーマと一致しているかどうかが検証されます。
サーバー上のコンテンツは HTTP によって送信されるので、クライアントに送信する前に、サーバー上のコンテンツを検証して、安全でないコンテンツがクライアントに返されないようにすることをお勧めします。例 4 では、serverFeed.xml によって返される XML を検証する ASP コードが serverFeed.asp に 含まれています。
function replaceBadURLs(xpath, xmlDocument)
{
var i = 0;
var regex = "^http:|^https:|^news:|^ms-help:|^vs:";
var nodes = xmlDocument.selectNodes(xpath);
for(i = 0 ; i < nodes.length ; i++)
{
if(!nodes.item(i).text.match(regex))
{
nodes.item(i).text = ";
}
}
}
パフォーマンスに関する考慮事項
スタート ページでのタブのコンテンツの描画に要する時間が適切であることを確認してください。タブの読み込みに時間がかかる場合、ユーザーがタブまたはスタート ページの使用を中止する原因となることがあります。
タブ定義ファイルで複数のイメージを参照している場合、タブ定義ファイルに大量のコンテンツが含まれている場合、およびサーバーのパフォーマンスが十分でない場合はすべて、タブの描画に時間がかかる原因となる可能性があります。実稼動環境にカスタム タブを配置する前に、必ずタブのパフォーマンスをテストしてください。
カスタム コンテンツの例
次のサンプルは、Visual Studio のスタート ページをカスタマイズする方法についてのアイディアを提供するためのものです。Visual Studio で XML ファイルにサンプル コードをコピーして貼り付ける場合は、[編集] メニュー の [HTML として貼り付け] を使用してください。スタート ページにこれらのサンプルを表示する方法の詳細については、「スタート ページのカスタム コンテンツを配置する」 を参照してください。
例 1、2、および 3 は、提供されている XML を変更しなくても配置および表示することができます。例 4 については、提供されている XML を変更する必要があります。タブを表示するために必要な変更の種類に関する指示がコメントとして記載されています。
例 1 : シンプルなタブ
この例では、スタティックなハイパーリンクを含む 1 つのタブが表示されます。2 つのハイパーリンクに説明テキストとグラフィックスが関連付けられていますが、残りの 2 つには関連付けられていません。
図 2. シンプルなタブ
この例を作成するために使用されている XML は次のとおりです。
<?xml version="1.0" encoding="UTF-8" ?>
<TabDefinition>
<Tab ID="simple_tab" Name="例 1 : シンプルなタブ" Filterable="false">
<Application ID="Simple_App">
<Pane ID="Main_Pane">
<TextSpan ID="Tab_Description" FontSize="16">例 1 --
シンプルなカスタム タブ</TextSpan><Break/>
<Break/>
<TextSpan ID="disclaimer">メモ : このサンプル タブのコンテンツ
およびコードはホワイト ペーパー「Visual Studio のスタート ページをカスタマイズ
する」の一部であり、Microsoft 製品サポート サービスによるサポートの対象では
ありません。</TextSpan>
<Break/>
<HRule/>
<LinkGroupSet>
<LinkGroup ID="WebSites" Title="グラフィックスとテキスト付きの
ハイパーリンク"/>
<LinkGroup ID="SearchEngines" Title="シンプルなハイパーリンクの
一覧"/>
</LinkGroupSet>
</Pane>
<Data>
<Context>
<Links>
<LItemEx>
<LItem ID="LI1" LinkGroup="WebSites"
Image="https://www.microsoft.com/library/homepage/../local/mslogo-blue.gif"
URL="https://www.microsoft.com">Microsoft</LItem>
<Blurb>Microsoft ホーム ページ</Blurb>
</LItemEx>
<LItemEx>
<LItem ID="LI2" LinkGroup="WebSites"
Image="https://msdn.microsoft.com/library/shared/toolbar/graphics/banners/
MSDN_banner.gif" URL="https://msdn.microsoft.com">MSDN</LItem>
<Blurb>Microsoft Developer Network</Blurb>
</LItemEx>
<LItemEx>
<LItem ID="LI3" LinkGroup="SearchEngines"
URL="http://search.microsoft.com">Microsoft の検索</LItem>
</LItemEx>
<LItemEx>
<LItem ID="LI4" LinkGroup="SearchEngines"
URL="http://search.microsoft.com/advanced_search.asp?siteid=us/dev">MSDN の
検索</LItem>
</LItemEx>
</Links>
</Context>
</Data>
</Application>
</Tab>
</TabDefinition>
例 2 : 複数のペインを含むタブ
この例では、[サイト]、[検索]、および [その他] の 3 つのペインを含む 1 つのタブが表示されます。各ペインにハイパーリンクがあります。
図 3. 複数のペインを含むカスタム タブ
この例を作成するために使用されている XML は次のとおりです。
<?xml version="1.0" encoding="UTF-8" ?>
<TabDefinition>
<Tab ID="tabbed_tab" Name="例 2 : 複数のペインを含むタブ"
Filterable="false">
<Application ID="Tabbed_App">
<PaneSet ID="Main_PaneSet">
<Pane ID="Sites_Pane" Title="サイト">
<TextSpan ID="SitesTab_Description" FontSize="16">例
2 -- 複数のペインを含むカスタム タブ</TextSpan><Break/>
<Break/>
<TextSpan ID="disclaimer">メモ : このサンプル タブのコンテンツ
およびコードはホワイト ペーパー「Visual Studio のスタート ページをカスタマイズ
する」の一部であり、Microsoft 製品サポート サービスによるサポートの対象では
ありません。</TextSpan>
<Break/>
<LinkGroup ID="WebSites" Title="グラフィックスとテキスト付きの
ハイパーリンク"/>
</Pane>
<Pane ID="Search_Pane" Title="検索">
<TextSpan ID="SearchTab_Description" FontSize="16">例
2 -- 複数のペインを含むカスタム タブ</TextSpan><Break/>
<LinkGroup ID="SearchEngines" Title="シンプルなハイパーリンク
一覧"/>
</Pane>
<Pane ID="Other_Pane" Title="その他">
<TextSpan ID="Tab_Description" FontSize="16">例 2 --
複数のペインを含むカスタム タブ</TextSpan><Break/>
<LinkGroup ID="OtherSites" Title="シンプルなハイパーリンクの一覧"/>
</Pane>
</PaneSet>
<Data>
<Context>
<Links>
<LItemEx>
<LItem ID="LI1" LinkGroup="WebSites"
Image="https://www.microsoft.com/library/homepage/../local/mslogo-blue.gif"
URL="https://www.microsoft.com">Microsoft</LItem>
<Blurb>Microsoft ホーム ページ</Blurb>
</LItemEx>
<LItemEx>
<LItem ID="LI2" LinkGroup="WebSites"
Image="https://msdn.microsoft.com/library/shared/toolbar/graphics/banners/
MSDN_banner.gif" URL="https://msdn.microsoft.com">MSDN</LItem>
<Blurb>Microsoft Developer Network</Blurb>
</LItemEx>
<LItemEx>
<LItem ID="LI3" LinkGroup="SearchEngines"
URL="http://search.microsoft.com">Microsoft の検索</LItem>
</LItemEx>
<LItemEx>
<LItem ID="LI4" LinkGroup="SearchEngines"
URL="http://search.microsoft.com/advanced_search.asp?siteid=us/dev">MSDN の
検索</LItem>
</LItemEx>
<LItemEx>
<LItem ID="LI5" LinkGroup="OtherSites"
URL="https://www.gotdotnet.com">GotDotNet</LItem>
</LItemEx>
<LItemEx>
<LItem ID="LI6" LinkGroup="OtherSites"
URL="https://msn.com">MSN</LItem>
</LItemEx>
</Links>
</Context>
</Data>
</Application>
</Tab>
</TabDefinition>
例 3 : スタティック コンテンツを含むタブ
この例では、スタティックなハイパーリンクを含む 1 つのタブが表示されます。2 つのハイパーリンクに説明テキストとグラフィックスが関連付けられていますが、残りの 2 つには関連付けられていません。
図 4. スタティック コンテンツを含むタブ
この例を作成するために使用されている XML は次のとおりです。
<?xml version="1.0" encoding="UTF-8" ?>
<TabDefinition>
<Tab ID="static_tab" Name="例 3 : スタティック コンテンツを含むタブ"
Filterable="false">
<Application ID="Static_App">
<Pane ID="Main_Pane">
<TextSpan ID="Tab_Description" FontSize="16">例 3 --スタティック
コンテンツを含むタブ</TextSpan><Break/>
<Break/>
<TextSpan ID="disclaimer">メモ : このサンプル タブのコンテンツ
およびコードはホワイト ペーパー「Visual Studio のスタート ページをカスタマイズ
する」の一部であり、Microsoft 製品サポート サービスによるサポートの対象では
ありません。</TextSpan>
<Break/>
<LItemEx>
<LItem ID="LI1" LinkGroup="WebSites"
Image="https://www.microsoft.com/library/homepage/../local/
mslogo-blue.gif" URL="https://www.microsoft.com">Microsoft</LItem>
<Blurb>Microsoft ホーム ページ</Blurb>
</LItemEx>
<LItemEx>
<LItem ID="LI2" LinkGroup="WebSites"
Image="https://msdn.microsoft.com/library/shared/toolbar/
graphics/banners/MSDN_banner.gif"
URL="https://msdn.microsoft.com">MSDN</LItem>
<Blurb>Microsoft Developer Network</Blurb>
</LItemEx>
<HRule/>
<LItemEx>
<LItem ID="LI3" LinkGroup="SearchEngines"
URL="http://search.microsoft.com">Microsoft の検索</LItem>
</LItemEx>
<LItemEx>
<LItem ID="LI4" LinkGroup="SearchEngines"
URL="http://search.microsoft.com/advanced_search.asp?siteid=us/dev">
MSDN の検索</LItem>
</LItemEx>
<HRule/>
</Pane>
</Application>
</Tab>
</TabDefinition>
例 4 : ライブ コンテンツを含むタブ
この例では、ハイパーリンク、グラフィックス、およびテキストを含む 1 つのタブが表示されます。タブのコンテンツは、サーバー上のタブ定義ファイルによって提供されます。サーバーから更新するコンテンツには 2 つの部分があります。該当するサーバーへのポインタを含むクライアント側のタブ定義ファイルと、XML を描画し、XML がスタート ページのスキーマと一致していることを確認するサーバー側のファイルです。
図 5. ライブ コンテンツを含むタブ
この例のコンテンツを表示するには、次の 3 つのファイルを作成する必要があります。クライアントのタブ定義ファイル (example4.xml)、サーバーのタブ定義ファイル (serverFeed.xml)、および XML の検証も行う、サーバーの .asp フィード ファイル (serverFeed.asp) です。また、example4.xml は、serverFeed.asp および serverFeed.xml が保存されている Web サーバーを参照するように変更する必要があります。
クライアント側のタブ定義ファイル : example4.xml
このクライアントの XML は、.asp ファイル、serverFeed.asp を参照します。この .asp ファイルは、XML で http://www.test-1.msn.com として参照される Web サーバーに保存されている必要があります。サーバーが使用できない場合、タブに "サーバーからコンテンツを読み込めません。" というメッセージが表示されます。
<?xml version="1.0" encoding="UTF-8" ?>
<TabDefinition>
<Tab ID="live_tab" Name="例 4 : ライブ コンテンツを含むタブ"
Filterable="true">
<Application ID="Live_App">
<Pane ID="Main_Pane">
<Break/>
<TextSpan ID="Tab_Description">サーバーからコンテンツを
読み込めません。</TextSpan>
</Pane>
</Application>
<Feeds>
<Feed>
<!-- サーバーの .asp ファイルが保存されている場所へのパスで、次の <Source>
要素の "http://www.test-1.msn.com/serverFeed.asp" を置換します。-->
<Source LCID="1033" URL="http://www.test-1.msn.com/
serverFeed.asp">
<Arg Name="feedName">defaultFeed</Arg>
</Source>
</Feed>
</Feeds>
</Tab>
</TabDefinition>
サーバー側のタブ定義ファイル : serverFeed.xml
この例では、サーバーの XML が、ホスト Web サーバーのルート ディレクトリに serverFeed.xml として保存されている必要があります。クライアントのタブ定義ファイルによって serverFeed.asp が呼び出されると、.asp ファイルは serverFeed.xml を参照します。
<?xml version="1.0" encoding="UTF-8" ?>
<TabDefinition>
<Tab ID="live_tab" Name="Live" Filterable="true">
<Application ID="Live_App">
<Pane ID="Main_Pane">
<Break/>
<TextSpan ID="Tab_Description" FontSize="16"> 例 4 -- ライブ
コンテンツを含むタブ</TextSpan> <Break/>
<Break/>
<TextSpan ID="disclaimer">メモ : このサンプル タブのコンテンツおよび
コードはホワイト ペーパー「Visual Studio のスタート ページをカスタマイズ
する」の一部であり、Microsoft 製品サポート サービスによるサポートの対象では
ありません。</TextSpan>
<Break/>
<HRule/>
<LinkGroupSet>
<LinkGroup ID="WebSites" Title="グラフィックスとテキスト付きの
ハイパーリンク"/>
<LinkGroup ID="SearchEngines" Title="シンプルなハイパーリンクの
一覧"/>
</LinkGroupSet>
</Pane>
<Data>
<Context>
<Links>
<LItemEx>
<LItem ID="LI1" LinkGroup="WebSites"
Image="https://www.microsoft.com/library/homepage/../local/mslogo-blue.gif"
URL="https://www.microsoft.com">Microsoft</LItem>
<Blurb>Microsoft ホーム ページ</Blurb>
</LItemEx>
<LItemEx>
<LItem ID="LI2" LinkGroup="WebSites"
Image="https://msdn.microsoft.com/library/shared/toolbar/graphics/banners/
MSDN_banner.gif" URL="https://msdn.microsoft.com">MSDN</LItem>
<Blurb>Microsoft Developer Network</Blurb>
</LItemEx>
<LItemEx>
<LItem ID="LI3" LinkGroup="SearchEngines"
URL="http://search.microsoft.com">Microsoft の検索</LItem>
</LItemEx>
<LItemEx>
<LItem ID="LI4" LinkGroup="SearchEngines"
URL="http://search.microsoft.com/advanced_search.asp?siteid=us/dev">MSDN の
検索</LItem>
</LItemEx>
</Links>
</Context>
</Data>
</Application>
</Tab>
</TabDefinition>
サーバー側の ASP : serverFeed.asp
次の VBScript では、[スタート ページ] タブのコンテンツとして serverFeed.xml ファイルが使用されます。ASP コードによって、スタート ページに有効な XML が返されるかどうかが確認されます。このファイルは、ホスト Web サーバーのルート ディレクトリに serverFeed.asp として保存されている必要があります。
<% @ CODEPAGE="65001" LANGUAGE="VBScript" %>
<% IF (Request.QueryString("feedName") = "defaultFeed") THEN
Response.ContentType = "Text/XML"
Response.Redirect "serverFeed.xml"
END IF
%>
<!-- この関数は、クライアントに返される URL が、スタート ページで使用する上で安全であるかどうかを確認します。-->
function replaceBadURLs(xpath, xmlDocument)
{
var i = 0;
var regex = "^http:|^https:|^news:|^ms-help:|^vs:";
var nodes = xmlDocument.selectNodes(xpath);
for(i = 0 ; i < nodes.length ; i++)
{
if(!nodes.item(i).text.match(regex))
{
nodes.item(i).text = ";
}
}
}
スタート ページのコンテンツのテストとトラブルシューティングを行う
カスタマイズしたコンテンツが予想どおりに表示されない場合は、次の手順を実行してください。
- Web ブラウザに .xml ファイルを表示して、エラーを解析するためにチェックする。
- この文書に記載されている要件をチェックし、タブ定義ファイルを vstab.xdr と比較する。コードがスキーマに対して有効でない場合、コンテンツは描画されません。
- Visual Studio で、このホワイト ペーパーのサンプルを .xml ファイルにコピーして貼り付ける際に、[編集] メニュー の [HTML として貼り付け] を使用する。[貼り付け] コマンドを使用すると、XML デザイナによって、スタート ページのスキーマと一致しないコードが追加される場合があります。
- Visual Studio を終了し、再起動する。[最新の情報に更新] コマンドを使用しても、サーバー側の .xml ファイルから送信されるタブのコンテンツによってスタート ページで更新が行われない場合があります。
スタート ページのカスタム コンテンツを配置する
カスタム タブのコンテンツは、クライアントおよびサーバーのタブ定義ファイルを使用して配置します。クライアントのカスタム タブ定義ファイルがスタート ページから認識されるには、コンピュータの特定の場所に格納されている必要があります。これらのファイル内の URL は、サーバーから返されるコンテンツを参照することができます。
コンテンツを頻繁に更新する場合は、サーバー側のフィードを使用してください。サーバーのコンテンツは、クライアントに影響を与えずに更新することができ、1 つのソースから複数のコンピュータへ定期的にコンテンツを送信することができます。スタート ページの [オンライン コミュニティ]、[ヘッドライン]、[ダウンロード] の各タブは、このように定義されています。コンテンツを頻繁に更新しない場合、またはまったく更新しない場合は、クライアント側のタブ定義ファイルのみでかまいません。スタート ページの [お使いになる前に] タブは、このようなタブの例です。
タブ定義ファイルは、ロケール固有のコンテンツで配置することもできます。この場合、コンピュータの地域設定に基づいて、複数の言語でカスタム タブを表示することができます。
スタート ページが表示されると、カスタム タブについてコンピュータ上の特定の場所が検索されます。タブ定義ファイルがこれらの場所で見つかると、タブ定義ファイル内のコンテンツがスタート ページに表示されます。タブが選択されると、クライアントのコンテンツが描画されます。サーバーのフィードが定義されている場合、サーバーのコンテンツがダウンロードされ、クライアントのコンテンツの代わりにスタート ページに表示されます。
クライアントにカスタム タブを配置するには
- <Visual Studio のインストール パス>\Common7\IDE\HTML\Custom\ ディレクトリを参照します。Custom ディレクトリがない場合は作成してください。
- タブ定義ファイル、*.xml をこのディレクトリにコピーします。
- Visual Studio .NET を起動し、スタート ページを表示します。タブ一覧の一番下付近にカスタム タブが表示されます。
カスタム タブが表示されない場合、XML にエラーがある可能性があります。詳細については、「スタート ページのコンテンツのテストとトラブルシューティングを行う」 を参照してください。
クライアントにロケール固有のカスタム タブを配置するには
<Visual Studio のインストール パス>\Common7\IDE\HTML\<ロケール ID>\Custom\ ディレクトリを参照します。\...\<ロケール ID>\Custom\ ディレクトリがない場合は作成してください。
英語の場合は、c:\Program Files\Visual Studio .NET\Common7\IDE\HTML\1033\Custom\ となります。
言語 ロケール ID 繁体字中国語 1028 ドイツ語 1031 英語 1033 フランス語 1036 イタリア語 1040 日本語 1041 韓国語 1042 簡体字中国語 2052 スペイン語 3082 タブ定義ファイル、*.xml を該当するロケールのディレクトリにコピーします。
サーバーから更新するコンテンツには 2 つの部分があります。該当するサーバーへのポインタを含むクライアント側のタブ定義ファイルと、XML を描画し、XML がスタート ページのスキーマと一致していることを確認するサーバー側のファイルです。これには、Web サーバーに配置されるシンプルな XML ファイルから完全な .NET アプリケーション、さらには XML を返すサーバー上の XML Web Services に至るあらゆるファイルが含まれます。たとえば、例 4 のように、XML タブ定義ファイルを参照する .asp ファイルを使用することができます。
サーバーにダイナミック コンテンツを配置するには
- クライアントのタブ定義ファイルの <Feed> セクションに、サーバー、アプリケーション パス、または出力ファイルを参照するポインタを含めます。
- <Visual Studio のインストール パス>\Common7\IDE\HTML\Custom\ ディレクトリを参照します。Custom ディレクトリがない場合は作成してください。
- タブ定義ファイル、*.xml をこのディレクトリにコピーします。
- サーバーにサーバー側のファイルがあることを確認します。
まとめ
この文書で説明したように、簡単に Visual Studio のスタート ページにカスタム コンテンツを追加し、そのコンテンツを複数のコンピュータに配置することができます。コンテンツはスタティックにすることも、サーバーでファイルをホストすることによって、更新されるコンテンツを提供することもできます。どちらの方法を選択しても、スタート ページのカスタマイズは、ユーザーまたはユーザーの組織のニーズに IDE を適合させる 1 つの方法です。
詳細については、MSDN のトピック「[スタート ページ]」 を参照してください。