DockerでNuxt.jsプロジェクト新規作成セット

# 概要

* nuxt.jsのセットアップ、新規プロジェクト作成、サーバー起動までをかんたん手順で行えます。
* Dockerコンテナとして構築するので、お手元のPCを汚しません。
* 複製、破棄、構築し直しも、手軽に行えます。

# github（一式ダウンロード）

https://github.com/yagrush/docker-nuxtjs

# 必要なもの

* Docker
* docker-compose
* makeコマンド

がインストールされている Mac / Linux。
（WindowsではnodeのDockerコンテナが起動しませんでした。要調査。）

# 使い方

## https://github.com/yagrush/docker-nuxtjs のリポジトリをcloneまたはダウンロード＆解凍する。

## 以下の２つのファイルを編集する。

### .env

PROJECT_NAMEの値をご自分の希望に合わせて編集してください。
この値は、nuxt.jsプロジェクトのディレクトリ名にもなります。

```.dotenv
PROJECT_NAME=my_project
```

### Makefile

Makefileは、makeコマンド用の設定ファイルです。
これを使うと、複数のコマンド操作に名前を付けて、ショートカットのように簡単に呼び出せます。

さて、最近のバージョンでは、`create-nuxt-app`（nuxt.jsプロジェクト作成コマンド）実行時、途中でカスタム内容の指定を求められます。
本一式ではその入力を自動化するために create-nuxt-app実行時のオプション --answers で予めカスタム内容を指定するようにしています。

カスタム項目一覧はこちらの公式ソースコードからご確認いただけます。
[nuxt.js公式リポジトリ内、prompts.js](https://github.com/nuxt/create-nuxt-app/blob/master/packages/create-nuxt-app/lib/prompts.js) 
--answers のパラメータをJSON形式で指定して、ご自分のご希望に合わせて下さい。

```makefile
...
...
create-nuxt-app:
	docker-compose exec dev bash -c 'create-nuxt-app $$PROJECT_NAME --answers "{ \
	\"name\": \"$$PROJECT_NAME\", \
	\"language\": \"js\", \
	\"pm\": \"yarn\", \
	\"ui\": \"vuetify\", \
	\"features\": [\"axios\"], \
	\"linter\": [\"eslint\"], \
	\"test\"  : \"jest\", \
	\"mode\"  : \"universal\", \
	\"target\"  : \"static\", \
	\"devTools\": [\"jsconfig.json\"] }" \
	'
...
...
```

※ エスケープが若干複雑ですみません。
`Makefile` > `docker-compose` > `bash -c` と入れ子になっているので…
基本的にサンプルをコピペ＆編集して頂ければ大丈夫かとは思います。
（サンプルの設定は、単なる私の好みです。）

## コマンドインターフェース（ターミナル）を起動する。

## ダウンロードしたフォルダの中に移動する。

```shell
# git cloneした場合
cd docker-nuxtjs

# ZIPをダウンロードして解凍した場合
cd docker-nuxtjs-master
```

## 以下のコマンドを実行する。

```shell
make init
```

成功すると、このようなコマンドログになります。↓

```shell
...
...
yarn run v1.22.4
$ eslint --ext .js,.vue --ignore-path .gitignore . --fix
Done in 24.57s.

🎉  Successfully created project my_project

  To get started:

	cd my_project
	yarn dev

  To build & start for production:

	cd my_project
	yarn build
	yarn start

  To test:

	cd my_project
	yarn test

docker-compose exec dev bash -c 'sed -i -e "s@export default {@export default {\n  telemetry: false,\n@g" $PROJECT_NAME/nuxt.config.js'
docker-compose exec -d dev bash -c 'cd $PROJECT_NAME && npm run dev'

$
```

### ちょっぴり解説コーナー

```
docker-compose exec dev bash -c 'sed -i -e "s@export default {@export default {\n  telemetry: false,\n@g" $PROJECT_NAME/nuxt.config.js'
```

↑このコマンドは、nuxt.config.jsのexport default節に `telemetry: false` を追記します。
これにより、最近`npm run dev`実行時に「サービス向上のため情報送信に協力するか？」の回答入力を要求されてしまうのを自動的に回避（falseだと拒否）します。

```shell
docker-compose exec -d dev bash -c 'cd $PROJECT_NAME && npm run dev'
```

↑Nuxt開発サーバーを起動しています。
Nuxt開発サーバーは、ソースコードの変化をウォッチして即座に再レンダリングしブラウザ画面に反映してくれます。
npm run devはnuxtコマンドを実行するのと同義になります。

## Nuxt.jsサンプルページが起動しているはずなのでアクセスしてみる。

* http://localhost

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/553715/c30fb0a9-cc16-6fe0-bfd7-4b712493a46e.png)

↑ こんなページ、見れましたでしょうか？
見れたら成功です。

本リポジトリ内の`app/`(make initすれば生成されます)とdockerコンテナ内の`/work/app`が同期（ボリュームマウント）しているので、例えば`app/$PROJECT_NAME/pages/index.vue`を編集すれば、即座に↑のサンプルページに反映されます。

## Dockerコンテナを停止する

```shell
make stop
```

## Dockerコンテナを起動する

```shell
make up
```

## Dockerコンテナを再ビルドする

```shell
make remake
```

docker-compose.yml や Dockerfile を変更したあと反映させたい時はこのコマンドを。
※ Nuxt.jsプロジェクトの再作成はしません。Dockerコンテナとしての再ビルドです。

## 本一式を完全廃棄する

```shell
make destroy
```

これにより

* Dockerコンテナ停止
* Dockerコンテナ削除

が実行されます。
※ app/ の中身をいきなり削除はしないのでご安心ください。
そのあと、ご自身の手で本一式のディレクトリを削除してください。

# あとがき

js界隈は変化が速過ぎて、WEB文献そのままでは全然動かず苦労します。
これを流用して少しでもショートカットして、みなさんのコーディング時間確保などに役立てれば幸いです。

また、nginxで動かすproduction版など改善の余地がまだまだあるので、時間あるときにまた更新していきます。