Incident Report

STG環境 fe-admin デプロイ後 ChunkLoadError

2026-03-25 / tenmane-hitori-wellness-fe-admin / feature/ui-renewal
01 発生している問題

feature/ui-renewal ブランチで Test Deploy を実行し、GitHub Actions は成功しているにもかかわらず、stg環境(admin.stg.hitoriwellness.jp)でブラウザコンソールに ChunkLoadErrorSyntaxError: Unexpected token '<' が大量に出力され、画面が表示できない。ゲストブラウザでも再現するためキャッシュの問題ではない。3回 Test Deploy を再実行しても解消しなかった。

02 インフラ構成
GCE Instance Group: hitori-wellness-stg-frontend-docker (2台)
fe
fe-image:latest
fe-admin
fe-admin-image:latest
nginx
fe-nginx-image:latest
ディスクイメージ作成日: 2025-09-28(約6ヶ月前)
03 デプロイフローと問題箇所
1
Docker イメージ ビルド・Push
GitHub Actions で docker build → Artifact Registry に docker push
OK
2
Rolling Replace 実行
インスタンスグループの既存インスタンスを削除し、新規インスタンスを作成
OK
3
新規インスタンス起動
インスタンステンプレートのディスクイメージ(2025-09-28作成)から起動
OK
4
startup-script 実行
docker compose up -d のみ実行。pull がないため、ディスクイメージに焼き込まれた古い Docker イメージをそのまま使用
NG
5
ブラウザアクセス
HTML が参照するチャンクのハッシュと、サーバーが配信する古いファイルが不一致 → ChunkLoadError
NG
04 原因の推察と根拠
推定原因

startup-script に docker compose pull が含まれておらず、docker compose up -d のみ。ディスクイメージ(2025-09-28作成)に焼き込まれた古い Docker イメージが :latest タグでローカルに存在するため、Artifact Registry から最新イメージを pull せずにそのまま起動している。

根拠:

A
Artifact Registry の最新イメージは今日 push 済み(sha256:537697c9...)。ビルド・push は成功している。
B
インスタンス上の Docker イメージを確認すると、手動 pull 前は古い作成日時のイメージが存在していた。
C
startup-script は docker compose up -d のみで、pull を実行していない。docker compose up はローカルにイメージがあれば pull しない仕様。
D
docker-compose-prod.yaml に pull_policy の設定がなく、デフォルト動作(ローカル優先)で動いている。
未解明

ディスクイメージは 2025-09-28 から更新されていないが、それ以降の develop ブランチからのデプロイでは問題が発生していなかった。なぜ以前のデプロイが成功していたかは不明。

05 対処手順
Step 1

1台目を手動で修正し動作確認

fe-admin コンテナのみ pull + 再作成。fe, nginx には触れない。

gcloud compute ssh hitori-wellness-stg-frontend-docker-3ttm \
  --zone=asia-northeast1-b \
  --project=hitori-wellness-stg \
  --command="sudo bash -c 'cd /home/mf_developer \
    && docker compose -f docker-compose-prod.yaml pull admin-front \
    && docker compose -f docker-compose-prod.yaml up -d \
       --force-recreate --no-deps admin-front'"
admin-front のみ対象。--no-deps で依存コンテナに影響しない。
Step 2

動作確認後、2台目も同様に実行

gcloud compute ssh hitori-wellness-stg-frontend-docker-9r01 \
  --zone=asia-northeast1-b \
  --project=hitori-wellness-stg \
  --command="sudo bash -c 'cd /home/mf_developer \
    && docker compose -f docker-compose-prod.yaml pull admin-front \
    && docker compose -f docker-compose-prod.yaml up -d \
       --force-recreate --no-deps admin-front'"
Step 3

根本対策(インフラ担当と相談)

以下のいずれかで恒久対応する:

A. startup-script に docker compose pull を追加し、インスタンステンプレートを更新

B. docker-compose-prod.yaml に pull_policy: always を追加

C. ディスクイメージを最新の状態で再作成(update_instances.sh

スケールアウト時にも新しいイメージが使われるようにするには A または B が必要。