チュートリアル: Visual Studio でコード スニペットを作成する

コード スニペットは、わずかな手順で作成できます。 必要な操作は、XML ファイルを作成し、適切な要素を指定して、コードを追加するだけです。 必要に応じて、置換パラメーターとプロジェクト参照を利用できます。 その後、[ツール] メニューから使用できるコード スニペット マネージャー[インポート] ボタンを使って、スニペットを Visual Studio のインストールにインポートできます。

スニペット テンプレート

基本の XML スニペット テンプレートを次に示します。 このスニペット テンプレートを使い、それを変更することで、Visual Studio でコード スニペットを作成する手順を説明します。

<?xml version="1.0" encoding="utf-8"?>
<CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
    <CodeSnippet Format="1.0.0">
        <Header>
            <Title></Title>
        </Header>
        <Snippet>
            <Code Language="">
                <![CDATA[]]>
            </Code>
        </Snippet>
    </CodeSnippet>
</CodeSnippets>

コード スニペットを作成する

  1. Visual Studio を起動します。 次に、[スタート] ウィンドウの [作業の開始] セクションで、[コードなしで続行] を選びます。

    Screenshot of the Start window with the 'Continue without code' option selected.

  2. メニュー バーから [ファイル]>[新規]>[ファイル] を選んで (または、キーボード ショートカットの Ctrl+N キーを押して)、[新しいファイル] ダイアログを開きます。 次に、[XML ファイル] を選びます。

    Screenshot of the 'New File' dialog with the 'XML File' option selected.

  3. この記事の「スニペット テンプレート」セクションで示されているテンプレート コードを追加します。

  4. このコードで、Title 要素にスニペットのタイトルを指定します。 タイトル Square Root を使用します。

  5. Code 要素の Language 属性に、スニペットの言語を指定します。 C# の場合は CSharp を、Visual Basic の場合は VB を、C++ の場合は CPP を使用します。

    ヒント

    使用できる言語値をすべて確認するには、「コード スニペット スキーマ リファレンス」ページの「コード要素」の「属性」セクションを参照してください。

  6. Code 要素内の CDATA セクションにスニペット コードを追加します。

    C# の場合 :

    <Code Language="CSharp">
        <![CDATA[double root = Math.Sqrt(16);]]>
    </Code>
    

    あるいは、Visual Basic の場合:

    <Code Language="VB">
        <![CDATA[Dim root = Math.Sqrt(16)]]>
    </Code>
    

    注意

    コード スニペットの CDATA セクション内のコード行をインデントまたは書式設定する方法を指定することはできません。 挿入時に、言語サービスによって挿入されるコードの書式が自動的に設定されます。

  7. スニペットを SquareRoot.snippet として保存します (任意の場所に保存できます)。

コード スニペットを挿入する

  1. ご利用の Visual Studio インストールには、コード スニペット マネージャーを使用して、スニペットをインポートすることができます。 [ツール]>[コード スニペット マネージャー] の順に選択して開きます。

  2. [インポート] ボタンを選択します。

  3. 前の手順でコード スニペットを保存した場所に移動し、それを選択して、[開く] を選択します。

  4. [コード スニペットのインポート] ダイアログが開き、右ウィンドウの選択肢からスニペットを追加するように求められます。 選択肢の 1 つに [マイ コード スニペット] があります。 それを選択し、[完了] を選択し、[OK] を選択します。

  5. スニペットが、コード言語と使用している Visual Studio のバージョンに応じて、次のいずれかの場所にコピーされます。

    %USERPROFILE%\Documents\Visual Studio 2022\Code Snippets\Visual C#\My Code Snippets%USERPROFILE%\Documents\Visual Studio 2022\Code Snippets\Visual Basic\My Code Snippets

    %USERPROFILE%\Documents\Visual Studio 2019\Code Snippets\Visual C#\My Code Snippets%USERPROFILE%\Documents\Visual Studio 2019\Code Snippets\Visual Basic\My Code Snippets

  6. C# または Visual Basic プロジェクトを開いて、そのスニペットをテストします。 エディターでコード ファイルを開いた状態にして、右クリック メニューの [スニペット]>[スニペットの挿入] の順に選択し、次に [マイ コード スニペット] を選択します。 Square Root という名前のスニペットが表示されるはずです。 これをダブルクリックします。

    スニペット コードがコード ファイルに挿入されます。

Description フィールドと Shortcut フィールド

  1. Description フィールドには、コード スニペット マネージャーで表示した際に、コード スニペットに関する詳しい情報があります。 ショートカットとは、スニペットを挿入するためにユーザーが入力できるタグです。 次のファイルを開いて、追加したスニペットを編集します。

    %USERPROFILE%\Documents\Visual Studio 2022\Code Snippets\[Visual C# or Visual Basic]\My Code Snippet\SquareRoot.snippet、または

    %USERPROFILE%\Documents\Visual Studio 2019\Code Snippets\[Visual C# or Visual Basic]\My Code Snippet\SquareRoot.snippet

    ヒント

    編集するファイルは、Visual Studio によって配置されたディレクトリにあるので、それを Visual Studio に再インポートする必要はありません。

  2. Author および Description 要素を Header 要素に追加し、入力します。

  3. Header 要素が次の例のようになっていることを確認します。

    <Header>
        <Title>Square Root</Title>
        <Author>Myself</Author>
        <Description>Calculates the square root of 16.</Description>
    </Header>
    
  4. [ツール] メニューの [コード スニペット マネージャー] を開き、コード スニペットを選択します。 右ペインで、Description フィールドと Author フィールドが指定されていることに注目してください。

    Code snippet description in Code Snippet Manager

  5. ショートカットを追加するには、次のように Header 要素内に Shortcut 要素を追加します。

    <Header>
       <Title>Square Root</Title>
       <Author>Myself</Author>
       <Description>Calculates the square root of 16.</Description>
       <Shortcut>sqrt</Shortcut>
     </Header>
    
  6. スニペット ファイルを再度保存します。

  7. ショートカットをテストするには、以前に使用したプロジェクトを開いて、エディターに「sqrt 」と入力し、Tab キーを押します (Visual Basic の場合は 1 回、C# の場合は 2 回)。

    スニペット コードが挿入されます。

置換パラメーター

ユーザーにコード スニペットの一部を置き換えてもらいたい場合があります。 たとえば、ユーザーが変数名をユーザーの現在のプロジェクトに含まれる名前に置き換えられるようにしたいとします。

使用できる置換には、リテラル置換とオブジェクト置換の 2 種類があります。 Literal 要素を使用すれば、スニペット内に完全に含まれているがコードに挿入された後にカスタマイズされる可能性が高いコード (文字列や数値など) に対する置換が識別されます。 Object 要素を使用すると、コード スニペットで必須とされているがスニペット自体の外側で定義される可能性が高い項目 (オブジェクト インスタンスやコントロールなど) が識別されます。

  1. ユーザーが平方根を計算する数値を簡単に置き換えることができるようにするには、SquareRoot.snippet ファイルの Snippet 要素を次のように変更します。

    <Snippet>
      <Code Language="CSharp">
        <![CDATA[double root = Math.Sqrt($Number$);]]>
      </Code>
      <Declarations>
        <Literal>
          <ID>Number</ID>
          <ToolTip>Choose the number you want the square root of.</ToolTip>
          <Default>16</Default>
        </Literal>
      </Declarations>
    </Snippet>
    

    リテラル置換に ID (Number) が指定されていることに注目してください。 その ID は、$ 文字を使用して囲むことで、コード スニペット内から参照されます。

    <![CDATA[double root = Math.Sqrt($Number$);]]>
    
  2. スニペット ファイルを保存します。

  3. プロジェクトを開き、スニペットを挿入します。

    コード スニペットが挿入され、編集可能なリテラルが置換対象として強調表示されます。 置換パラメーターにカーソルを合わせると、値のヒントが表示されます。

    Code snippet replacement parameter tooltip in Visual Studio

    ヒント

    スニペット内に置換可能なパラメーターが複数存在する場合は、Tab キーを押すと、次に移動し、値が変化します。

名前空間をインポートする

コード スニペットを使用すれば、Imports 要素を含めることで、using ディレクティブ (C#) または Imports ステートメント (Visual Basic) を追加できます。 .NET Framework プロジェクトの場合は、References 要素を使用してプロジェクトへの参照を追加することもできます。

次の XML で示すコード スニペットでは、System.IO 名前空間内に File.Exists メソッドが使用され、その結果として、System.IO 名前空間をインポートする Imports 要素が定義されています。

<?xml version="1.0" encoding="utf-8"?>
<CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
  <CodeSnippet Format="1.0.0">
    <Header>
      <Title>File Exists</Title>
      <Shortcut>exists</Shortcut>
    </Header>
    <Snippet>
      <Code Language="CSharp">
        <![CDATA[var exists = File.Exists("C:\\Temp\\Notes.txt");]]>
      </Code>
      <Imports>
        <Import>
          <Namespace>System.IO</Namespace>
        </Import>
      </Imports>
    </Snippet>
  </CodeSnippet>
</CodeSnippets>