スキーマ リファレンス

2011 年 12 月時点の『MSDN ライブラリ』の内容を参考にしています。

全体像

全体像を把握しやすいよう、最低限記述した方がよい要素と属性のみを下に記しました。これをコピーしてテンプレートとして利用することもできます。

<?xml version="1.0" encoding="utf-8"?>
<CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
  <CodeSnippet Format="1.0.0">
    <Header>
      <Title>...</Title>
      <Description>...</Description>
      <Shortcut>...</Shortcut>
    </Header>
    <Snippet>
      <Declarations>
        <Literal>
          <ID>...</ID>
          <ToolTip>...</ToolTip>
          <Default>...</Default>
        </Literal>
        ...
      </Declarations>
      <Code Language="..." Kind="...">...</Code>
    </Snippet>
  </CodeSnippet>
</CodeSnippets>

CodeSnippets 要素

ルート要素です。属性はありません。

<?xml version="1.0" encoding="utf-8"?>
<CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
...
</CodeSnippets>

名前空間を xmlns=”http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet” とします。

『MSDN ライブラリ』では「2005」の部分が「2008」となっていますが、「2008」にすると IntelliSence が利きません。

Visual Studio 2005 の頃からスキーマは変わっていないようです。

CodeSnippet 要素

CodeSnippets 要素の子要素です。コード スニペットの数だけ記述します。

<CodeSnippet Format="1.0.0">
...
</CodeSnippet>

属性は Format 属性があります。「Format=”1.0.0″」のようにフォーマットのバージョンを記述します。

『MSDN ライブラリ』では触れられていませんが、Visual Studio が提供している組み込みのコード スニペットの中には「Format=”1.1.0″」と記述されているものがあります。

「Format=”1.1.0″」では HTML や JavaScript のコード スニペットが作成できるようです。スキーマが『MSDN ライブラリ』で解説されているものと異なります。フォーマットのバージョンはスキーマのバージョンをあらわすようです。

Header 要素

CodeSnippet 要素の子要素です。ヘッダー情報を記述します。属性はありません。

ヘッダー情報は子要素として記述します。子要素の順番は任意です。

  • Title 要素
  • Description 要素
  • Shortcut 要素
  • SnippetTypes 要素
  • Author 要素
  • HelpUrl 要素
  • Keywords 要素

HelpUrl 要素と Keywords 要素については、使う機会がないと思いますので説明を省略します。

Title 要素

コード スニペットの名前を記述します。「コード スニペット マネージャー」と、 [スニペットの挿入] コマンドに表示されます。

Description 要素

コード スニペットの説明を記述します。「コード スニペット マネージャー」と、 [スニペットの挿入] コマンドのツールヒントに表示されます。

Shortcut 要素

ショートカット入力用の文字列を記述します。範囲選択して挿入するスニペットに対しては必要ありません。

SnippetTypes 要素

コードをどのように挿入するかを子要素である SnippetType 要素で指定します。複数指定できます。

<SnippetTypes>
    <SnippetType>Expansion</SnippetType>
    <SnippetType>SurroundsWith</SnippetType>
</SnippetTypes>

カーソル位置に挿入する場合は「Expansion」、選択範囲の前後に挿入する場合は「SurroundsWith」を指定します。

実際には指定しなくても機能します。機能を規定するためではなく、説明のための要素のようです。

ただし、SurroundsWith の SnippetType 要素のみを記述した場合、IntelliSence でコード スニペットの選択候補に表示されなくなり、使用できなくなります。記述する場合には必ず Expansion のSnippetType 要素を記述するようにしてください。

Author 要素

コード スニペットの作成者を記述します。「コード スニペット マネージャー」に表示されます。

Snippet 要素

CodeSnippet 要素の子要素です。コードの内容を記述します。属性はありません。

  • References 要素
  • Imports 要素
  • Declarations 要素
  • Code 要素

References 要素

コードを挿入したときに参照設定も追加されるようにします。Visual Basic のコード スニペットでしか利用できません。

<References>
    <Reference>
        <Assembly>System.Data.dll</Assembly>
        <Url>www.microsoft.com</Url>
    </Reference>
    ...
</References>

追加するアセンブリの数だけ Reference 要素を記述します。Assembly 要素にアセンブリ名を記述し、Url 要素ではアセンブリに関する情報を入手できる URL を記述します。

Url 要素は記述する必要はないと思われます。

Imports 要素

コードを挿入したときに Import 文も挿入されるようにします。Visual Basic のコード スニペットでしか利用できません。

<Imports>
    <Import>
        <Namespace>System.Data</Namespace>
    </Import>
    ...
</Imports>

追加する Import 文の数だけ Import 要素を記述します。Namespace 要素に名前空間を記述します。

Declarations 要素

コード挿入時に置換する可変部分を定義します。Enable 属性を指定できますが、通常はデフォルト値を使用するため記述しません。

可変部分の定義には「リテラル」と「オブジェクト」の 2 種類があり、それぞれ Literal 要素と Object 要素を記述しますが、Literal 要素だけで事足りると思いますので、Object 要素の説明は省略します。

<Declarations>
  <Literal>
    <ID>...</ID>
    <ToolTip>...</ToolTip>
    <Default>...</Default>
  </Literal>
  ...
</Declarations>

定義する可変部分の数だけ Literal 要素を記述します。定義内容は子要素に記述します。

ID 要素

可変部分の ID を指定します。挿入するコードを定義する際に、置換したい部分を「$id$」のように記述しておくことで、その部分を挿入時に置換できるようになります。

ToolTip 要素

コード挿入時に、可変部分にマウスを重ねたときに表示するツールヒントを記述します。

Default 要素

可変部分のデフォルト値を指定します。

Function 要素

可変部分の内容を動的に生成するようにします。C# のコード スニペットでしか利用できません。

Function 要素を記述すると、Default 要素は無視されます。

生成する内容は Function 要素の内容を次のいずれかにすることで指定します。

ClassName()

コードを挿入したクラス名に置換されます。コンストラクタを挿入するコード スニペットに利用できます。

SimpleTypeName()

型名をシンプルな形式で挿入します。たとえば、「SimpleTypeName(System.Text.StringBuilder)」としておくと、コードに「using System.Text;」が含まれていれば「StringBuilder」に置換され、含まれていなければ「System.Text.StringBuilder」が置換されます。

GenerateSwitchCases()

パラメータで指定した列挙型メンバーを case 文とする switch ステートメントに置換されます。

Code 要素

挿入するコードを記述します。

<Code Kind="..." Language="...">...</Code>

属性は次の 3 つがあります。

Language

コード スニペットの言語を指定します。「VB」「CSharp」「XML」のいずれかにします。

Kind

コードを挿入できる場所を特定するための、コードの種類を指定します。「method body」「method decl」「type decl」「file」「any」のいずれかにします。「method body」はメソッド内に記述するコード、「method decl」はメソッド宣言といった具合です。

Delimiter

可変部分の区切り記号を指定します。デフォルトは「$」で、可変部分を「$id$」のように記述することを意味します。コード内に「$」そのものを記述する場合、誤って区切り記号と認識されてしまわないよう別の文字を指定します。

Code 要素の内容を CDATA セクションを使って記述することで、コードに不等号が含まれる場合にわざわざ「&lt;」などに置き換えなくて済みます。

<Code><![CDATA[if (a < b)]]></Code>

CDATA セクションを使わない場合、次のように記述しなければならず、記述が面倒になる上、コードが読みづらくなります。

<Code>if (a &lt; b)</Code>