ANTIGRAVITY LABEN
記事一覧/アプリ開発
アプリ開発/2026-07-14上級

デプロイは成功なのに、ユーザーには古いビルドが出ていたとき — 出荷したコミットがエッジに届いたかを検証するゲートの運用メモ

デプロイが成功と表示されたのに本番が古いビルドを配り続けていたとき、出荷したコミットが実際にエッジへ届いたかをビルド印で検証するゲートの作り方を、運用ログの実測とともに整理します。

Antigravity329デプロイ5CI/CD17オブザーバビリティ2運用8

プレミアム記事

修正済みのはずのバグについて、ユーザーから問い合わせが続いていました。CI は緑。デプロイ画面も「成功」。コミットも main に乗っています。それでも本番を開くと、直したはずの挙動が古いまま残っている。

原因は拍子抜けするほど単純でした。ビルドは走ったけれど、エッジのキャッシュが前のバンドルを配り続けていたのです。「デプロイ成功」という緑のチェックが意味していたのは「パイプラインが最後まで走った」ことだけで、「ユーザーが新しいコードを見ている」ことではありませんでした。

この二つは、似ているようでまるで別の事実です。ここでは個人開発で運用しているアプリを題材に、出荷したコミットが本当にエッジまで届いたかを、ビルドに焼き込んだ印で検証する後段ゲートの作り方を、運用ログの実測とあわせて残しておきます。私自身、この取り違えで二度ほど静かな事故を出してから、ようやくこの形に落ち着きました。

なぜ「デプロイ成功」を信じてはいけないのか

デプロイの緑は、いくつもの独立した工程のうち「CI が例外なく終わった」ことしか保証しません。そこから先、ユーザーの画面に新しいコードが届くまでには、まだ落とし穴がいくつも残っています。

エッジや CDN のキャッシュが古いバンドルを配り続けている。アトミックな差し替えに遅れがあって、一部のリージョンだけ旧版のまま。あるいは、そもそも意図した本番プロジェクトではなく、プレビュー環境や別ブランチに出してしまっていた。どれも CI から見れば「成功」で、けれどユーザーから見れば「何も変わっていない」状態です。

本番運用で怖いのは、この手の食い違いがエラーとして現れないことです。500 も出ず、ログにも残らず、ただ古い挙動が静かに配られ続ける。だからこそ、成功したと信じ込む代わりに、届いたかどうかを自分で取りに行って確かめる工程が要ります。

ビルドに検証できる印を焼き込む

まず、いま動いているのがどのコミットのビルドなのかを、本番から機械的に読み取れるようにします。ビルド時にコミット SHA を成果物へ埋め込み、/version.json のような固定の場所から返すのが素直です。

// 何をするコードか:
// ビルド時にコミット SHA とビルド時刻を version.json として書き出し、
// 本番の静的アセットとして配信できるようにする
// scripts/stamp-version.mjs
import { execSync } from "node:child_process";
import { writeFileSync, mkdirSync } from "node:fs";
 
const sha = execSync("git rev-parse --short HEAD").toString().trim();
const builtAt = new Date().toISOString();
 
mkdirSync("public", { recursive: true });
writeFileSync(
  "public/version.json",
  JSON.stringify({ sha, builtAt }, null, 2)
);
 
console.log(`stamped version.json: ${sha} @ ${builtAt}`);

ビルドスクリプトの手前でこれを走らせ、"build": "node scripts/stamp-version.mjs && next build" のように繋ぎます。こうすると、本番の https://your-app.example/version.json を叩けば「いまエッジが配っているのはどのコミットか」が一目で分かるようになります。印は SHA でなくても、単調増加するビルド番号でも構いません。大切なのは、出荷側が期待する値と、本番が返す値を突き合わせられることです。

ここまでお読みいただきありがとうございます。

この記事の続きを読む

この先には、実装コードやベンチマーク結果など、実務でお役に立てる内容をご用意しています。このサイトは広告を掲載しておらず、サーバーや開発にかかる費用はメンバーの皆様のご支援で成り立っています。もしお役に立てていましたら、ご支援いただけますと大変ありがたいです。

この記事で得られること
「デプロイ成功」が本番反映を意味しない理由と、コミット印をエッジで検証する後段ゲートの設計
ビルド時にコミット印を焼き込み、キャッシュを避けて実物を取りに行く検証コード
検証ゲート導入前後で、古いビルドがユーザーに届いた事故がどう減ったかの実測値
Stripe による安全な決済 · いつでもキャンセル可能

この記事を購入する

この先の内容をすべてお読みいただけます。一度のご購入で、いつでも何度でもアクセスできます。このサイトは広告を掲載しておらず、皆さまのご支援がサーバー費用などの運営を支えています。

または
メンバーシップなら全記事が読み放題 →
シェア

お読みいただきありがとうございます

Antigravity Lab は広告なしで運営しており、サーバー費用などの運営コストはメンバーシップのご支援で賄っています。実装コード・ベンチマーク・本番設計パターンなど、実務でお役立ていただける記事を毎日更新しています。もし読んでよかったと感じていただけましたら、ぜひご覧ください。

  • コピー&ペーストで使える実装コード付き
  • 毎日新しい上級ガイドを追加
  • ¥580/月 または ¥1,480 の永久アクセス
メンバーシップを見る →

関連記事

アプリ開発2026-07-03
CI の検証が緑なのにストア審査でスクリーンショットが差し戻されるとき — 検証ルールの鮮度を計測する運用メモ
ストアアセットのCI検証が通るのに審査で差し戻される原因は、検証ルール自体の陳腐化にあります。仕様を鮮度つき契約ファイルに分離し、ロケール別のテキストあふれと知覚差分まで検証する実装を紹介します。
アプリ開発2026-05-06
UnityプロジェクトのCI/CDをAntigravity×GitHub Actionsで自動化する実践ガイド
GameCIとGitHub ActionsをAntigravityで設定し、Unityプロジェクトのビルド・テスト・TestFlight自動アップロードまでを完全自動化する実践的なCI/CDパイプライン構築ガイドです。
アプリ開発2026-03-30
Antigravity のデプロイ・ビルドエラーを切り分けて直す実践手順
Antigravity でデプロイやビルドが失敗する原因をエラーメッセージ別に解説し、具体的な解決手順を提供します。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →