【Visual Studio 2017入門:第12回】コードスニペットって何?どうやって使うの?

次回の記事

terapotan.hatenablog.jp

前回の記事

terapotan.hatenablog.jp

連載記事一覧

terapotan.hatenablog.jp

前回はショートカットの有用性や使い方、新しいショートカットキーの設定方法について解説しました。

今回はコードスニペットとは一体何なのか、コードスニペットの使い方と設定方法について解説していきます。

コードスニペットとは?

コードスニペットとは、ソフト開発時に簡単に挿入できるようにあらかじめ作成されたコードを指します。

ですが「簡単に挿入できるようにあらかじめ作成されたコード」なら「コピペ」も当てはまりそうです。

「コピペ」と「コードスニペット」は一体何が違うのでしょうか。

Column:コード「スニペ」ットです。

この記事を書くまで、コードスニペットのことをコード「スペニ」ットと間違えて覚えていました。
こんな風に間違えるのは私だけかもしれませんが、みなさんは間違えないように気を付けてください。

コピペとコードスニペット

コピペは、過去に書いたコードと全く同じコードを書く場面でないと用いることが出来ません。
ソフト開発において、過去と全く同じコードを書く場面はほとんどないためコピペだけでは入力の手間を省くことは不可能です。

ですが、全く同じコードを書く場面はなくても似たようなコードを書く場面なら存在します。

例えば下のような例です。

過去書いたコード

Ball ballInstance = new Ball();

今書こうとしているコード

Block blockInstance = new Block();

変数名やクラス名は異なりますが、文全体を見るとよく似ていることがわかります。

このような場合に「文の構造だけ呼び出して変数名、クラス名は後で書き換えられる」ようにすれば、入力の手間を大きく省くことが出来ます。
これこそがまさしくコードスニペットと呼ばれる機能になります。

コードスニペットを使ってみる

では、実際にコードスニペットを使ってみましょう。

コードスニペットを呼び出すにはエディタ上の挿入したい場所でCtrl+Spaceを押します。(Spaceはスペースキーを表します。)

続いてforと入力します。すると、プルダウンメニューにforが表示されEnterキーを押すとfor文のコードスニペットが挿入されます。

背景が白色の部分は、コードスニペット挿入後に値を変更することが出来ます。

Tabキーを押すことで、次の値を変更するところへ移動することが出来ます。

alt

Column:他のコードスニペットもあるの?

今回は、for文のコードスぺニットしか解説しませんでしたが他にもC++であればswitch文やif文、while文などのコードスぺニットが存在します。

いずれもCtrl+Spaceを押してswitch,if,whileと入力すれば上と同様にコードスニペットを呼び出すことが出来ます。

コードスニペットを追加する

前節では既存のコードスぺニットを使用しましたが、本節では自分でコードスニペットを作成してみましょう。

.snippetファイルを作成する

コードスニペットを作成するには、コードスニペットの内容を定義したファイルを作成する必要があります。(xml形式のファイル)

適当な場所にTestCode.snippetを作成し、以下の内容を入力してください。(内容の説明は後述)

<CodeSnippets>
  <CodeSnippet Format = "1.0.0">
      <Header>
          <Title>classNew</Title>
          <Shortcut>classNew</Shortcut>
      </Header>
  
      <Snippet>
          <declarations>
            <Literal>
              <ID>classType</ID>
              <default>classType</default>
            </Literal>

            <Literal>
              <ID>className</ID>
              <default>classType</default>
            </Literal>

            <Literal>
              <ID>constructor</ID>
              <default>argument</default>
            </Literal>
          </declarations>
          <Code Language="CPP">
              $classType$* $className$ = new $classType$($constructor$);
          </Code>
      </Snippet>
  </CodeSnippet>
</CodeSnippets>

ファイルをインポートする

VisualStudio上でCtrl+K,Ctrl+Bを押しコードスニペットマネージャーを開きます。

alt

コードスぺニットマネージャーの言語の下にあるプルダウンメニューをクリックし、Visual C++を選択します。
alt

続いて、ウィンドウの下側にあるインポートをクリックし、先ほど作成したTestCode.snippetをクリックしてOKを押します。
これで作成したコードスニペットがVisualStudio上で使用できるようになりました。

エディタ上でclassNewを入力して、コードスニペットを呼び出せるようになったはずです。
alt

ファイルの解説

コードスニペットの定義ファイルはXMLと呼ばれる形式で書かれています。

1行目:CodeSnippets

先ほど作成したTestCode.snippetを上から順番に見ていくことにします。

1行目には<CodeSnippets>と書かれています。これは、19行目の</CodeSnippets>と対になっています。<CodeSnippets></CodeSnippets>の中に後述する<CodeSnippet>を入れることで一つのファイルで複数のコードスニペットを定義することが出来ます。

<CodeSnippets>
<!-- この中に複数の<codeSnippet>を入れて複数のコードスニペットを定義できる-->
<CodeSnippets>……</CodeSnippets>
<CodeSnippets>……</CodeSnippets>
</CodeSnippets>

2行目:CodeSnippet

<CodeSnippet></CodeSnippet>で一つのコードスニペットを定義しています。
Format = "1.0.0"という部分はバージョンを表すようですが、具体的なバージョン番号のつけ方は公式ドキュメントに記載がなかったため不明です。

3行目:Header

<Header></Header>コードスニペットのタイトルとショートカット文字列(Ctrl+Spaceを押したときに表示される文字列。検索の際用いる)を設定しています。5行目の<Title>コードスニペットのタイトルを6行目の<Shortcut>でショートカット文字列をそれぞれ設定しています。

25行目:コードスニペットの定義

少し飛ばして先に<Code>の解説から行います。
<Code></Code>で挿入する文字列の定義を行います。
基本ここで入力した文字列がコードスニペットを呼び出したときに挿入されることになります。

<Code>のLanguageは今定義しようとしているコードスニペットがどの言語で呼び出されるかを指定するものです。
今回指定しているCPPはこのコードスニペットC++でしか呼び出されないことを意味します。
Languageで指定した言語以外の言語ではCtrl+Spaceを押してショートカット文字列を入力してもコードスニペットを呼び出すことが出来なくなります。

置換文字列(コードスニペットを呼び出したときに書き換えられる文字列)を挿入したい場合は$で特定の文字列を囲みます。この特定の文字列は<Code>の上にある<Literal>で定義します。

10行目:Literal

一つの<Literal>で一つの置換文字列を定義します。
<ID>で置換文字列を設定し、<Default>で置換文字列に最初から入っている値を設定します。
<Literal><declartions></declartions>で囲む必要があります。

コードスニペットの公式ドキュメント

コードスニペットについてもっと詳しく知りたい方は以下のリンクから、VisualStudio2017のコード スニペット スキーマ リファレンスをご覧ください。
各要素の意味について詳しく載っています。

docs.microsoft.com

次回予告

次回は、VisualStudioの公式ドキュメントの読み方・探し方について解説していきます。
次回で最終回となる予定です。

次回の記事

terapotan.hatenablog.jp

前回の記事

terapotan.hatenablog.jp

連載記事一覧

terapotan.hatenablog.jp