ビルド効率化実装プロンプト
このドキュメントは、次回セッションで生成AIに渡すためのプロンプトです。
実施状況
| タスク | 状態 | 実施日 |
|---|---|---|
| pnpmキャッシュ追加 | ⚠️ 無効化 | 2025-12-30 |
| WAV変換ローカル化 | ✅ 完了 | 2025-12-30 |
| Nitroログレベル変更 | ❌ 取消 | 2025-12-30 |
| OGイメージ Workers化 | ⏸️ 見送り | 2025-12-30 |
コンテキスト
プロジェクト概要
- Nuxt 3 + @nuxt/content のブログサイト
- Cloudflare Pages にデプロイ
- GitHub Actions で CI/CD
現在の問題
GitHub Actions でのビルドに約4分かかっている。主なボトルネック:
- OGイメージの静的生成(約100秒、55MB)
FFmpegインストール(32秒)- 毎回同じWAVファイルを変換✅ 解決済みpnpmキャッシュなし(22秒)⚠️ キャッシュはプリレンダリングエラーを引き起こすため無効化
関連ドキュメント
/2025-12-29/build-optimization-analysis.md- 詳細な分析結果/2025-12-30/og-image-workers-migration.md- OGイメージ Workers 化計画
タスク1: GitHub Actions キャッシュ追加 ⚠️ 無効化
実施内容
.github/workflows/deploy.yml を編集して、pnpm のキャッシュを追加したが、プリレンダリングエラーを引き起こすため無効化。
問題
pnpmキャッシュを有効にすると一部のJリーグクラブページ(parceiro等)でSSRプリレンダリング時に500エラーが発生。
原因: キャッシュに古い/不整合な依存関係が残り、SSR時のランタイムエラーを引き起こした。
現在のファイル
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '22'
# cache: 'pnpm' # プリレンダリングエラーを引き起こすため無効化
変更点
- FFmpeg インストールステップを削除
- pnpm setup を Node.js setup より前に移動
→ 無効化cache: 'pnpm'オプションを追加
詳細
.claude/issues/2025-12-30-prerender-jleague-500.md を参照
タスク2: WAV→WebM 変換のローカル化 ✅ 完了
実施内容
- ローカルで6つのWAVファイルをWebMに変換
- WebMファイルをGitにコミット
- WAVファイルを削除
nuxt.config.tsのWAV変換処理を削除.github/workflows/deploy.ymlからFFmpegインストールを削除
変換結果
| ファイル | WAVサイズ | WebMサイズ |
|---|---|---|
| boki3_ch4_0_00 | 377KB | 115KB |
| boki3_ch4_0_01 | 989KB | 290KB |
| boki3_ch4_0_02 | 1.3MB | 387KB |
| boki3_ch4_0_03 | 1.6MB | 479KB |
| boki3_ch4_0_04 | 2.3MB | 685KB |
| boki3_ch4_0_05 | 1.2MB | 352KB |
| 合計 | 7.4MB | 2.3MB |
約70%のサイズ削減を達成。
nuxt.config.ts の変更
削除したコード:
import { execSync } from "node:child_process"import { unlink } from "node:fs/promises"- WAV変換処理(
convertWavToOpus関数)
タスク3: Nitro ログレベルの変更 ❌ 取消
実施内容
nuxt.config.ts で Nitro のログレベルを warn に設定したがエラー発生時に詳細が見えなくなるため取消。
取消理由
プリレンダリングエラーのデバッグ時、ログが抑制されて原因特定が困難になったため。
現在の設定
nitro: {
preset: "cloudflare-pages-static",
prerender: {
crawlLinks: true,
routes: ['/blog', '/'],
concurrency: 10 // CI環境での安定性向上のため追加
}
}
タスク4: OGイメージの Cloudflare Workers 化(見送り)
結論
検討の結果、見送りとした。現在の静的生成方式を維持する。
見送りの理由
- 現在の構成で十分機能している
- ビルド時間100秒は許容範囲
- 55MBのdistサイズもCDN配信なら問題なし
- OGイメージへのアクセスは実際少ない
- SNSシェア時のクローラーのみがアクセス
- 1日1万アクセス程度のサイトでは影響軽微
- 複雑さを増やすより、シンプルな構成を維持
- Workers化は「やれば速くなる」けど「やらなくても困らない」最適化
- メンテナンスコストを考えると現状維持が妥当
例外
日本語クイズのOGイメージは動的パラメータ(正解数/問題数)が必要なため、既にWorkers化済み。 このように動的にパラメータが変わるケースではWorkers化が有効。
詳細
/2025-12-30/og-image-workers-migration.md を参照
優先順位
| 順番 | タスク | 難易度 | 効果 | 状態 |
|---|---|---|---|---|
| 1 | pnpmキャッシュ追加 | 低 | 20秒短縮 | ⚠️ 無効化(エラー発生) |
| 2 | WAV変換ローカル化 | 低 | 32秒短縮 | ✅ 完了 |
| 3 | Nitroログレベル変更 | 低 | ログ削減 | ❌ 取消(デバッグ困難) |
| 4 | OGイメージ Workers化 | 高 | 100秒短縮 | ⏸️ 見送り |

実施後の結果
ビルド時間
| 項目 | 変更前 | 変更後 |
|---|---|---|
| FFmpegインストール | 32秒 | 0秒 |
| pnpm install | 22秒 | 22秒(キャッシュ無効) |
| Generate static site | 3分14秒 | 3分14秒 |
| Deploy | 17秒 | 17秒 |
| 合計 | 4分30秒 | 約4分 |
結果
- FFmpegインストール削除で32秒短縮
- pnpmキャッシュは問題発生のため無効化(効果なし)
- 合計で約30秒の短縮を達成
補足情報
ディレクトリ構造
mdx-playground/
├── .github/workflows/deploy.yml
├── apps/
│ ├── web/
│ │ ├── nuxt.config.ts
│ │ ├── public/audio/boki3/chapter4_0/*.webm ← WAV から変換済み
│ │ └── app/components/OgImage/
│ │ ├── OgImageTemplate.vue
│ │ └── JLeagueOgImage.vue
│ └── workers/
│ └── og/src/index.ts