Golangの開発生産性を上げるVSCodeスニペットランキング

本投稿はMIXI DEVELOPERS Advent Calendar 2023 4日目の記事です。

https://qiita.com/advent-calendar/2023/mixi


この記事では、Golang用のVSCodeユーザースニペットの中で自分が特に役に立っていると思うものをランキング形式で発表します！

# 前提:

### VSCode ユーザースニペットとは
コードとキーを予め登録することでキー入力するだけで設定したコードが簡単に呼び出せる機能です。
キーボードソフトの辞書機能に似ていて、特定のキーワード入力で予め設定されたコードが挿入されると考えていただけるとわかりやすいと思います。

### VSCode ユーザースニペット 登録方法

⌘ + Shift + P で検索フィールドを展開し、`snippets` を入力すると候補にあがってくるのでクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/262578/75e71a57-d97c-19a9-b3da-930d94e0c8ca.png)

以下のような画面が出てくるので go.json をクリック。
存在しない場合は New Snippets のところから go を選択して作成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/262578/cfbb7c11-7da9-2374-b370-4a269f6ef54a.png)

形式はjsonで保存されます。





今回紹介するスニペットのダイジェストGIF
![vscode-snnippet.mov.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/262578/7954f140-1600-0315-9332-966b4e42670b.gif)


# おすすめランキング

本題のおすすめスニペットです。
ランキング形式で３位まで紹介しています。

## 1位: エラーチェックスニペット

`ie` 

![vscode-snnippet-2.mov.sb-362552bf-NaQ3db.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/262578/dc3c1962-059b-a653-cd92-eaa8dd4cd134.gif)

このスニペットは Go で頻出のエラーハンドリングのコードを展開します。

``` json
    "if err != nil": {
        "prefix": "ie",
        "body": [
            "if err != nil {",
            "\t$1",
            "}"
        ]
    },
```

## 2位: fmt スニペット
`fff`
![vscode-fff.mov.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/262578/e97d4162-5af5-40c0-4f23-0b9b1010f7f9.gif)


このスニペットはデバッグ時に変数の内容を簡単にコンソールに出力できます。地味だけどよく使うスニペットです。
好みに応じて `%#v` の前にわかりやすい区切り文字、例えば `=======` というような文字を入れても良いと思います。

``` json
	"Print to console": {
		"prefix": "fff",
			"body": [
				"fmt.Printf(\"%#v\\n\", $1)"
			],
		},
  ```




## 3位: context.Context スニペット
`c`

![vscode-3.mov.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/262578/d0bc3369-010a-16e9-244e-853bdd48253d.gif)

Go　で多い引数
書くと地味に長いのでこちらも重宝しています

``` json
    "context.Context": {
        "prefix": "c",
            "body": [
                "ctx context.Context,$1"
            ],
        },
```

## 番外編

番外編では使用頻度はそれほど高くないけれど使いどころで便利であるスニペットを紹介します!

### errors.Is

``` json
    "errors.Is": {
        "prefix": "erris",
            "body": [
                "errors.Is(err, $1)"
            ],
        },
```

たまに使うエラー評価ですが、使用頻度と元のコードの書きやすさを考慮して、このランキングからは漏れました。

### assert/require 系

``` json
   "Testify Assert Nil": {
        "prefix": "anil",
        "body": [
        "assert.Nil(t, ${1:actual})", 
        "$0"
        ]
    },
    "Testify Assert Equal": {
        "prefix": "aeq",
        "body": [
        "assert.Equal(t, ${1:expected}, ${2:actual})",
        "$0"
        ]
    },
    "Testify Assert No Error": {
        "prefix": "anerr",
        "body": [
        "assert.NoError(t, ${1:err})",
        "$0"
        ]
    },
    "Testify Require Nil": {
        "prefix": "reqnil",
        "body": [
        "require.Nil(t, ${1:actual})", 
        "$0"
        ]
    },
    "Testify Require Equal": {
        "prefix": "reqeq",
        "body": [
        "require.Equal(t, ${1:expected}, ${2:actual})",
        "$0"
        ]
    },
    "Testify Require No Error": {
        "prefix": "reqnerr",
        "body": [
        "require.NoError(t, ${1:err})",
        "$0"
        ]
    },
```

このスニペットはTestify ライブラリで処理の評価をするときに展開します。
Testify を使っているのであれば非常に強力なスニペットだと思います。しかしTestify という条件付きのため惜しくもランキング漏れとしました。

# まとめ

今回は個人的な経験から推しのスニペットを数点紹介しました
みなさんもスニペットを活用して着実に開発効率上げていきましょう！
もしおすすめのスニペットがあればコメントで教えてください！