Vue.js＋ESLint＋Prettier on VSCode環境構築まとめ

**2020/7/6 本記事に記載している方法は今はもううまく動かないです。
今ESLint＋Prettierを一緒に使うなら以下を使って.eslintrcを編集するしかなさそうです。**
https://github.com/prettier/eslint-config-prettier
https://github.com/prettier/eslint-plugin-prettier


# はじめに
Vue.jsをVSCodeで開発するときの、「これだけやっときゃOK！」的な構築手順メモです。

**2019/6/30 使っていて色々といけてない部分があったため大幅に書き直しました。**

## 完成形

* Vue.jsの雛形を作成し、VSCodeですぐにでも開発ができる状態になる
* ESLintはローカルにインストールされたものを使う
* ホットリロードの開発サーバによって、ファイルを更新したら即時画面に反映される
* リントにESLintを使用し、フォーマッタにPrettierを使用する
* ファイル保存時に自動的にコードが修正される

## 前提条件

* OS：WSL(Pengwin)
* Node.js：v10.16.0
* npm：6.9.0
* Visual Studio Code：1.35.1

ですが、大体どんなOSでも同じだと思います。


# 構築手順
## Vue CLIのインストール[^1]
[^1]: [Overview | Vue CLI](https://cli.vuejs.org/guide/)
コマンドラインからVue.jsの雛形を作成できる、Vue CLIをインストールします。コマンドライン上から実行するため、「-g」オプションでグローバルインストールします。

注）`npm -g i vue-cli`では古いバージョンが入ってしまいます。

```
$ npm -g i @vue/cli
```


## Vue UIの実行
Vue CLIはコマンドラインからVue.jsの雛形を作成してくれます。そして、Vue UIはそれをブラウザ上のGUIから実行できるものです。

```
$ vue ui
```
このコマンドを打つと、ブラウザが起動し以下の画面が表示されるはずです。
「作成」、「ここに新しいプロジェクトを作成する」をクリックします。

![localhost_8000_project_select (6).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/227999/e6a9e761-bba7-1c0f-d090-0801627739b3.png)

プロジェクト名を入力し、「次へ」をクリックします。
その他の項目は必要に応じて入力します。

![localhost_8000_project_select (2).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/227999/c5e30eeb-fcbb-f196-0ba1-d495c8c1d2a8.png)


「手動」をクリックし、「次へ」をクリックします。
![localhost_8000_project_select.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/227999/223cc5ed-28b1-7e67-e96f-9542fbe874e9.png)

「Linter / Formatter」をオンにし、「次へ」をクリックします。
他にも必要なものがあればオンにしておきます。

![localhost_8000_project_select (3).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/227999/06787c02-2407-8213-623d-2149945bbb49.png)

「ESLint + Standard config」を選択し、「プロジェクトを作成する」をクリックします。

ここでは、ESLintの整形のルールを変更しています。
standardスタイルは文末のセミコロン禁止や、インデントをスペース2個に限定する、などの特徴があります[^2]。
[^2]: [JavaScript Standard Styleのススメ](https://qiita.com/munieru_jp/items/ca16cbfa859468137d2e)
注）standardスタイルが一番好きなのでそう設定しています。

![localhost_8000_project_select (4).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/227999/fc9efd69-bef6-ab70-4b61-1857465e51c1.png)

プリセット名を入力し、「プロジェクトを作成する」をクリックします。今後新しいプロジェクトを作成する際に同じ設定で作成できます。これには少し時間がかかります。

![localhost_8000_project_select (5).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/227999/14de0a60-22c8-25ef-c219-878e166a5606.png)


以上でVue CLI側の準備は完了です。
ブラウザはそのまま、VSCodeを開きます。

## VSCode拡張機能のインストール
次に、VSCodeの拡張機能をインストールします。これは、.vueファイルをフォーマットしたり、コード成型するのに必要です。

以下の三つをインストールします。

* Vetur
* ESLint
* Prettier


## PrettierとESLintの共存設定
コードフォーマッタであるPrettierとリントツールであるESLintを両方入れると、競合しておかしな動作になることがあります。そこで、npmで共存用のモジュールを入れるわけですがこれもまた色々種類があります。

* eslint-plugin-prettier
* prettier-eslint
* eslint-config-prettier

今回は「[prettier-eslint](https://github.com/prettier/prettier-eslint)」を使用するため、以下のコマンドでインストールします。

```
npm i prettier-eslint -D
```

## VSCodeが.vueファイルをESLintするように設定

VSCodeを起動します。
「ファイル」→「基本設定」→「設定」で表示される検索窓に「setting」などと入力します。するとどこかに`setting.jsonで編集`なるリンクがあると思うのでクリックすると、setting.jsonが表示されます。

![キャプチャ5.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/227999/c5123527-95df-d6ab-329c-8616100a750c.png)

以下の行を追記します。

```json:settings.json追記内容
    "[javascript]": {
        "editor.tabSize": 2
    },
    "[python]": {
        "editor.tabSize": 4
    },
    "eslint.validate": [
        {
            "language": "vue",
            "autoFix": true
        },
        {
            "language": "javascript",
            "autoFix": true
        }
    ],
    "eslint.autoFixOnSave": true,
    "prettier.eslintIntegration": true,
    "vetur.format.defaultFormatter.js": "prettier-eslint",
    "editor.formatOnSave": true,
    "editor.detectIndentation": false
```

pythonは念のため。

# 試してみる
## アプリケーション実行
Vue UIの画面から、アプリケーションを実行してみます。
左の「タスク」、「serve」、「タスクの実行」の順にクリックします。

![localhost_8000_project_select (7).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/227999/b4e32303-54e8-6aa5-ec3b-fe4ea1a6e5ed.png)


これによって、`http://localhost:8080`にWebpackの開発サーバが立ち上がります（立ち上がらない場合は「アプリを開く」をクリックして下さい）。
開発サーバにはホットリロード機能がついており、ファイルを変更して保存した時点で画面にも反映されます。

## ESLintによるコード修正
次に、ESLintによるコード修正の様子を見てみます。

App.vueを以下のように書き換えてみます。

```vue:App.vue（抜粋）
<script>
import HelloWorld from './components/HelloWorld.vue'
const a = 0; // 追加
export default {
  name: 'app',
  components: {
    HelloWorld
  }
}
</script>
```

この状態で`Ctrl+S`で保存すると、ESLintのstandardスタイルの設定に従って、セミコロンが消えます。
template部分のインデントをぐちゃぐちゃにしても`Ctrl+S`で全部直る！！



# おわりに
VSCode+ESLint+Prettierの組み合わせの個人的ベストプラクティスをようやく確立できました。
特に、[Ctrl+Sでちゃんと成形されない問題](https://qiita.com/fukasawah/items/cfff8957f3956850dc7e)ははまった・・・