DockerでクリーンなVue.js開発環境を構築してみる
はじめに
Vue.jsの開発のためのクリーンな環境を構築するためにDockerを使った場合の流れをまとめてみました。
開発用ディレクトリの作成とGit初期化
今回作成するVueのプロジェクト名は my-app としたいと思います。
$ mkdir -p my-app
# カレントディレクトリを変更しておきます
$ cd my-app
Docker環境起動
Dockerイメージを作成
Vue開発に必要なライブラリをGlobalインストールしたDockerイメージを作成します。
まずは、以下のような Dockerfile を作成します。
$ cat <<'EOF' >Dockerfile
FROM node:13.7.0-alpine3.10
RUN npm install -g vue-cli \
&& npm install -g @vue/cli-service-global
EOF
Buildします。作成するDockerイメージ名はdocker-vueとしています。
$ docker build -t docker-vue .
問題なくイメージが作成できれば、次に進みましょう。
Vueアプリケーションの初期化
以下のコマンドを実行してプロジェクトを作成します。
何度か選択肢を聞かれますが、はデフォルトのままで問題ありませんのでEnterキーを連打します。
# 以降のコマンドで利用している ${PWD##*/} は、カレントディレクトリ名となっている
$ echo ${PWD##*/}
my-app
$ docker run --rm -v $PWD:/${PWD##*/} --workdir /${PWD##*/} -it docker-vue \
vue init webpack .
うまく行けば以下のようなメッセージが表示されます。
(数分かかりますのでのんびり待ちましょう。)
> # Project initialization finished!
> # ========================
>
> To get started:
>
> npm run dev
Documentation can be found at https://vuejs-templates.github.io/webpack
これでVueアプリの「ボイラープレート」(昔はテンプレートやスケルトンと言いました。)が作成されました。
Docker内でコマンドを実行しましたが、ローカルPCのディスクをマウントしていた(-v $PWD:/${PWD##*/}
オプション)ので、ローカルPC上にもソースコードが配置されているはずです。
$ ls -l
total 608
-rw-rw-r-- 1 genzouw wheel 102 12 29 20:03 Dockerfile
-rw-r--r-- 1 genzouw wheel 549 12 29 20:06 README.md
drwxr-xr-x 10 genzouw wheel 320 12 29 20:06 build/
drwxr-xr-x 6 genzouw wheel 192 12 29 20:12 config/
-rw-r--r-- 1 genzouw wheel 268 12 29 20:06 index.html
drwxr-xr-x 1077 genzouw wheel 34464 12 29 20:08 node_modules/
-rw-r--r-- 1 genzouw wheel 604685 12 29 20:08 package-lock.json
-rw-r--r-- 1 genzouw wheel 2689 12 29 20:06 package.json
drwxr-xr-x 7 genzouw wheel 224 12 29 20:06 src/
drwxr-xr-x 3 genzouw wheel 96 12 29 20:06 static/
drwxr-xr-x 4 genzouw wheel 128 12 29 20:06 test/
Vueの開発用サーバを起動して、本当に利用できるようになっているのかを確かめたいのですが、このままではDockerコンテナ外からアクセスできません。config/index.js
にVueの設定ファイルを一部変更し、コンテナ外からアクセスできるようにします。
また、デフォルトではページ遷移時の挙動をURLのフラグメント( #
)を利用して表現するように動作しますが、個人的にはこの方法はすきではありません。src/router/index.js
にフラグメントなしの方式に変更します。( mode: 'history'
のフィールドを Router
に設定)
$ sed -i "s/host: 'localhost',/host: '0.0.0.0',/" ./config/index.js
$ sed -i "/export default new Router({/a\ \ mode: 'history'," ./src/router/index.js
その他、Docker上でVueアプリケーションを動作させた場合の問題についても対処しておきます。
ローカルPCでファイルを変更しても、Docker上のVueプロセスはファイル変更を検知してくれません。
これを検知させるには、以下のコマンドを叩いて設定を変更する必要があります。
$ sed -i 's/poll: config.dev.poll,/poll: 1000,/' build/webpack.dev.conf.js
起動します。
$ docker run --rm -v $PWD:/${PWD##*/} --workdir /${PWD##*/} -p 8080:8080 docker-vue \
npm run dev
# ※上記コマンドだとあまりに長いので、以下のようにaliasをさく制しておくと便利です。
$ alias npm='docker run --rm -v $PWD:/${PWD##*/} --workdir /${PWD##*/} -p 8080:8080 docker-vue npm''
ブラウザでアクセス
「http://localhost:8080
」にアクセスしてみましょう。
うまく行けばVue.jsの初期ページが表示されるはずです。
その他
bootstrap-vue
の導入
即席のサイト構築の際に 「Bootstrap」 を使うとデザインについて細かいことを考えなくてすみます。(デザインが苦手な僕には助かります。)
Vue.js
で構築するアプリケーションに 「Bootstrap」 を適用するためには、 npm
コマンドで以下のライブラリをインストールするのが手っ取り早いです。
$ docker run --rm -v $PWD:/${PWD##*/} --workdir /${PWD##*/} docker-vue \
npm install --save bootstrap-vue bootstrap
src/main.js
にも、 bootstrap-vue
が利用できるようにパッケージのロード処理を追記しておきます。
// The Vue build version to load with the `import` command
// (runtime-only or standalone) has been set in webpack.base.conf with an alias.
import Vue from 'vue'
import App from './App'
import router from './router'
+ import BootstrapVue from 'bootstrap-vue'
+ import 'bootstrap/dist/css/bootstrap.css'
+ import 'bootstrap-vue/dist/bootstrap-vue.css'
+ Vue.use(BootstrapVue)
ディスカッション
コメント一覧
まだ、コメントがありません