Vue.js + TS + pug + sass + AppEngineの開発環境における個人的ベストプラクティス
はじめに
表題のようなセットアップでアプリを作ってクラウドにデプロイする事が多いのですが、今まで試行錯誤してきて現時点での個人的ベストプラクティスに辿り着いたので、記録として残しておきます。
プロジェクト作成
まずはプロジェクトを作成します。
bun create vue@latest
オプションはプロジェクトに応じて好みで選んでください。
Pug/Sass
僕はプロトタイプを作る事が多い関係上、同じ結果を少ない記述量で得られるpug
とsass
を愛用しています。
Vue
プロジェクト内で使用できるようにするには、以下の手順が必要です。
インストール
pug
とsass
それぞれと、pug
をVSCode
に認識させるためのプラグインをインストールします。
bun add -D pug sass @vue/language-plugin-pug
tsconfig.json
プラグインを有効にするため、tsconfig.json
に以下の設定を追加します。
{
...
"vueCompilerOptions": {
"plugins": ["@vue/language-plugin-pug"]
}
...
}
.eslintrc.cjs
また、<template lang="pug">
を使用するため、.eslintrc.cjs
に以下の設定を追加します。
module.exports = {
...
overrides: [
{
files: ["*.vue"],
rules: {
"no-unused-vars": "off",
"@typescript-eslint/no-unused-vars": "off",
},
},
],
};
クラウドデプロイ環境
僕はgcloud
コマンドをローカルにインストールしておらず、Docker
コンテナ内でコマンドを実行するようにしています。
この環境下で快適にデプロイ作業ができるように、以下のような工夫をしています。
deployフォルダ内に必要なものをまとめる
ルートにdeploy
フォルダを作り、以下のファイルを作成します。
.gcloudignore
gcloud app deploy
コマンドでアップロードされたくないファイル群を記述します。
通常のSPAであれば書き出されたソースが入っているdist
フォルダだけアップされていれば良いので、ここではdist
以外をignoreしています。
*
!dist/**
app.yaml
AppEngine
で動作させるため、ランタイムの設定やルーティングの処理を行います。
runtime: php82
handlers:
- url: /(.*\..+)$
secure: always
static_files: dist/\1
upload: dist/(.*\..+)$
- url: /.*
secure: always
static_files: dist/index.html
upload: dist/index.html
- url: /
secure: always
static_files: dist/index.html
upload: dist/index.html
env: standard
instance_class: F1
automatic_scaling:
min_idle_instances: automatic
max_idle_instances: 1
min_pending_latency: 3000ms
max_pending_latency: automatic
max_instances: 2
docker-compose.yml
docker
コマンドをオプション付きで毎回叩くのは大変なので、docker-compose
を使用します。
services:
sdk:
image: google/cloud-sdk
platform: linux/x86_64
working_dir: /app
tty: true
volumes:
- ./:/app
- ./gcloud:/root/.config/gcloud
.gitignore更新
上記docker-compose.yml
を使用すると、deploy
フォルダ内にgcloud
という認証などの情報が含まれるフォルダが作られますので、ignore
しておきます。
...
gcloud/
ビルドの書き出し先を変更
vue
のデフォルト設定ではbuild
したものはルートのdist
フォルダに書き出されますが、これをdeploy/dist
フォルダに変更します。
export default defineConfig({
build: {
outDir: './deploy/dist'
},
...
})
gcloudコマンドへのショートカットをpackage.jsonに追加
現在のディレクトリ構造だとルートからgcloud
を起動するために長いコマンドが必要になるので、パッケージスクリプトに追加してしまって簡単にgcloud
コマンドを呼び出せるようにします。
{
...
"scripts": {
...
"gcloud": "docker-compose -f deploy/docker-compose.yml exec sdk gcloud"
},
...
}
こうする事で、以下のようにgcloud
コマンドの前にbun
をつけるだけで各種コマンドを実行できます。
bun gcloud config list
使用の流れ
ここまでで環境の構築は終わりました。
実際の開発では
- 普通にvueアプリを作成する
-
bun run build
でアプリ書き出し -
bun gcloud app deploy
でAppEngine
へデプロイ
というシンプルなステップで使用する事ができます。
おわりに
今回の記事は、今まで書いてきた記事をちょっとアップデートしてまとめたものになります。
自分が新規プロジェクトを作る時に楽をするためにまとめたものですが、同じような事をしたくて躓いている人の参考になれば幸いです。
参考記事
Discussion