5
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

VisualStudioでスニペットを作成する C++編

Last updated at Posted at 2021-01-30

初めに

 スニペットとはforswitchを入力した時に出てくる便利な機能です。
紹介.gif

追記:おまけ1として、いくつかのコードスニペットのサンプルをダウンロード出来るようにしています。ご自由にお使い下さい。

作成方法

 まず、下準備としてこの拡張機能(Snippet Designer)をダウンロードしてください。

スニペットファイルの作成

完全新規

 まず、[ファイル] > [新規作成] > [ファイル]を選択してください。
ファイル作成1.png
 すると、以下のウィンドウが表示されるので、右上にある「検索 (Ctrl+E)」に「Snippet」を入力。「Code Snippet」が表示されるので選択。(上記の拡張機能がインストールされていないと表示されません)
ファイル作成2.png

既存コード

 既存のコードをスニペットとして書き出したい場合は書き出したいコードを選択して、Export as Snippetを選ぶだけです。
書き出し.png

スニペットファイルエディターの説明

作成したら、以下の画像が出てきます。
作成画面1.5.png

① ファイル設定

作成画面2.png

Snippet

 ここはスニペットファイル自体の名前になります。後述する「Shortcut」と同じが無難だと思います。因みに、新規にファイルを作成する時に限り、自動でこの名前に置き換わります。

Language

 ここはプログラミング言語です。今回は「C++」になります。

Shortcut

 ここは名前の通り、入力した際に出てくるキーワードになります。例を上げると、forのスニペットを書いた時はforにしたり、forhogeにしたりします。勿論、キーワードは自由なのですが「アンダースコア」や「空白」を入れると、候補には出るのですが、書いたコードが出てきません。なので「半角英数字(大文字も含む)だけ」にしてください。いいですか?もう一度言いますよ?「半角英数字(大文字も含む)だけ」にしてください。
 私はこのことに気づかず、コード側に問題があるかと思い、小一時間無駄にしました。

② コード

作成画面3.png

この場所に実際のコードを記入します。
使う際に

  • そもそも候補に表示されない
  • 候補から選択してもコードが出現しない
  • 出現したコードがおかしい

などが発生した場合は大体ここに原因があります。

③ パラメータ設定

作成画面4.png

 ここは「変数」に似たような機能を追加する場所です。というのも、スニペットはショートカットを入力して、固定のコードが作成されるだけではありません。コード中の特定の部分を変更して、作成したい場合もあります。むしろこの方が多いと思います。
 なのでここで「変数(パラメーター)」を追加して、動的に変更出来るようにします。

// 例
for (int i = 0; i < length; i++) {}
// の部分の「int」「i」「length」に当たります。

ID

これはいわゆる「パラメーター名」ですが、1つ注意点があります。

  • selected
  • end

は使用しないようにしてください。というのも、これらの単語は所謂「予約語」に当たる単語になっています。

Tooltip

 これは「パラメーター」の説明になります。

Default to

 これは名前の通り、「パラメーター」のデフォルト値になります。

Kind

 これはよく分からないのですが、通常は「Literal」で大丈夫だと思います。「Object」はどういう時に使うのかは知りません。

Type

 これもよく分かりません。この欄をクリックすると自動で「N/A」になるので、それで大丈夫だと思います。

Function

 軽く調べてみたところ、既存の関数を呼ぶ欄みたいです。なので、通常は空白にしておくべきです。通常はGenerateSwitchCasesClassNameSimpleTypeNameのみを指定できるみたいです。詳細はこのサイトを見て下さい。

Editable

 ここはエディターの時に編集の可不可を設定する欄です。忘れずにチェックマークを付けておきましょう。

実際にスニペットファイルにコードを記入

 さて、ここまで理解すれば後は「書き方」だけです。今回は例としてforの初期値を変更出来るスニペットファイルを作成してみます。基本はC++の書き方ですが、上記の「パラメーター」の部分は$パラメーター名(ID)$のという独自の書き方になります。

  • $selected$は置き換える「パラメーター」が一つだけの際に、「パラメーター」の代わりに$selected$を使う事で、置き換えることが出来るものです。
  • $end$はコード スニペットの挿入後のカーソル位置を指定するものです。
for ( $type$ $index$ = $init$; $index$ < $max$; $index$++ )
{
    $end$
}
ID Tooltip Default to Kind Type Function Editable
type コントロール変数 size_t Literal N/A
max 最大の長さ length Literal N/A
init 初期値 0 Literal N/A
index インデックス i Literal N/A

これだけです。とても簡単に作成する事が出来ます。

注意点

 「パラメーター(ID)」を使う際に、先に「$$」を書いてから、間に「パラメーター名(ID)]を記入する方法だと、パラメーター欄に書いた分の「パラメーターの一部分」が追加されてしまいます。というのも、不足している「パラメーター($で囲んでいる文字)」を自動で追加するお節介機能がある為で、パラメーター欄が大量の「あるパラメーター名の一部分の文字」で埋まる事態が発生しました。
 因みに、削除したい「パラメーター」は右クリックでRemove Replacementを選択すると削除する事が出来ます。
作成画面 注意点.png
 更に、保存・上書き保存する時は結構遅いので注意してください。

プロパティー部分を記入

作成画面 プロパティー.png

Author

 これはスニペット作成者の名前です。無くても構いません。

Description

 これはスニペットの内容に関する説明文です。ここは書いた方が後々分かり易いので書いておくべきです。

Help Url

 これはスニペットに関する情報の入手先URLですが、VisualStudioでは使用しないみたいなので、書く必要はないです。


 とりあえず、ここまで説明しました。プロパティー欄は個人で使う分にはこれで十分でだと思います。他の内容を知りたい場合はコード スニペット スキーマ リファレンスを覗いてみて下さい。

追加方法

コードスニペットを追加する手段として、3種類あります。

1. 別ファイルに存在するスニペットファイルをインポートする

  1. この場合は [ツール] > [コードスニペット マネージャー] を選択します。または、Ctrl+K, Ctrl+Bでも可能です。
    追加方法1.png

  2. すると、以下の画面がでるので、インポートから追加したいスニペットファイルを選択します。
    追加方法2.png

  3. この画面で「My Code Snippets」にチェックマークを入れ、完了を選択。
    追加方法3.png

  4. 2 の画面に戻るのでOKを選択。

  5. 既に同じ名前のスニペットファイルが存在するなら、以下のウィンドウが出るのでどれかを選択してください。
    追加方法4.png

  6. これで完了です。ちなみに、VisualStudioの再起動は不要です。

2. 標準ファイルにスニペットファイルを保存する

 この方法は1のやり方で出てきた「My Code Snippets」に直接スニペットファイルを保存する方法になっています。このやり方の利点は毎回「コードスニペットマネージャー」を開いてインポートするといった手間が省かれるという事です。
 標準ファイルの場所が「C:\Users\ (ユーザー名)\Documents\Visual Studio 2019\Code Snippets\Visual C++\My Code Snippets」にあります。

3. スニペットファイルが保存されている別ファイルを読み込むファイルにする

 この方法は任意の場所に存在するスニペットファイルの保存先を追加する事が出来るので、その方法を使用しています。

  1. スニペットファイルマネージャーを開きます
  2. マネージャー内にある「追加」を選択し、スニペットファイルを保存しているフォルダーを選択してください。
  3. すると、そのフォルダーがマネージャー内に表示されるので、OKを選択して完了です。
    追加方法2.png

 この方法の唯一のデメリットが「スニペットファイルの名前がフォルダー違いで同じになる可能性がある」ぐらいでしょうか?これでもし、ショートカットまで同じなら、面倒くさい事になるので注意してください。

  1. スニペットのショートカットを入力
  2. ショートカットが表示されるので選択する
  3. 更に、どのフォルダーのスニペットなのかを選択する
  4. 確定する

といった手順になってしまいます。

実際に使ってみよう

 さて、これで準備は整いました。後は使うだけです。
実践.gif
この通り、標準のforスニペットで不満だったのが、初期値を変更出来る自作スニペットを作成して解決しました。

最後に

 「コードスニペットって意外と簡単に作れるな~」と思ってもらえれば光栄です。今回はC++でのスニペット作成でしたが、言語設定と実際のコードを変更するだけで別言語でも使う事が可能です。ただし、標準のスニペットファイルの位置は変わりますが、コードスニペットマネージャー内にフォルダーのパスが載っているので、それを参考にしてください。

それでは、快適なプログラミング生活を送りましょ〜

おまけ1

おまけとして、スニペットファイルの一覧を公開しています。
githubからダウンロード出来るようにしています。また、改造なども構いませんので、ご自由にお使いください。
ただし、「README.md」だけは、一切「変更しない・消さない」でお願いします。

おまけ2

 標準の中で比較的よく使うスニペットをまとめてみました。なお、標準のスニペットの場所は「C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\Common7\IDE\VC\Snippets\1041\Visual C++」にあります。

classi

説明

インライン コンストラクター/デストラクターを含むクラスに対するコード スニペット

ショートカット

classi

	class MyClass
	{
	public:
		MyClass()
		{}

		~MyClass()
		{}

	private:

	};

for

説明

for ループに対するコード スニペット

ショートカット

for

	for (size_t i = 0; i < length; i++)
	{

	}

forr

説明

逆向き for ループに対するコード スニペット

ショートカット

forr

	for (int i = length - 1; i >= 0; i--)
	{

	}

rfor

説明

'範囲ベースの for' ループに対するコード スニペット

ショートカット

rfor

	for (auto& i : v)
	{

	}

switch

説明

switch ステートメントに対するコード スニペット

ショートカット

switch

	switch (switch_on)
	{
	default:
		break;
	}
5
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?