ポートフォリオサイトをVue2からVue3へ移行する
はじめに
昔作成したポートフォリオサイトを Vue2
-> Vue3
に移行する。
きっかけ
Windows
で node
の環境を作り、firebase
にデプロイしていたのだが、firebase CLI
のアップデートで、古い node
のライブラリと依存関係が解決できなくなっているようで、ビルドができなくなった。
解決するのも面倒なので、 vue3+vite
の環境に移行するかーと思ったので、これをやってみる。
ちなみに、 portfolio
のプロジェクトは private
リポジトリなので、雰囲気だけ伝わってくれれば…!
どちらかというと、ほぼ作業記録になる。
環境
|
|
|
|
手順
今回からは node
を Docker
で管理したいため、全てDocker
内で完結するようにする。
Dockerfileの作成
|
|
compose.ymlの作成
|
|
ここまでで、必要なものは揃った。
ビルド
|
|
ビルドを行い、node
が使えるコンテナを用意する。
|
|
面倒なので、Makefile
を用意して置き、コマンドのエイリアスを定義しておく。
プロジェクトの作成
|
|
でコンテナに入り、
|
|
で vue3+vite+vuetify-vue-router
の環境を作る。
参考: https://zenn.dev/beeeegle/articles/00311e90cf91be
|
|
プロジェクトを1段上にあげる。
|
|
|
|
で vite
のデフォルトのページが表示されることを確認する。
※ここで、 vite.config.js
に、 下記の部分を追記しておくこと。
|
|
移行
animejsのインストール
|
|
mdi/fontのインストール
|
|
※残りはGitHubのコミット履歴を参照
vuetify
のレイアウト修正router.js
,vuetify.js
の修正vuetify2
->vuetify3
で使用できなくなったコンポーネントの修正
残った課題
OptionsAPI
->CompositionAPI
に変える。- レイアウトをもう少しいい感じにしたい…。
ポートフォリオサイト
移行前
移行後
変更点
- ナビゲーションをトップではなくフッターにし、固定にした。
- テーマカラーをダークにした。
/skill
のv-card
内をv-table
にした。
GitHubソースコード
- katsuobushiFPGA/portfolio-vue3
https://github.com/katsuobushiFPGA/portfolio-vue3
上記が作ったものです。
旧ポートフォリオの方は、諸事情により公開できません…。
詰まったポイント
Dockerのユーザ問題
root
ユーザで npm install
, npm run dev
すると、権限周りが面倒なことになるので、 WSL
の ubuntu
ユーザと同じ id
の node
ユーザを使用した。
そのため、 コンテナに入るときは、 node
ユーザを指定している。
viteのlocalhostにアクセスできない。
https://kyoruni.hatenablog.com/entry/vite-docker-localhost を参考にした。
router.jsの正規表現
requireがviteで使えない
参考: https://scrapbox.io/spdbox/Vite%E3%81%A7%E3%81%AFrequire()%E3%81%8C%E4%BD%BF%E3%81%88%E3%81%AA%E3%81%84
参考: https://ja.vitejs.dev/guide/assets.html#new-url-url-import-meta-url
vuetifyのレイアウト修正
GitHubを見てほしい。
特に v-card-title
でwidth
が小さいと折り返されないのは、CSSの知識がなくて時間かかった。
最後は、ChatGPT
に聞いて解決できた。
参考
- Vuetify
https://vuetifyjs.com/en/ - 【Vite*Vue3】コンポーネントライブラリを自作してnpmに公開する手順
https://qiita.com/whopper1962/items/6eaf781b548162205b40 - Docker で Vite 開発サーバーを立てて、ブラウザで表示確認しようとしてつまづいた
https://kyoruni.hatenablog.com/entry/vite-docker-localhost - [Solved] Vue3 Configuration routing error: Catch all routes (“*“) must now be defined using a param with a custom regexp.
https://programmerah.com/solved-vue3-configuration-routing-error-catch-all-routes-must-now-be-defined-using-a-param-with-a-custom-regexp-32886/ - Viteではrequire()が使えない
https://scrapbox.io/spdbox/Vite%E3%81%A7%E3%81%AFrequire()%E3%81%8C%E4%BD%BF%E3%81%88%E3%81%AA%E3%81%84 - 静的アセットの取り扱い
https://ja.vitejs.dev/guide/assets.html#new-url-url-import-meta-url - 【Vuetify 3】基礎設定を考える
https://zenn.dev/viviomega/articles/0c062bffa60488 - Anime.js SVG fill color animation on web page load
https://stackoverflow.com/questions/54492173/anime-js-svg-fill-color-animation-on-web-page-load - Node.js Web アプリケーションを Docker 化する
https://nodejs.org/ja/docs/guides/nodejs-docker-webapp - npm トラブルシューティング
https://qiita.com/hatai/items/ba6eadb758a667345b27 - 最適な Node.js Docker イメージを選択する
https://snyk.io/jp/blog/choosing-the-best-node-js-docker-image/ - 【vue】vuetify3をインストールしてみた話
https://zenn.dev/beeeegle/articles/00311e90cf91be - Vue3でvue-routerを使うときのmain.js
https://note.com/takoyaki_shikibu/n/ne2f3b802e08c - vue-router設定の書き方はVue2とVue3で異なるっぽい
https://note.com/takoyaki_shikibu/n/n88d3660f8539 - Dockerコンテナに一般ユーザーを追加するときのDockerfileの設定
https://qiita.com/Spritaro/items/602118d946a4383bd2bb
おわりに
昔作成したポートフォリオサイトなので、レイアウトやデザインがちょっと微妙な部分があるが、それでもはじめに作ったポートフォリオサイトなので vue3
に移行してそのまま使うことにした。
次回はこれを firebase
か supabase
, vercel
のどれかにデプロイする。
どれが良いかは考えておく…。