DockerでVue3の開発環境を構築する

# はじめに
[前回の記事](https://qiita.com/subun33/items/822c236e97e8ee85f664)では、Rails6 + PostgreSQLの開発環境をDockerで構築しました。

https://qiita.com/subun33/items/822c236e97e8ee85f664

当面の目標であるRails6 + Vue3 + PostgreSQLの環境構築を実現するために、次のステップとしてVue3単独の開発環境をDockerで構築してみます。

**(2022.9.18追加)**
Rails6 + Vue3 + PostgreSQLの開発環境をDockerで構築するまでが完了したので、続きを記事にまとめました。

https://qiita.com/subun33/items/b3b48b7fb04113f4a049

# 目次
[1. 開発環境](#1-開発環境)
[2. 今回のゴール](#2-今回のゴール)
[3. 本編](#3-本編)
[3-1. 事前準備](#3-1-事前準備)
[3-2. コンテナを起動](#3-2-コンテナを起動)
[3-3. Vueをインストール](#3-3-vueをインストール)
[3-4. プロジェクトを作成](#3-4-プロジェクトを作成)
[3-5. プロジェクトを起動](#3-5-プロジェクトを起動)
[3-6. Dockerfileの修正](#3-6-dockerfileの修正)
[4. さいごに](#4-さいごに)

# 1. 開発環境
- macOS Monterey 12.3.1
- Docker 20.10.13
- docker-compose 1.29.2

# 2. 今回のゴール
DockerでVue3の開発環境を構築すること

# 3. 本編
今回、構築したいVue3については、前回のRails + PostgreSQLのようにDockerの公式サイトにチュートリアルがなかったので、Vueの[公式サイト](https://v3.ja.vuejs.org/guide/installation.html#%E8%87%AA%E5%88%86%E3%81%A6%E3%82%99%E3%83%9B%E3%82%B9%E3%83%88%E3%81%99%E3%82%8B)を見ながら進めていきたいと思います。

## 3-1. 事前準備
まずは作業ディレクトリを準備します。
```bash
$ mkdir docker-vue
$ cd docker-vue
```
作業ディレクトリ内に以下のDockerfileを作成します。

```Dockerfile:Dockerfile
FROM node:16.16

RUN apt-get update -qq

WORKDIR /app
COPY . /app

CMD ["/bin/bash"]
```
今回作成したDockerfileはNode.jsのベースイメージのみであり、追加でライブラリ等はインストールしていません。
なお、`apt-get update`は今後ライブラリをインストールすることに備えて、ライブラリの一覧を更新しているだけです。
ここから、実際にコンテナ内でコマンドを実行しながらVue3を導入していきます。

そして、Vueを起動することができれば、そのコマンドをDockerfileに反映させるという手順で進めていきます。

## 3-2. コンテナを起動
それでは早速以下のコマンドを実行して、イメージのbuild、コンテナの起動をします。
```bash
$ docker image build . -t node_sample
$ docker container run --rm -it -p 8080:8080 node_sample
```

`-p 8080:8080`は、ローカルの8080番ポートからコンテナの8080番ポートに接続するための設定です。
Vueのプロジェクトを作成し、起動できていることを確認するために設定しています。

## 3-3. Vueをインストール
ここからは先ほど起動したコンテナ内での作業となります。
yarnを使ってVueをインストールしたいので、まずはyarnが入っているかを確認します。
```bash
$ yarn -v
# 1.22.19
```

今回使用したNode.jsのベースイメージには、初めからyarnがインストールされていました。

それではVueの公式サイトに沿って進めていきます。
公式サイトによるとVueの導入にはいくつかの方法があるようですが、今回はCLIを使いたいと思います。

まずは以下のコマンドを実行します。
```bash
$ yarn global add @vue/cli
```

インストールが完了したので、確認してみます。
```bash
$ vue -version
# @vue/cli 5.0.8
```

## 3-4. プロジェクトを作成
Vue CLIが導入できたので、コンテナ内でプロジェクトを作成します。
作成方法は、[こちら](https://cli.vuejs.org/)のVue CLIの公式のとおりです。
途中で選択肢が出てくるので、Vue3とYarnを選択します。
```bash
$ vue create my-project

Vue CLI v5.0.8
? Please pick a preset: (Use arrow keys)
❯ Default ([Vue 3] babel, eslint)  # これを選択
  Default ([Vue 2] babel, eslint) 
  Manually select features 
? Pick the package manager to use when installing dependencies: (Use arrow keys)
❯ Use Yarn   # これを選択
  Use NPM 

🎉  Successfully created project my-project.
👉  Get started with the following commands:

 $ cd my-project
 $ yarn serve

```

プロジェクトの作成が完了しました。
ご丁寧に、プロジェクトを起動させるためのコマンドまで教えてくれています。

 ## 3-5. プロジェクトを起動
指示どおりにコマンドを入力して、プロジェクトを起動させます。
```bash
 $ cd my-project
 $ yarn serve
```

プロジェクトが起動したら、[localhost:8080](http://localhost:8080/)にアクセスしてみます。
![my-project.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1581554/7b0ede13-a555-862a-6568-eb4034a7dc40.png)

無事プロジェクトの起動が確認できました！やった！

## 3-6. Dockerfileの修正
無事プロジェクトが起動した喜びで満足しかけていましたが、Dockerfileへの反映がまだ残っていました。

早速、以下のとおり修正します。

```Dockerfile:Dockerfile
FROM node:16.16

RUN apt-get update -qq && yarn global add @vue/cli # ここを修正

WORKDIR /app
COPY . /app

CMD ["/bin/bash"]
```

結局、Vueをインストールしただけなので、ほとんど修正する箇所はありませんでした。

[3-2. コンテナを起動](#3-2-コンテナを起動)から[3-5. プロジェクトを起動](#3-5-プロジェクトを起動)（[3-3. Vueをインストール](#3-3-vueをインストール)を除く）をあらためて実行すると、同じようにプロジェクトが起動することを確認できました。

# 4. さいごに
もっと詰まるだろうと思って始めてみたら、意外とあっさりVueプロジェクトが起動できて拍子抜けしているというのが正直なところです。

他人の作ったDockerfileを見ずに自分で書いてみる
→エラーが出まくって一つ一つ解消していく
→エラーを解消する中で理解を深めるという
という目的もあったのですが、こちらの効果は薄かったようです。

さて、次は前回作成したRails6 + PostgreSQLと今回作成したVue3の開発環境をdocker-comoseでまとめて管理できるようにしていきたいと思います！