開発完了
概要
2026年1月1日、GitHub Actionsのデプロイが連続2回失敗した。両方とも同一の原因:Node.js ヒープメモリ不足。
失敗したRun
| Run ID | コミット | 失敗時刻 |
|---|---|---|
| 20632558839 | feat: URL構造の改善計画を文書化し、移行手順とテストコードを追加 | 04:32:30 UTC |
| 20631627161 | Add Deep Research prompt for FC町田ゼルビア... | 03:13:59 UTC |
エラーメッセージ
FATAL ERROR: Reached heap limit Allocation failed - JavaScript heap out of memory
<--- Last few GCs --->
[2158:0x3f6f0000] 161832 ms: Mark-Compact 2038.4 (2085.2) -> 2035.6 (2094.7) MB,
pooled: 0 MB, 1423.24 / 0.00 ms (average mu = 0.245, current mu = 0.180)
allocation failure; scavenge might not succeed
発生状況
pnpm generate(Nuxt SSG)のプリレンダリング中に発生。
失敗直前に処理していたページ(両Run共通):
/2025-12-26/prompts/prompt-sanga/2025-12-26/prompts/prompt-urawa/2025-12-26/prompts/prompt-verdy
約2GB(2038-2043MB)のヒープメモリを使用した時点でクラッシュ。
2件目のRunでは追加でディスク容量不足の警告も発生:
##[warning]You are running out of disk space. Free space left: 85 MB
直近の成功したデプロイ
| Run ID | コミット | 完了時刻 | 所要時間 |
|---|---|---|---|
| 20631294525 | feat: 各VueページにOGメタタグを追加し... | 02:38:32 UTC | 3m22s |
成功時と失敗時の差分:
- コンテンツ数の増加(338ファイル処理)
- promptsページ(Jリーグクラブ用Deep Researchプロンプト)の追加
原因分析
直接の原因:大量のMarkdownファイル追加
成功したデプロイ(a4fb41c)と失敗したデプロイ(47d2d7f)の間で、+21,038行(24ファイル) が追加された。
主な追加ファイル(Jリーグクラブ用Deep Researchプロンプト):
| ファイル | 行数 |
|---|---|
| prompt-verdy.md | 1,305行 |
| prompt-sanfrecce.md | 1,265行 |
| prompt-vissel.md | 1,235行 |
| prompt-gamba.md | 1,230行 |
| prompt-jubilo.md | 1,225行 |
| prompt-kawasaki.md | 1,225行 |
| prompt-nagoya.md | 1,225行 |
| prompt-sagan.md | 1,225行 |
| prompt-fmarinos.md | 1,205行 |
| prompt-consadole.md | 1,205行 |
| prompt-sanga.md | 1,195行 |
| prompt-reysol.md | 1,195行 |
| prompt-zelvia.md | 1,116行 |
技術的な要因
- メモリ使用量の増加: SSGは全ページをメモリに読み込んでHTMLに変換するため、1ファイル1,200行超の巨大Markdownが13個追加されたことで2GBを超過
- GitHub Actions ubuntu-latestのデフォルト設定: Node.jsのmax-old-space-sizeがデフォルト値(約2GB)
- 大量の静的ページ生成: 338コンテンツファイル + Jリーグ62クラブ + コーディング規約158ルール
対策案
即時対応(推奨)
deploy.ymlのGenerate static siteステップにNODE_OPTIONSを追加:
- name: Generate static site
run: pnpm generate
working-directory: apps/web
env:
NODE_OPTIONS: "--max-old-space-size=4096"
OG_SECRET: ${{ secrets.OG_SECRET }}
これによりNode.jsのヒープ上限を4GBに拡大。ubuntu-latestは7GBのRAMを持つため、4GBは安全な値。
長期対応
- Nuxtの並列プリレンダリング設定:
nuxt.config.tsでnitro.prerender.concurrencyを調整 - インクリメンタルビルドの検討: 変更されたページのみ再生成
- キャッシュの活用: pnpmキャッシュを再有効化(現在一時的に無効)
適用した修正
1. Node.jsヒープメモリ拡大(deploy.yml)
- name: Generate static site
run: pnpm generate
working-directory: apps/web
env:
NODE_OPTIONS: "--max-old-space-size=4096"
OG_SECRET: ${{ secrets.OG_SECRET }}
2. promptsディレクトリをプリレンダリングから除外(nuxt.config.ts)
nitro: {
prerender: {
ignore: [/\?/, /\/prompts\//],
}
}
巨大なプロンプトファイル(各1,200行超)はSSGで事前生成する必要がないため、除外してメモリ消費を削減。
ステータス: 修正済み(2026-01-01)