Nuxt-ViteでNuxtの開発を快適にする

# はじめに

Nuxtで開発をしていると、開発サーバを起動する際、クライアントサイド、サーバサイドの準備に結構時間がかかると感じる人は多いのではないかと思います。
そこで、[Vite](https://github.com/vitejs/vite) という高速なフロントエンド開発ツールを使ってNuxtの開発も高速化してみようというのが今回の目的です。
ちなみに、Nuxt3(2021/7/11時点では未リリース)では標準で vite に対応するようです。今回は Nuxt2 系で Vite を使ってみます。


# 使用した環境

Windows10 PC
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82535/2e1ab81d-3847-12f9-474f-056fb887edcf.png)

VSCode
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82535/36fb2b40-3fde-84f2-db00-72b27a0252f4.png)

Docker Desktop
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82535/5f0752aa-480a-84aa-4b5f-b41225bff3cd.png)


# VSCode で Docker 環境を起動する

私のいつものやり方で、VSCode の RemoteDevelopment を使って環境を汚さず進めていきます。

1) VSCode を起動してプロジェクトフォルダ(/dev/nuxt-vite)を作成して開きます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82535/c9abc51d-5aa4-cf9f-35c7-bf4b363f8224.png)

2) Dockerfile で node 環境を用意します。

```dockerfile:Dockerfile
FROM node:alpine
ENV CHOKIDAR_USEPOLLING=true
RUN apk update && apk add git
```

CHOKIDAR_USEPOLLING=true がないと Windows ではソースコード編集後の自動読み込みが機能しないようです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82535/59f4f3c5-732b-326d-fe57-a77532dbc999.png)

3) ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82535/f896aa01-e02a-bbfc-adfc-a08c1d7a9237.png) から Reopen in Container を選択して Dockerfile の環境を起動します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82535/6957e0f5-ed48-f375-41a6-9dcd614ef3be.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82535/d0cf1874-a80b-c105-7857-087839156b87.png)

4) メニューの Terminal / New Terminal からターミナルを起動して nuxt プロジェクトを作成します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82535/3e084ef0-bdd6-4825-fb20-1240d25cddea.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82535/82f53e29-48aa-151a-603b-bf086624a0a9.png)

npx create-nuxt-app で nuxt プロジェクトを作成します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82535/894583d3-2e91-ab96-02ea-6d686ff8c993.png)

```terminal:Nuxtプロジェクト作成
# npx create-nuxt-app nuxt-vite
Need to install the following packages:
  create-nuxt-app
Ok to proceed? (y) 
npm WARN deprecated urix@0.1.0: Please see https://github.com/lydell/urix#deprecated
npm WARN deprecated resolve-url@0.2.1: https://github.com/lydell/resolve-url#deprecated

create-nuxt-app v3.7.1
✨  Generating Nuxt.js project in nuxt-vite
? Project name: nuxt-vite
? Programming language: TypeScript
? Package manager: Npm
? UI framework: None
? Nuxt.js modules: (Press <space> to select, <a> to toggle all, <i> to inve
rt selection)
? Linting tools: (Press <space> to select, <a> to toggle all, <i> to invert
 selection)
? Testing framework: None
? Rendering mode: Universal (SSR / SSG)
? Deployment target: Static (Static/Jamstack hosting)
? Development tools: (Press <space> to select, <a> to toggle all, <i> to in
vert selection)
? What is your GitHub username? 
? Version control system: Git
npm WARN deprecated urix@0.1.0: Please see https://github.com/lydell/urix#d
eprecated
npm WARN deprecated resolve-url@0.2.1: https://github.com/lydell/resolve-ur
l#deprecated
npm WARN deprecated querystring@0.2.0: The
npm WARN deprecated @types/browserslist@4.15.0: This is a stub types defini
tion. browserslist provides its own type definitions, so you do not need th
is installed.
npm WARN deprecated @types/anymatch@3.0.0: This is a stub types definition.
 anymatch provides its own type definitions, so you do not need this instal
led.
npm WARN deprecated chokidar@2.1.8: Chokidar 2 will break on node v14+. Upg
rade to chokidar 3 with 15x less dependencies.
npm WARN deprecated core-js@2.6.12: core-js@<3.3 is no longer maintained an
d not recommended for usage due to the number of issues. Because of the V8 
engine whims, feature detection in old core-js versions could cause a slowd
own up to 100x even if nothing is polyfilled. Please, upgrade your dependen

🎉  Successfully created project nuxt-vite

  To get started:

        cd nuxt-vite
        npm run dev

  To build & start for production:

        cd nuxt-vite
        npm run build
        npm run start


  For TypeScript users. 

  See : https://typescript.nuxtjs.org/cookbook/components/
npm notice 
npm notice New minor version of npm available! 7.18.1 -> 7.19.1
npm notice Changelog: https://github.com/npm/cli/releases/tag/v7.19.1
npm notice Run npm install -g npm@7.19.1 to update!
npm notice 
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82535/7959d933-3002-5f8f-cb7c-e56f46f982a8.png)

5) プロジェクトフォルダを一つ上のフォルダに移動

作成後のフォルダが /dev/nuxt-vite/nuxt-vite となっているので重複しているフォルダをまとめます。

```terminal:フォルダ統合
mv nuxt-vite/* .
mv nuxt-vite/.* .
rmdir nuxt-vite
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82535/7b8e684b-e3af-b117-4dd3-b6f80b83dac7.png)


# 通常の開発環境の起動時間を確認する

package.json を選択すると下に NPM SCRIPTS が出てくるので、その中の dev を実行(三角のボタンを押す)します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82535/c79832f7-d549-a249-cca5-f8506f6b5b71.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82535/566bfd78-c4c5-df48-6431-fe77f480bea4.png)
↑のClient, Serverのbuilding に結構時間がかかります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82535/5d6ccbb2-c38e-47bc-3c69-9e9890015993.png)

Client 側で 13.55 秒, Sever 側で 11.87 秒かかりました。

これは初回のみかとおもいきや、2回目でも同じくらいかかります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82535/8582f783-7ae1-3b0f-e72a-936beb452fbe.png)

右下に Open in Browser ボタンが出ればクリックしてブラウザを開きます。（出ない場合はブラウザで [http://localhost:3000](http://localhost:3000) を開いてください）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82535/7f41c741-1bdc-adf0-88a4-f161fb8e5a85.png)

初期画面がこれまでとバージョンと変わっていますね。とりあえず、通常の nuxt 開発環境ができました。
開発環境の起動に毎回30秒程度はかかる感じです。(Dockerなので遅いというのもあると思います)

# Nuxt-Vite を入れる

それでは、本題の [Nuxt-Vite](https://vite.nuxtjs.org/) を入れてみましょう。

```terminal:Nuxt-Viteインストール
# npm i -D nuxt-vite
```

インストール出来たら Nuxt の設定の buildModules 部分に 'nuxt-vite' を追加します。

```json:nuxt-config.js
(省略)
  buildModules: [
    // https://go.nuxtjs.dev/typescript
    '@nuxt/typescript-build',
    'nuxt-vite', //追加
  ],
(省略)
```

これで準備完了です。
先ほどと同じで NPM SCRIPTS の dev を実行します。（実行中の場合は CTRL+Cでいったん終了させます。）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82535/88e61571-9587-ff7e-32e8-4e784936d078.png)

すると1168ミリ秒とあるように12秒程度で起動しました。
2倍以上にスピードアップしましたね。

ソースを書き換えた時のブラウザへの速度も速くなったように感じます。
試したことがない方は一度やってみてください。快適になりますよ。