最近、このサイトのプロジェクトの Node.js バージョンを上げたら GitHub Actions が途中で止まってしまうという事象がありました。エラー事例ということでどこかの誰かの役に立つかもしれないということで今日はそんな話をします。
Node.js バージョンアップ経緯
以前からお伝えしているように、このサイトは Hexo という Node.js 製の静的サイトジェネレータで作成しています。で、ちょっと前まで Node.js のバージョン 20.19.6 を使っていたのですが、いつのまにか20系はサポートが終わっていて各種依存ライブラリも最新版が動かなくなってしまっていました。
Node.js公式リポジトリ より

で、Active LTS である24系の最新版にしておけばだいたいのものは動くことがわかったので、まずはこのバージョンまで上げておこうという結論に至りました。
バージョンアップ自体は問題なし
メジャーバージョンが4つも上がったのでどうなるかと思いましたが、ローカル環境ではとくに各種動作や表示に問題はなく、また固定ページだけではありますが E2E テストもあるのでそちらも実行しましたがすべてパスすることを確認できていました。
Running 19 tests using 4 workers
✓ 1 [chromium] › tests/about.spec.ts:17:9 › Aboutページ › 内部リンク (2.0s) ✓ 2 [chromium] › tests/about.spec.ts:8:9 › Aboutページ › ページ基本情報 (1.9s) ✓ 3 [chromium] › tests/about.spec.ts:23:9 › Aboutページ › プロフィール情報 (2.3s) ✓ 4 [chromium] › tests/music.spec.ts:8:9 › Musicページ › ページ基本情報 (1.4s) ✓ 5 [chromium] › tests/music.spec.ts:15:9 › Musicページ › SoundCloudプレイヤー (1.1s) ✓ 6 [chromium] › tests/music.spec.ts:23:9 › Musicページ › クレジット表記 (1.1s) ✓ 7 [chromium] › tests/privacy.spec.ts:8:9 › Privacyページ › ページ基本情報 (684ms) ✓ 8 [chromium] › tests/privacy.spec.ts:14:9 › Privacyページ › セクションの表示 (411ms) ✓ 9 [chromium] › tests/privacy.spec.ts:26:9 › Privacyページ › AIクローラー方針ページへのリンク (305ms) ✓ 10 [chromium] › tests/privacy.spec.ts:31:9 › Privacyページ › 変更履歴 (329ms) ✓ 11 [chromium] › tests/top.spec.ts:8:9 › トップページ › GDPR対策 (1.8s) ✓ 12 [chromium] › tests/top.spec.ts:20:9 › トップページ › サイト情報 (394ms) ✓ 13 [chromium] › tests/top.spec.ts:29:9 › トップページ › OGP(共通) (309ms) ✓ 14 [chromium] › tests/top.spec.ts:56:9 › トップページ › OGP(Twitter) (276ms) ✓ 15 [chromium] › tests/top.spec.ts:70:13 › トップページ › ナビゲーションメニュー › Home (274ms) ✓ 16 [chromium] › tests/top.spec.ts:75:13 › トップページ › ナビゲーションメニュー › About (390ms) ✓ 17 [chromium] › tests/top.spec.ts:80:13 › トップページ › ナビゲーションメニュー › Archives (354ms) ✓ 18 [chromium] › tests/top.spec.ts:85:13 › トップページ › ナビゲーションメニュー › Music (404ms) ✓ 19 [chromium] › tests/top.spec.ts:90:13 › トップページ › ナビゲーションメニュー › Privacy (367ms)
19 passed (6.9s)
|
ということで、わりとすんなりうまくいったなーと思いながら作業ブランチを master にマージし、あとはデプロイを待つだけだとこのときは思っていました。
GitHub Actions がコケた
以前に GitHub Actions で Playwright を実行しているという話 を書きましたが、まさかのこいつがエラーで止まりました。ローカルでは通っていたので完全に油断してました。
実行ログを確認したところ、ここで止まっていました。 npm install で Playwright をインストールする際、Chromium のダウンロードを行いますが、これが途中で止まってしまっているようです。
Downloading Chromium 141.0.7390.37 (playwright build v1194) from https://cdn.playwright.dev/dbazure/download/playwright/builds/chromium/1194/chromium-linux.zip | | 0% of 173.9 MiB |■■■■■■■■ | 10% of 173.9 MiB |■■■■■■■■■■■■■■■■ | 20% of 173.9 MiB |■■■■■■■■■■■■■■■■■■■■■■■■ | 30% of 173.9 MiB |■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ | 40% of 173.9 MiB |■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ | 50% of 173.9 MiB |■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ | 60% of 173.9 MiB |■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ | 70% of 173.9 MiB |■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ | 80% of 173.9 MiB |■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ | 90% of 173.9 MiB |■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■| 100% of 173.9 MiB
|
原因
Playwright の公式リポジトリに Issue が報告されていました。
要は Node.js のバージョン(v24.16.0以降など)に起因するバグらしいです。Issue によるとブラウザのダウンロード完了後の解凍処理(extract-zip)がフリーズするという既知のバグが発生していたとのこと。既知なんかい
Node.js のバージョンを下げても直るらしいですが、Playwright の最新版ですでに対処済みらしいので今回は Playwright のバージョンを上げることで解決を図ることにしました。
ウチのプロジェクトでは、 Playwright は @playwright/test の依存パッケージとしてインストールを行っていたため、こちらのバージョンを最新版に更新して対応しました。
コマンド
npm install -D @playwright/test@latest
|
package.json 差分
"license": "ISC", "description": "", "devDependencies": { - "@playwright/test": "^1.45.1", + "@playwright/test": "^1.61.0", "@types/node": "^20.14.10" }
|
こちらをデフォルトブランチにマージしたところ、無事 GitHub Actions が最後まで完了することを確認できました。

余談
こういうの久々でしたw
スポンサーリンク