開発メモ
Nuxtビルド最適化:341ページを137秒でSSG
現在のハードウェア
| 項目 | 値 |
|---|---|
| CPU | AMD Ryzen 7 5800X(8コア16スレッド) |
| RAM | 32GB |
| 並列度 | 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)
キャッシュの種類
- @nuxt/contentキャッシュ - Markdownのパース結果をキャッシュ(効果大)
- Viteビルドキャッシュ -
node_modules/.viteに依存関係の事前ビルド - OSファイルシステムキャッシュ - 読み込んだファイルがRAMに残る
- .nuxtキャッシュ - 型定義やビルド中間ファイル
ビルドフェーズ時間(実測値)
scripts/measure-deploy.ps1 で計測(ビルド部分):
| Phase | Seconds | Minutes | 割合 |
|---|---|---|---|
| Initialization | 3.9 | 0.07 | 3% |
| Nuxt Setup | 16.5 | 0.28 | 14% |
| Client Build (Vite) | 29.8 | 0.50 | 25% |
| Server Build + Prerender | 67.1 | 1.12 | 57% |
| Finalization | 0.3 | 0.01 | 0% |
| Total | 117.8 | 1.96 | 100% |
ボトルネック: 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コア | 並列度 |
|---|---|---|
| ローカル(実測値) | 16 | 64 |
| GitHub Actions Free | 2 | 8 |
現在の設定
// 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 | コア/スレッド | 価格(中古〜新品) | 予想時間 | 投資効率 |
|---|---|---|---|---|
| 現状 5800X | 8/16 | - | 137秒 | - |
| 5900X | 12/24 | 3.5〜4.5万円 | 約90秒 | ◎ |
| 5950X | 16/32 | 5〜7万円 | 約70秒 | ○ |
AM5移行(マザーボード+DDR5必要)
| 構成 | 費用 | 予想時間 |
|---|---|---|
| 7950X + MB + DDR5 | 12〜15万円 | 約55秒 |
| 9950X + MB + DDR5 | 15〜20万円 | 約45秒 |
おすすめ
Ryzen 9 5900X(約4万円)が費用対効果最高。マザーボードそのままで約1.5倍高速化。
注意点
- コア数に完全比例はしない(I/Oボトルネックもある)
- NVMe SSDなら効果大、SATA SSDだとI/Oで頭打ち
- 32GB RAMは十分、増設不要
残存する警告(無害)
以下の警告は引き続き出力されるが、実害なし:
- node:crypto外部化 -
useOgSignature.tsがサーバー専用のため問題なし - 500KB超チャンク - プロンプト入りmarkdownによるもので想定内
- cache-driver.js解決エラー - Nitroの既知問題、GitHub Issue #27424 で追跡中
- _routes.json not found - SSGでは不要
参考
- Nitro Config
- Nuxt Devtools
- GitHub Issue #30067 - Nitroデフォルト値の不整合について
- GitHub Discussion #26622 - cache-driver警告について