スニペットの書き方


[expanded]:https://marketplace.visualstudio.com/items?itemName=inu1255.easy-snippet

## 前提

### 環境
- VS Code
- MacOs 12.3.1
- 初心者

<br>
<br>

### はじめに
![](https://i.gyazo.com/449882f3748cef59993b68af4a3575ec.jpg)
調べたところ、ほとんどのサイトでこのように辿る方法が紹介されていました。中にはこれを使って "スニペットを作るスニペット" を作っている方もいらっしゃいました。それはそれでとても素晴らしいと感じたのですが、正直私はこのファイルを弄っていくには少し辛いものがあると感じました。そこで、[Easy Snippet][expanded]という拡張機能を見つけました。

https://marketplace.visualstudio.com/items?itemName=inu1255.easy-snippet

後述で詳しく説明しますが、以下のような流れでスニペットが完成します。

<br>

:::note info
1. サイドバーのアイコンをクリック
　　　　　▼
2. 画面上部に出てくる入力画面に、<br>スニペットキー(呼び出す際の文字列)を入力
　　　　　▼
3. 別タブでエディタが開くので、<br>普段通りにコードを書く(自動保存)
:::

```javascript
if (score >= 点数 && name == '名前') {
  console.log('メッセージ');
}
```
例えば、上記のような条件分岐をスニペットにしようとすると、

<br>

```
// @prefix if
// @description 
/* eslint-disable */

if (${1:condition} ${2|<,>,<=,>=,==,!=|} $3 ${5|&&,\|\|,!|} ${6:condition} ${7|<,>,<=,>=,==,!=|} $8) {
  $0
}
```
このようになります。それぞれの記号の働きなどは追って詳しく説明していきます。
<br>
<br>
<br>

## スニペット登録手順
### STEP 1
![](https://i.gyazo.com/8b2430c915668a3ffeff139d9337f6fb.png)
まずは、言語ごとのグループを作っていきます。ディレクトリを作って、そこへスニペットというファイルを格納していくイメージですね。

<br>

#### 1-1. アイコンをクリック
上記のリンクあるいは[こちら][expanded]からEasy SnippetをVS Codeにインストールできたら、この辺り(<font color="#DC3545">**1** : サイドバー</font>)にアイコンが表示されているはずなのでこれをクリックしましょう。

<br>

#### 1-2. `+`ボタンでグループを作成

<br>

#### 1-3. 登録したい言語を検索
`+`ボタンをクリックすると検索ウィンドウが表示されるので、登録したい言語を入力し`Enter`を押します。すると新しく言語グループが追加されているはずなので、次のステップへ移りましょう。

<br>
<br>

### STEP 2
![](https://i.gyazo.com/63a489d965d80cc1f6f8d6a160246f48.png)
<font color="#DC3545">**赤枠**</font>にグループが追加されていることが確認できたら、実際にその言語のスニペットを作成していきましょう。

<br>

#### 2-1. `+`ボタンでスニペットを作成 
新しく作成されたグループは画像の<font color="#DC3545">**赤枠**</font>に表示されていると思います。`>`の付いた言語グループにマウスホバーすると、`+`ボタンが表示されるので、これをクリックします。

<br>

#### 2-2. スニペットキーを登録
`+`ボタンをクリックすると画面上部に検索ウィンドウが表示されるので、スニペットキー(prefix)を登録します。次のステップで登録するスニペットが、これを起点に展開されます。

<br>
<br>

### STEP 3. 展開される構文を記述する
![](https://i.gyazo.com/074604c7ea70d300273cef2ecc2d529d.png)
上記の工程でスニペットキーを入力し`Enter`を押したら、画像のようなファイルが新規に作成されます。<font color="#007BFF">**画像の青線・矢印辺り**</font>から下に記述したものが全て、登録されたスニペットキーを起点に展開されます。

VS Codeであればファイルの自動保存がデフォルトで設定されているはずなので、展開させたい構文を記述できたら閉じてしまって構いません。

<br>
<br>
<br>

## スニペットの記述ルール

### 記号の役割
<table>
<tr>
 <th style="min-width: 100px;">記号</th>
 <th style="text-align: center;">用途</th>
</tr>
<tr>
 <td style="text-align: center;">$</td>
  <td>

- 数字と組み合わせることで、カーソルが止まる場所を指定できる
- 0(ゼロ)は最終地点を表す
 
  </td>
</tr>
<tr>
 <td style="text-align: center;">:</td>
  <td>

- 文字と組み合わせることでplace-holderを表示できる
 
  </td>
</tr>
<tr>
 <td style="text-align: center;">|<br><small>パイプライン</small></td>
  <td>

- 配列を設定する
- `tab`で移動したときに、セレクトメニューから設定した配列要素を選べる
 
  </td>
</tr>
<tr>
 <td style="text-align: center;">\<br><small>バックスラッシュ</small></td>
  <td>

- エスケープさせる
- コンピュータにとって意味のある文字(`$`, `|`...)を、意味のないものにする
 
  </td>
</tr>
</table>
<br>

それでは、この記事の冒頭で紹介した例を使って解説していきたいと思います。

```javascript
//スニペット
if (${1:condition} ${2|<,>,<=,>=,==,!=|} $3 ${4|&&,\|\|,!|} ${5:condition} ${6|<,>,<=,>=,==,!=|} $7) {
  $0
}
　　　　　▼
//入力結果
if (score >= 点数 && name == '名前') {
  console.log('メッセージ');
}
```
<br>
<br>

### placeholderの設定
```javascript
//スニペット
if (${1:condition} ${2|<,>,<=,>=,==,!=|} $3 ${4|&&,\|\|,!|} ${5:condition} ${6|<,>,<=,>=,==,!=|} $7) {
  $0
}
```
`${1:condition}`とすることで、1番目にカーソルの当たるところがconditionと表示されるようになります。右に行ったところへ`${5:condition}`とありますが、この数字を1に変えると、2か所を同時に入力させられます。

<br>
<br>

### 配列の設定
```javascript
//スニペット
if (${1:condition} ${2|<,>,<=,>=,==,!=|} $3 ${4|&&,\|\|,!|} ${5:condition} ${6|<,>,<=,>=,==,!=|} $7) {
  $0
}
```
次に配列すなわちセレクトメニューですが、

`${2|<,>,<=,>=,==,!=|}`

このように、選択できるようにしたい要素の前後を`|`(パイプライン)で囲うことによって作ることができます。この例では、4番目にカーソルが来たときにも同じように選択できるようになっていますが、ここで注意が必要です。4番目の要素では、

`&&(なおかつ)` `||(もしくは)` `!(ではない)`

という条件分岐に必要な記号を並べています。注意すべきはこの`||(もしくは)`です。ここでは`\`(バックスラッシュ)を入れてあげないと、うまく表示させられません。

<br>
<br>
<br>

## さいごに

もっと色々と書こうと思ったのですが、これで一応はある程度のスニペットを作成できると思いますので一旦締めさせていただきます。