質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Vue.js

Vue.jsは、Webアプリケーションのインターフェースを構築するためのオープンソースJavaScriptフレームワークです。

Firebase

Firebaseは、Googleが提供するBasSサービスの一つ。リアルタイム通知可能、並びにアクセス制御ができるオブジェクトデータベース機能を備えます。さらに認証機能、アプリケーションのログ解析機能などの利用も可能です。

Nuxt.js

Nuxt.jsは、ユニバーサルなSPAが開発可能なVue.jsベースのフレームワーク。UIの描画サポートに特化しており、SSRにおけるサーバーサイドとクライアントサイドのUIレンダリングなどさまざまな機能を持ちます。

MicroCMS

MicroCMSとは、APIベースのヘッドレスCMSです。日本製のため、デフォルトで日本語に対応しており、サポートも豊富。管理画面でも作成したコンテンツなどが見やすくシンプルで、APIの管理がしやすい点も特徴です。

Heroku

HerokuはHeroku社が開発と運営を行っているPaaSの名称です。RubyやNode.js、Python、そしてJVMベース(Java、Scala、Clojureなど)の複数のプログラミング言語をサポートしている。

Q&A

1回答

916閲覧

NuxtのHerokuへのデプロイに20分くらいかかります、、

yagasaki

総合スコア10

Vue.js

Vue.jsは、Webアプリケーションのインターフェースを構築するためのオープンソースJavaScriptフレームワークです。

Firebase

Firebaseは、Googleが提供するBasSサービスの一つ。リアルタイム通知可能、並びにアクセス制御ができるオブジェクトデータベース機能を備えます。さらに認証機能、アプリケーションのログ解析機能などの利用も可能です。

Nuxt.js

Nuxt.jsは、ユニバーサルなSPAが開発可能なVue.jsベースのフレームワーク。UIの描画サポートに特化しており、SSRにおけるサーバーサイドとクライアントサイドのUIレンダリングなどさまざまな機能を持ちます。

MicroCMS

MicroCMSとは、APIベースのヘッドレスCMSです。日本製のため、デフォルトで日本語に対応しており、サポートも豊富。管理画面でも作成したコンテンツなどが見やすくシンプルで、APIの管理がしやすい点も特徴です。

Heroku

HerokuはHeroku社が開発と運営を行っているPaaSの名称です。RubyやNode.js、Python、そしてJVMベース(Java、Scala、Clojureなど)の複数のプログラミング言語をサポートしている。

0グッド

0クリップ

投稿2022/12/20 03:21

前提

Nuxt3(3.0.0)
Firestore
microCMS
Heroku

でSSRのサイトを作っています。

初Nuxtです。JS初心者でもありReactも触ったことがありません。
Herokuも初です。

ビルドやHerokuへのデプロイに20分くらい時間がかかります。。

ブログのようなサイトなのですが、タグなどが多数あり、タグ一覧ページ等含め、現在170ページほどあります。

microCMSさんの記事だとNuxtで100記事のビルドに13秒くらいとのことです。

何が原因でこんなに時間がかかるのか分かりません。。

以下package.jsonです。

json

1{ 2 "private": true, 3 "scripts": { 4 "build": "nuxt build", 5 "dev": "nuxt dev", 6 "start": "nuxt start", 7 "heroku-postbuild": "npm run build", 8 "generate": "nuxt generate", 9 "preview": "nuxt preview", 10 "lint:js": "eslint --ext \".js,.vue\" --ignore-path .gitignore .", 11 "lint:style": "stylelint \"**/*.{vue,css}\" --ignore-path .gitignore", 12 "lint": "yarn lint:js && yarn lint:style" 13 }, 14 "engines": { 15 "node": "16.x" 16 }, 17 "devDependencies": { 18 "@nuxt/image-edge": "^1.0.0-27840416.dc1ed65", 19 "@types/sanitize-html": "^2.8.0", 20 "@typescript-eslint/eslint-plugin": "^5.42.1", 21 "@typescript-eslint/parser": "^5.42.1", 22 "@vueuse/core": "^9.4.0", 23 "@vueuse/nuxt": "^9.4.0", 24 "eslint": "^8.27.0", 25 "eslint-config-prettier": "^8.5.0", 26 "eslint-plugin-nuxt": "^4.0.0", 27 "nuxt": "3.0.0", 28 "nuxt-basic-authentication-module": "^0.2.1", 29 "patch-vue-directive-ssr": "0.0.1", 30 "prettier": "^2.7.1", 31 "sass": "^1.54.8", 32 "sass-loader": "^13.1.0", 33 "stylelint": "^14.11.0", 34 "stylelint-config-prettier": "^9.0.3", 35 "stylelint-config-recess-order": "^3.0.0", 36 "stylelint-config-standard-scss": "^6.0.0", 37 "typescript": "^4.8.4", 38 "webpack-bundle-analyzer": "^4.7.0" 39 }, 40 "dependencies": { 41 "@funken-studio/sitemap-nuxt-3": "^4.0.4", 42 "@gtm-support/vue-gtm": "^2.0.0", 43 "@nuxtjs/eslint-config-typescript": "^11.0.0", 44 "@nuxtjs/eslint-module": "^3.1.0", 45 "@nuxtjs/stylelint-module": "^4.1.0", 46 "@vueform/multiselect": "^2.5.2", 47 "@vueuse/components": "^9.4.0", 48 "awesome-phonenumber": "^4.0.0", 49 "browser-image-compression": "^2.0.0", 50 "chart.js": "^3.9.1", 51 "chartjs-plugin-datalabels": "^2.1.0", 52 "date-fns": "^2.29.3", 53 "firebase": "^9.14.0", 54 "is-https": "^4.0.0", 55 "microcms-js-sdk": "^2.3.2", 56 "node-fetch": "^3.3.0", 57 "node-fetch-native": "^1.0.1", 58 "nuxt-jsonld": "^2.0.3", 59 "sanitize-html": "^2.7.3", 60 "v-pagination-3": "^0.1.7", 61 "vee-validate": "^4.7.2", 62 "vue-chart-3": "^3.1.8", 63 "vue-countup-v3": "^1.1.0", 64 "vue-cropperjs": "^5.0.0", 65 "vue-infinite-loading": "github:nvitius/vue-infinite-loading#next", 66 "vue3-carousel": "^0.2.8", 67 "yup": "^0.32.11" 68 } 69} 70

以下、nuxt.config.tsです。

Typescript

1import { resolve } from 'path'; 2 3const firebaseModules = ["firebase/app", "firebase/auth", "firebase/firestore"]; 4 5export default defineNuxtConfig({ 6 runtimeConfig: { 7 public: { 8 MICROCMS_API_KEY: process.env.MICROCMS_API_KEY || "", 9 MICROCMS_POST_API_KEY: process.env.MICROCMS_POST_API_KEY || "", 10 MICROCMS_CONTACT_API_KEY: process.env.MICROCMS_CONTACT_API_KEY || "", 11 MICROCMS_SERVICE_DOMAIN: process.env.MICROCMS_SERVICE_DOMAIN || "", 12 13 FIREBASE_API_KEY: process.env.FIREBASE_API_KEY || "", 14 FIREBASE_AUTH_DOMAIN: process.env.FIREBASE_AUTH_DOMAIN || "", 15 FIREBASE_PROJECT_ID: process.env.FIREBASE_PROJECT_ID || "", 16 FIREBASE_STORAGE_BUCKET: process.env.FIREBASE_STORAGE_BUCKET || "", 17 FIREBASE_MESSAGING_SENDER_ID: process.env.FIREBASE_MESSAGING_SENDER_ID || "", 18 FIREBASE_APP_ID: process.env.FIREBASE_APP_ID || "", 19 20 RECAPTCHA_SITE_KEY: process.env.RECAPTCHA_SITE_KEY || "", 21 }, 22 }, 23 modules: [ 24 '@vueuse/nuxt', 25 'nuxt-jsonld', 26 '@nuxt/image-edge' 27 ], 28 css: [ 29 '~/assets/scss/style.scss' 30 ], 31 hooks: { 32 'pages:extend'(pages) { 33 pages.push({ 34 name: 'themePage', 35 path: '/theme/page/:p', 36 file: resolve(__dirname, 'pages/theme/index.vue') 37 }); 38 pages.push({ 39 name: 'categoryParent', 40 path: '/category/:slug/page/:p', 41 file: resolve(__dirname, 'pages/category/[slug]/index.vue') 42 }); 43 44 pages.push({ 45 name: 'categoryChild', 46 path: '/category/:slug/:id/page/:p', 47 file: resolve(__dirname, 'pages/category/[slug]/[id].vue') 48 }); 49 50 pages.push({ 51 name: 'tagPage', 52 path: '/tag/:slug/page/:p', 53 file: resolve(__dirname, 'pages/tag/[slug]/index.vue') 54 }); 55 56 } 57 }, 58 vite: { 59 css: { 60 preprocessorOptions: { 61 scss: { 62 additionalData: '@import "@/assets/scss/foundation/_mixin.scss";' 63 }, 64 }, 65 }, 66 build: { 67 rollupOptions: { 68 output: { 69 manualChunks(id) { 70 const seprateModule = firebaseModules.find(module => id.includes(module)); 71 if (seprateModule) return seprateModule; 72 } 73 } 74 } 75 } 76 }, 77 nitro: { 78 compressPublicAssets: true, 79 prerender: { 80 crawlLinks: true 81 } 82 }, 83 build: { 84 transpile: ['chart.js', 'date-fns'], 85 }, 86}); 87

analyzeで見たスクリプトのサイズは2MBほど、Gzipで700KBくらいです。

なぜこんなに時間がかかっているのか、、

eslintとかが原因なのか、chunkサイズの問題なのか、
調べ周りましたが分かりません。。

何かヒントをいただけますと幸いです。

よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

20分のうちどのくらいがNuxt自体に割かれているかが分かればいいのですが、通常データ取得以外で膨大な時間がかかることはありえないため、

  • 拡張したルートのデータ取得部分に大きなタイムアウトが発生している
  • Herokuで無駄なデプロイ準備時間が発生している

のどちらかまたは両方だと思います。

なにか特別な事情があるのかもしれませんが、Nuxtの動作においてHerokuを使うメリットは特にないため、下記の手順でNetlifyにデプロイすることをおすすめします。

https://blog.microcms.io/nuxt-microcms-netlify-portfolio/

投稿2023/02/04 03:56

編集2023/02/04 04:10
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問