VSCodeのユーザースニペットにPowerShellスクリプトのテンプレートを登録する

普段、PowerShellスクリプトを作成するときに自分は下記のようなテンプレートを下敷きにして作成しています。

```powershell
#!/usr/bin/env pwsh
<#
.SYNOPSIS
    Short description
.DESCRIPTION
    Long description
.EXAMPLE
    PS C:\> <example usage>
    Explanation of what the example does
.INPUTS
    Inputs (if any)
.OUTPUTS
    Output (if any)
.NOTES
    General notes
#>

PROCESS {

    Set-StrictMode -Version Latest
    $ErrorActionPreference = "stop"

}
```

今回はこのテンプレートをVSCodeのユーザースニペットに登録して便利に入力できるように設定していきます。

## 今回利用する環境

Windows 11 23H2
VSCode 1.91.1

## 参考ドキュメント

[Create your own snippets](https://code.visualstudio.com/docs/editor/userdefinedsnippets#_create-your-own-snippets)

## ユーザースニペットを登録する

VSCodeでは標準機能でユーザー独自のスニペットを設定できるため、この機能を利用してPowerShellのテンプレートを登録し、スニペットから入力してみます。

スニペットのスコープ管理は、すべての言語に登録するか言語を指定して登録するか選択できるため、今回はPowerShellの場合のみ表示できるスニペットに登録します。

コマンドパレット（Ctrl+Shift+P）からユーザースニペットの構成を選択。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1670622/ed94c3e2-70a0-93f4-d183-34ff92272025.png)

選択項目として言語が出てくるため、PowerShellを選択

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1670622/adeb8a1f-9c4e-326b-bf96-be20afba959d.png)

powershell.jsonが生成されるため、こちらに利用したいスニペットを記載していきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1670622/e4928191-994a-1667-92ce-15e4323ef4f2.png)

## 作成したpowershell.jsonにスニペットを登録する

ドキュメントを参照すると、json形式でプレフィックス名とprefixとbodyがあれば動くようなので、今回はこれらの要素を登録します。

```json
{
	// Place your snippets for powershell here. Each snippet is defined under a snippet name and has a prefix, body and 
	// description. The prefix is what is used to trigger the snippet and the body will be expanded and inserted. Possible variables are:
	// $1, $2 for tab stops, $0 for the final cursor position, and ${1:label}, ${2:another} for placeholders. Placeholders with the 
	// same ids are connected.
	// Example:
	// "Print to console": {
	// 	"prefix": "log",
	// 	"body": [
	// 		"console.log('$1');",
	// 		"$2"
	// 	],
	// 	"description": "Log output to console"
	// }
	"ps1template":{
		"prefix":"ps1template",
		"body":[
			"#!/usr/bin/env pwsh",
			"<#",
			".SYNOPSIS",
			"    Short description",
			".DESCRIPTION",
			"    Long description",
			".EXAMPLE",
			"    PS C:\\> <example usage>",
			"    Explanation of what the example does",
			".INPUTS",
			"    Inputs (if any)",
			".OUTPUTS",
			"    Output (if any)",
			".NOTES",
			"    General notes",
			"#>",
			"",
			"PROCESS {",
			"",
			"    Set-StrictMode -Version Latest",
			"    \\$ErrorActionPreference = \"stop\"",
			"",
			"}",
			""
		]
	}
}
```

上記はps1templateという名前でスニペットからテンプレートを入力できるような登録になります。

一点、補足する事項としては`$ErrorActionPreference`の変数の部分は先頭に`$`含み、ユーザースニペットでは`$`をつかった機能があり、今回は単純に文字として$を挿入したいため、`\\$`と入力してエスケープしています。

## スニペットから登録したテンプレートを入力してみる

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1670622/223c9665-ca78-ca97-4cab-3ef766d7e641.png)

言語モードがPowerShellの際にスニペット（ctrl+space）を確認すると、先ほど登録したps1templateが表示されます。

こちらを選択するとテンプレートが挿入されます。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1670622/8eaaf891-c4fa-503e-293b-367f6d794eea.png)

## 総評

今回はテンプレートを登録するだけですが、ドキュメントをみると変数を展開したり日付を挿入したりと、色々とカスタマイズできるのでスニペットで利用できる機能を一度見ておくと、便利に使える要素が見当たるかもしれません。