ARTICLE

デプロイ障害の6ステージ切り分けフレームワーク|PR→マージ→ビルド→デプロイ→イメージpull→再起動のどこでコケているか特定する実践ガイド【2026年版】

2026/4/10

SHARE
デプ

デプロイ障害の6ステージ切り分けフレームワーク|PR→マージ→ビルド→デプロイ→イメージpull→再起動のどこでコケているか特定する実践ガイド【2026年版】

ARTICLE株式会社renue
renue

株式会社renue

2026/4/10 公開

AI導入・DXの悩みをプロに相談してみませんか?

AIやDXに関する悩みがありましたら、お気軽にrenueの無料相談をご利用ください。 renueのAI支援実績、コンサルティングの方針や進め方をご紹介します。

デプロイが通らない——6ステージのどこで止まっているかを特定せよ

「デプロイが動かない」「本番に反映されない」——この報告を受けたとき、最初にやるべきことは6ステージのどこでコケているかを特定することです。闇雲にログを見たり、再デプロイを繰り返しても問題は解決しません。

ある開発チームのリーダーは、デプロイトラブルに直面した新人エンジニアにこう伝えました。「デプロイやインフラ周りは事故対応して覚えるしかない。起こるたびに理解するようにしていこう」——そして、以下の6ステージフレームワークを共有しました。

デプロイの6ステージ

1. PR立てる
2. PRマージ
3. ビルド
4. デプロイ
5. イメージpull
6. 再起動

デプロイ障害の切り分けは、この6ステージのどこで止まっているかを上から順に確認することが基本です。

各ステージの典型的な障害パターン

ステージ1-2:PRとマージ

障害原因対策
マージできないコンフリクトが発生しているベースブランチを最新化してコンフリクト解消
CIが通らないテスト失敗・lint エラーローカルでCI相当のチェックを実行してから push

ステージ3:ビルド

ビルドは最も障害が発生しやすいステージです。

障害原因対策
ビルド失敗CIが不十分でビルド不可能なマージが通ったCI にビルドチェックを追加
依存解決エラーパッケージ追加やDockerfile編集時に発生しがちlockfile を更新してコミット
ローカルで成功するがCIで失敗ベースイメージ・OS・環境変数の差異ベースイメージをダイジェストでピン留め
リソース不足CPU/メモリ/ディスク制約でOOMやファイル書き込みエラービルドエージェントのリソースを確認・拡張

ステージ4:デプロイ

障害原因対策
yarn build成功だがデプロイ失敗デプロイ環境固有のエラーデプロイログを確認し環境差分を特定
マイグレーション失敗DB スキーマ変更が既存データと衝突マイグレーションの冪等性を確保

ステージ5:イメージpull

障害原因対策
イメージが見つからないpush先のACR/ECRとVM参照先が異なるレジストリURLの一致を確認
キャッシュで古いイメージが使われるlatestタグ固定でキャッシュが残るgit commit SHAタグも付与し追跡可能に
ディスク容量不足旧イメージが残りディスクを圧迫pull前にdocker image pruneで整理
認証エラーACR/ECRのトークン期限切れpull前にdocker loginを再実行

実際に、VM上に旧ACRの不要イメージが約29GB残存し、ディスク使用率87%(残り8.5GB)でpullが失敗した事例が報告されています。

ステージ6:再起動

障害原因対策
自動再起動しないWebhookの設定が不十分デプロイフック/Webhookの設定を確認
起動後にエラーマイグレーション自動実行でサーバー起動失敗マイグレーションと起動を分離
ヘルスチェック通過だが機能エラーヘルスチェックがDB接続を含まないヘルスチェック内容を拡充、ログでstartup_diagnosticsを確認

特に注意すべきは「ヘルスチェックが通っているのにコア機能が動かない」パターンです。/healthがDB接続チェックを含まない場合、「画面は表示されるが変換機能がエラー」という状態になります。

切り分けの実践手順

ステップ1:直近のGitHub Actionsを確認

まずCI/CDパイプラインのログを確認し、ステージ1-4のどこで止まっているかを特定します。

ステップ2:コンテナの状態を確認

docker compose ps              # コンテナの状態(Up/Exited)
docker compose logs --tail=30  # 直近のログ

Up状態でもログにエラーが出ている場合は、ステージ6の問題です。

ステップ3:疎通テスト

curl http://localhost:3000              # FE → 200 or 302
curl http://localhost:8000/health       # BE → healthy
curl http://localhost:3000/api/health   # FE→BE → 200

FE単体は通るがFE→BEが通らない場合は、Docker Composeのサービス間ネットワーク設定を確認します。

ステップ4:Bastionトンネルでブラウザ確認

閉域VM環境では、Bastionトンネル経由でブラウザからアクセスし、画面表示だけでは検知できない問題を拾います。

イメージタグ戦略:latestの罠

Docker イメージをlatestタグだけで管理すると、「どのコミットがデプロイされているかわからない」状態になります。

推奨タグ戦略

docker build \
  -t registry.example.com/app:latest \
  -t registry.example.com/app:${GIT_SHA} \
  .

latestに加えてgit commit SHAのタグも付与することで、どのコミットがデプロイされたか追跡でき、ロールバック時にも使えます。

ダウンタイム最小化のデプロイ手順

本番環境でのコンテナ更新では、ダウンタイムを最小化する手順が重要です。

  1. 新イメージをpull(旧コンテナ稼働中):pull失敗時は旧コンテナが動いたまま→影響なし
  2. 旧コンテナを停止・削除:ここからダウンタイム開始
  3. 新コンテナを起動:ダウンタイム終了
  4. 旧イメージを回収docker image prune -fでディスク解放

pullを停止前に実行することで、ダウンタイムを「コンテナ停止→起動」の数十秒に短縮できます。

Apple Silicon環境の罠

Apple Silicon(M1/M2/M3)のMacでビルドしたイメージは、Linux AMD64のVMでは動作しません。必ず--platform linux/amd64を指定してビルドする必要があります。

docker build --platform linux/amd64 -t registry/app:latest .

このオプションを忘れると、VMにpullは成功するがコンテナ起動時にエラーになるという、発見しにくい障害が発生します。

まとめ:デプロイ障害切り分けチェックリスト

ステージ確認項目よくある原因
1. PRPRが作成できているかブランチ保護ルール、権限不足
2. マージコンフリクトなくマージできたかコンフリクト、CI不通過
3. ビルドGitHub Actionsが成功しているか依存解決エラー、Dockerfile変更
4. デプロイデプロイジョブが成功しているかマイグレーション失敗、環境差分
5. pull正しいイメージがpullできているかレジストリURL不一致、ディスク不足、認証切れ
6. 再起動コンテナがUp+ログにエラーなしかWebhook未設定、ヘルスチェック不足

デプロイ障害は「事故対応して覚える」ものです。しかし、6ステージフレームワークを知っていれば、パニックにならず体系的に切り分けができます。次にデプロイが止まったとき、この6ステージのどこかを必ず確認してください。

AI活用のご相談はrenueへ

renueは553のAIツールを自社運用する「自社実証型」AIコンサルティングファームです。

→ AIコンサルティングの詳細を見る

関連記事:障害対応・開発プロセスの完全ガイド

障害対応・インフラ連載として、以下の記事も合わせてお読みください。

AI開発のインフラ・デプロイでお悩みの方は、renueにご相談ください

SHARE

AI導入・DXの悩みをプロに相談してみませんか?

AIやDXに関する悩みがありましたら、お気軽にrenueの無料相談をご利用ください。 renueのAI支援実績、コンサルティングの方針や進め方をご紹介します。

関連記事

AI導入・DXの悩みをプロに相談してみませんか?

AIやDXに関する悩みがありましたら、お気軽にrenueの無料相談をご利用ください。 renueのAI支援実績、コンサルティングの方針や進め方をご紹介します。

AI・DXの最新情報をお届け

renueの実践ノウハウ・最新記事・イベント情報を週1〜2通配信