• #nuxt
  • #performance
  • #devtools
  • #ssg
  • #nitro
  • #hardware
開発メモ

Nuxtビルド最適化:341ページを137秒でSSG

現在のハードウェア

項目
CPUAMD Ryzen 7 5800X(8コア16スレッド)
RAM32GB
並列度64(16スレッド × 4)

ビルド時間の推移

状態時間備考
最適化前208.2秒devtools警告あり
最適化後(初回)174.0秒devtools無効化
2回目158.8秒キャッシュ効果
3回目136.9秒キャッシュ温まり

最終結果: 341ページ / 137秒 = 1ページあたり約0.40秒

キャッシュが効く理由(実測値)

連続実行で速くなるのは以下のキャッシュが「温まる」ため。

ビルドログ比較

ファイル追加直後(1ファイルパース):

[@nuxt/content] ✔ Processed 2 collections and 325 files in 2745.86ms (324 cached, 1 parsed)

2回目以降(全キャッシュヒット):

[@nuxt/content] ✔ Processed 2 collections and 325 files in 2527.44ms (325 cached, 0 parsed)

キャッシュの種類

  1. @nuxt/contentキャッシュ - Markdownのパース結果をキャッシュ(効果大)
  2. Viteビルドキャッシュ - node_modules/.vite に依存関係の事前ビルド
  3. OSファイルシステムキャッシュ - 読み込んだファイルがRAMに残る
  4. .nuxtキャッシュ - 型定義やビルド中間ファイル

ビルドフェーズ時間(実測値)

scripts/measure-deploy.ps1 で計測(ビルド部分):

PhaseSecondsMinutes割合
Initialization3.90.073%
Nuxt Setup16.50.2814%
Client Build (Vite)29.80.5025%
Server Build + Prerender67.11.1257%
Finalization0.30.010%
Total117.81.96100%

ボトルネック: Server Build + Prerender(67秒)が全体の57%を占める。

  • 3352モジュールのクライアントビルド: 30秒
  • 827モジュールのサーバービルド + 341ページのプリレンダリング: 67秒
[16:53:52] Nuxt Setup started
[16:54:09] Client Build started
[16:54:36] 3352 modules transformed
[16:54:39] Server Build started
[16:54:53] 827 modules transformed
[16:55:46] Build complete!

最適化内容

1. devtoolsを本番で無効化

pnpm deploy:cloudflare 実行時に以下の警告が出ていた:

WARN  Slow module @nuxt/devtools took 9458.52ms to setup.

nuxt.config.ts に以下を追加して解消:

export default defineNuxtConfig({
  compatibilityDate: "2025-10-02",
  devtools: { enabled: process.env.NODE_ENV === 'development' },
  // ...
})

2. pnpm updateで依存関係を最適化

pnpm --filter nuxt-app update

224パッケージ追加、169パッケージ削除。

3. ルートにpackage.jsonを追加

モノレポ構成を標準化し、cd apps/web && pnpm update が動作するようにした。

プリレンダリング並列化の仕組み

デフォルト値

設定元デフォルト値
Nitro本体1
Nuxtオーバーライドcpus().length * 4

NuxtはCPUコア数に基づいて自動で並列度を決定する。

環境による違い

環境CPUコア並列度
ローカル(実測値)1664
GitHub Actions Free28

現在の設定

// nuxt.config.ts
nitro: {
  preset: "cloudflare-pages-static",
  prerender: {
    crawlLinks: true,
    routes: ['/blog', '/'],
    // クエリパラメータとpromptsディレクトリを除外
    ignore: [/\?/, /\/prompts\//],
    failOnError: false
    // concurrency は未設定 → Nuxtデフォルト(CPUコア数 × 4)
  }
}

GitHub Actionsでメモリ問題が発生した理由

並列度が高い → 同時にページをレンダリング → メモリ消費増加 → OOM

そのため、GitHub Actionsではなくローカルビルドからのデプロイに切り替えた。

ハードウェアアップグレードの費用対効果

SSGはCPUバウンドな処理のため、CPUアップグレードで高速化できる。GPUは効果なし。

AM4互換(マザーボード交換不要)

CPUコア/スレッド価格(中古〜新品)予想時間投資効率
現状 5800X8/16-137秒-
5900X12/243.5〜4.5万円約90秒
5950X16/325〜7万円約70秒

AM5移行(マザーボード+DDR5必要)

構成費用予想時間
7950X + MB + DDR512〜15万円約55秒
9950X + MB + DDR515〜20万円約45秒

おすすめ

Ryzen 9 5900X(約4万円)が費用対効果最高。マザーボードそのままで約1.5倍高速化。

注意点

  • コア数に完全比例はしない(I/Oボトルネックもある)
  • NVMe SSDなら効果大、SATA SSDだとI/Oで頭打ち
  • 32GB RAMは十分、増設不要

残存する警告(無害)

以下の警告は引き続き出力されるが、実害なし:

  1. node:crypto外部化 - useOgSignature.ts がサーバー専用のため問題なし
  2. 500KB超チャンク - プロンプト入りmarkdownによるもので想定内
  3. cache-driver.js解決エラー - Nitroの既知問題、GitHub Issue #27424 で追跡中
  4. _routes.json not found - SSGでは不要

参考