VSCodeの拡張機能・設定を共有してチームみんなでエンジョイナイスDX

普段、VSCodeを使って業務を行なっています。
VSCodeにはプロジェクトに設定ファイルを設置するだけで、推奨拡張機能を表示させたり、VSCodeの設定を統一したりすることができる便利な機能があります。
チームで開発する際に他のメンバーもVSCodeを使用している場合、お手軽にナイスなDXをチームのみんなで共有できるのでその手順を紹介します。

### 前提
VSCodeのバージョン: 1.40.2
普段はフロントエンジニアとしてHTML, CSS, JavaScript(TypeScript)を中心に扱っています。


# 推奨拡張機能を表示する
[公式ドキュメント](https://code.visualstudio.com/docs/editor/extension-gallery#_workspace-recommended-extensions)


みんなで使っていきたい便利な推奨機能をワークスペースに設定することができます。
推奨拡張機能をインストールしていない環境でそのプロジェクトを開くと、右下にポップアップでお知らせしてくれるようになります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/174446/8a1a3f33-b2cb-0d34-c092-5a4e2416b4f9.png)
ここで「推奨事項を表示」を押し推奨拡張機能の一覧が表示される画面で拡張機能をまとめてインストールすることができます。
<img width="231" alt="スクリーンショット 2019-12-03 1.55.32.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/174446/88da822c-7e32-b46c-e036-6c6145c365a9.png">

## やり方
### .vscode/extensions.jsonを作成する
コマンドパレットから`拡張機能： 推奨事項の拡張機能を構成（ワークスペースフォルダー） Extensions: Show Recommended Extensions(Workspace Folder)`を選択すると`.vscode/extensions.json`が生成されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/174446/659863a0-2771-792b-9380-57f5d25d3c4e.png)

### 推奨する拡張機能を設定する
`.vscode/extensions.json`の`recommendations`に`{publisher}.${name}`の形式で拡張機能を記述します。

```json:.vscode/extensions.json
{
  "recommendations": [
    "dbaeumer.vscode-eslint",
    "streetsidesoftware.code-spell-checker"
  ]
}
```

対象の拡張機能の画面でコマンドパレットを開き、`拡張機能： 拡張機能の推奨事項に追加（ワークスペースフォルダー） Extensions: Add Recommended Extensions(Workspace Folder)`を選択することでも追加可能です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/174446/f01dbfe9-fe94-6cd2-eaa8-1f826d993b36.png)


### 非推奨な拡張機能を書く
推奨拡張機能や共有設定・その他プロジェクトの固有のタスク(npm scriptとか)とバッティングする拡張機能があれば`unwantedRecommendations`に記述することで非推奨にできます。

```json:.vscode/extensions.json
{
  "unwantedRecommendations": [
    "hookyqr.beautify"
  ]
}
```

### チーム開発にオススメの拡張機能
- 各種linter
[ESLint](https://marketplace.visualstudio.com/items?itemName=dbaeumer.vscode-eslint)・[HTMLHint](https://marketplace.visualstudio.com/items?itemName=mkaufman.HTMLHint)など

- [Prettier - Code formatter](https://marketplace.visualstudio.com/items?itemName=esbenp.prettier-vscode)
コードを整形してくれる

- [Code Spell Checker](https://marketplace.visualstudio.com/items?itemName=streetsidesoftware.code-spell-checker) 
辞書にない単語に波線を表示してスペルミスを教えてくれる

- [EditorConfig for VS Code](https://marketplace.visualstudio.com/items?itemName=EditorConfig.EditorConfig)
コーディングスタイルを統一してくれる

- [Live Share](https://marketplace.visualstudio.com/items?itemName=MS-vsliveshare.vsliveshare)
リアルタイムで共同開発ができる

- [EvilInspector](https://marketplace.visualstudio.com/items?itemName=saikou9901.evilinspector)
全角スペースを強調してくれる

# VSCodeの設定を統一する
[公式ドキュメント](https://code.visualstudio.com/docs/getstarted/settings)

設定画面を開き、ワークスペースのタブを選択する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/174446/07ee653c-1787-57ef-b0c3-fff9218b6a44.png)

ここで設定を変更すると.vscode/settings.jsonに設定を追加することができます。

### オススメ設定
PrettierやESLintで保存時にautoFixすると大変捗ります。
プロジェクトの環境に合わせていい感じの設定を探りましょう。

```json:.vscode/settings.json
{
  "eslint.autoFixOnSave": true,
  "eslint.validate": [
    "javascript",
    "javascriptreact",
    { "language": "typescript", "autoFix": true },
    { "language": "typescriptreact", "autoFix": true }
  ],
  "[json]": {
    "editor.formatOnSave": true,
    "editor.defaultFormatter": "esbenp.prettier-vscode"
  }
}
```

# おわりに
こだわりの設定を追加した.vscode/ディレクトリをgitで管理すれば、新しいメンバーがチームに参画してもすぐに環境を統一して作業に入ることができますね。
エンジョイナイスDX！