tapitapi’s blog

1日1杯タピオカ!エンジニア

【vue.js】Vue Routerでプレレンダリング

Vue Routerを使って、ルーティングを管理するようになって、問題が発生!

それは、ルート以外のページで、ブラウザをリロードしたり、URLを直打ちしてアクセスした場合、404(ページが見つかりません)エラーが出てしまうこと。

 

これは、vue.jsで作成したアプリが、実際にはサーバ内にindex.htmlしか存在しないため起こります。

※index.html 内のリンクで遷移している場合は、vue.jsがルーティングして画面遷移してくれます

 

この解決には、様々な方法があるようなのですが、今回、プリレンダリングを使用して解決したので紹介します。

 

プレレンダリングとその他の方法については下記を参考にさせていただきました。

qiita.com

 

vueの公式リファレンスでも、SSRよりもプレレンダリングが簡単で良いとお勧めしていました。(小規模のアプリなら。規模が大きくなるとビルドに時間がかかってしまう、、)

ssr.vuejs.org

 

vue Router導入については下記が参考になれば。

tapitapi.hatenadiary.com

 

前置きが長くなりましたが、vueでプレレンダリングを行う手順について紹介します。

 

1. prerender-spa-plugin をインストール

下記コマンド実行

npm install prerender-spa-plugin

 

公式リファレンス

github.com

 

2.vue.config.js に下記を追加

const path = require('path')
const PrerenderSPAPlugin = require('prerender-spa-plugin')

module.exports = {
 configureWebpack: () => {
  return {
   plugins: [
    new PrerenderSPAPlugin({
    staticDir: path.join(__dirname, 'dist'),
    routes: [ '/', '/page2'] # 作成したいページを指定
    })
   ]
  }
 }
}

 

3. ビルド

下記コマンド実行

npm run build

 

distフォルダ内に、page2/index.htmlが生成されれば成功です!!

 

以上ですーーー!!

 

どうしても、SPA(普通のhtmlやphpなど)寄りの開発経験が長いと、ページ遷移を考えてしまいがち。

でも、せっかくvue.jsで軽くて早いアプリを作るなら、ページをなるべく分けないようにする方が、vue.jsの良さを生かせるな、と思いました。

 

大きなアプリなら、phprailsなどと上手く組み合わせてvue.jsを使うことで、サクサク動く快適アプリを作れそう!

 

とは言っても、あまりvueの性能は良くはない(文法は簡単なので導入コストは低い)みたいなので、導入コストと比較して、他の言語での実装も考慮しないとかもです。

ics.media

 

今後ももうちょっとvueを使ってみようと思ってますーーー

 

おやすみぃぃぃ