RiderのLiveTemplate(スニペット)を活用してUnityC#のコーディングを楽にする

# 環境
JetBrains Rider 2018.1
Windows 10

# LiveTemplateについて
Riderには**LiveTemplate**と呼ばれるテキストの自動補完機能があります。

例えば、sfieldと入力したら[SerializeField]と入力させるといった自動補完をユーザーが自分で作成することができます。

![9.gif](https://qiita-image-store.s3.amazonaws.com/0/44288/06540db0-fb3b-d51b-e3a8-e0b27e3e9470.gif)

<br>
他にも、変数と関数をまとめて入力するなどといったことができます。 (便利！

![11.gif](https://qiita-image-store.s3.amazonaws.com/0/44288/2496630d-0f7c-ed7d-e354-a107cab0727f.gif)


今回はこのLiveTemplateの作り方を解説していきたいと思います。

# 1. LiveTemplateの編集画面を開く
File > Settingsから設定画面を開き、
<img src = "https://qiita-image-store.s3.amazonaws.com/0/44288/094a2900-7666-127f-445c-7dddb11e5e07.png" width = 240>

左側のリストの Editor > LiveTemplateを選択してLiveTemplate編集画面を開きます。
<img src = "https://qiita-image-store.s3.amazonaws.com/0/44288/e99ae29a-a3a6-4f37-8405-c94adda7216b.png">

# 2. グループの作成
右側にあるプラスアイコンをクリックしてグループを作成します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/44288/7eb88aa1-b094-78d4-12f7-934d4894d0ef.png)

名前を入力してOKを押します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/44288/aeba158d-c1fd-e1bd-f39a-2ca5be8c8d2b.png)

"UnityC#"グループが追加されました
![image.png](https://qiita-image-store.s3.amazonaws.com/0/44288/7585f233-7e0f-bd00-1a4b-fc26c4703c0e.png)


# 3. Live Templateの作成
右側にあるプラスアイコンをクリックしてLive Templateを選択します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/44288/c1850bcb-1b69-f6a2-50dd-483822c33792.png)

空のLiveTemplateが作成されます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/44288/4f315506-c4d2-38e7-f9ba-527708b5eb5c.png)

# 4. LiveTemplateを編集してみる

## 設定すべき項目
LiveTemplateで指定する項目は主に以下の**３つ**となります。
1. Abbreviation(どのようなキーボード入力で補完を行うか)
2. Template Text(自動入力させる文字列)
3. Context(どんなファイルで補完を行うか)

## 編集例: [SerializeField]
例えばAbbreviationへsfield、TemplateTextへ[SerializeField]を設定すると
![image.png](https://qiita-image-store.s3.amazonaws.com/0/44288/28ec432c-b274-2ec6-5419-0a48b9909a00.png)

コードエディタでsfieldと入力するだけで[SerializeField]が入力されます。
![9.gif](https://qiita-image-store.s3.amazonaws.com/0/44288/06540db0-fb3b-d51b-e3a8-e0b27e3e9470.gif)

Contextにはどのようなファイルで補完を行うかを設定しておきます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/44288/4be42f3e-a370-4b3c-e50c-6a878fead6d2.png)

デフォルトではContextが未設定になっており、
**Contextが未設定の場合は自動補完が利かない**ので注意が必要です。

今回はContextにOtherを設定しました。
<img src="https://qiita-image-store.s3.amazonaws.com/0/44288/3f751eca-3983-066a-b6d4-d8cd634b1c75.png" width = 400>

**AbbreviationとTemplateTextとContextの３つを設定すれば、LiveTemplateは動くようになります。**

<br>
# おまけ: Template Textで変数を使う
**$**を使うことで、変数を作ることもできます。

例えば、以下のようなTemplateTextを作った場合、
![image.png](https://qiita-image-store.s3.amazonaws.com/0/44288/0ef3e7d0-fc99-7036-ac3a-736c25a70ceb.png)

$$で囲った部分をまとめて入力できます。
![10.gif](https://qiita-image-store.s3.amazonaws.com/0/44288/a2d0c7f5-3bca-1bb6-2504-32c029c80879.gif)

カーソルのジャンプ移動はTabキーで行います。

## 変数エディット
定義した変数はウィンドウ右側にある"Edit Variables"から編集することができます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/44288/36c115e6-1c46-b2b8-25ee-f31406afa5cb.png)

変数のデフォルト値・命名規則などが設定できるようです

##例: SubjectとGet○○AsObservable()をまとめて入力できるようにしてみる
UniRxを使っていて以下のようなコードを書くことがよくありますが、LiveTemplateを使ってまとめて入力できるようにしてみます。

```csharp
private Subject<Unit> _hogeSubject = new Subject<Unit>();

public IObservable<Unit> GetHogeAsObservable()
{
    return _hogeSubject;
}        
```
```text:TemplateTextの中身
private Subject<$Type$> _$Name$Subject = new Subject<$Type$>();

public IObservable<$Type$> Get$Name2$AsObservable()
{
    return _$Name$Subject;
}
```
![image.png](https://qiita-image-store.s3.amazonaws.com/0/44288/94d4515a-3aa8-718a-154d-b1091760f968.png)

やっていることとしては、
・変数Typeのデフォルト値を"Unit"に
・変数Nameのデフォルト値を"name"に
・変数Name2には変数Nameの入力内容をcapitalize(最初の一文字を大文字にする)したものを反映
・変数Name2の入力はスキップする
というルールを定義しています。

![11.gif](https://qiita-image-store.s3.amazonaws.com/0/44288/2496630d-0f7c-ed7d-e354-a107cab0727f.gif)

<br>
Expressionで使用できる関数の一覧は下記URLにまとまっています。
https://www.jetbrains.com/help/rider/2018.1/Edit_Template_Variables_Dialog.html#predefined_functions




# 便利なショートカット(Windows)
Ctrl + E, L 
LiveTemplateの候補一覧を表示

Ctrl + Alt + S
設定画面を開く

#参考URL
Live Templateを使おう！
https://qiita.com/Vexus2/items/cc35757f98ef95871c5f

Live Templates
https://www.jetbrains.com/help/rider/Settings_Live_Templates.html

Creating Source Code Using Live Templates
https://www.jetbrains.com/help/rider/Templates__Applying_Templates__Creating_Source_Code_Using_Live_Templates.html