Vercel、
すごい便利だけど
中身どうなってるの?

git push したら全部やってくれる。
…でもその間、何が起きてるんだろう?
VOL.1 / 全体像をなぞる

Vercel、本当にすごいんです。

git push するだけで、世界中の人がアクセスできるWebサイトが、数十秒で立ち上がる。 …これ、よく考えたらヤバくないですか?
SSL証明書? DNS? サーバー? CDN?
全部いつの間にか勝手に設定されてる。便利すぎて、逆に「中身で何が起きてるか」を全然知らないままだったので、調べてみました。
今日は 「git push してから世界中で見えるようになるまで」 を、一連の流れとして追っていきます。

Vercel がやってることは、
「お店を全国チェーン化」に似てるかも

REAL WORLD
お店を全国チェーン化する
  • 本店でレシピを作る (開発)
  • レシピを全国の店舗に配る (デプロイ)
  • お客さんは 最寄りの店舗 に行く
  • レシピが更新されたら、各店舗にも反映
  • 店舗ごとに材料を仕入れて調理 (動的処理)
VERCEL
Web サイトを全世界配信する
  • git push で ビルド
  • 成果物を 世界中の CDN に配布
  • ユーザーは 最寄りの拠点 (PoP) に接続
  • 新しいデプロイで 各拠点が更新
  • 動的な処理は Serverless / Edge Functions

git push から公開までの 5 ステップ

01
コード push GitHub にコードを push(または Vercel が変更検知)
GitHub / Webhook
02
ビルド Vercel のビルドコンテナで npm run build 相当が走る
Build Container
03
成果物の配布 静的ファイルは CDN へ、動的な部分は Function として登録
Edge Network / Functions
04
DNS の切り替え 新しいデプロイの URL に DNS が向く(Atomic Deploy)
DNS / Routing
05
公開 世界中の最寄り PoP から配信開始(数十秒で完了)
Anycast / PoP
— STEP 01 / 05

コードを push する

GitHub → Vercel への通知
素朴な疑問
push しただけで、なんで Vercel が気づくの?

GitHub の Webhook という仕組みを使っているらしいです。

リポジトリに何か起きたとき(push、PR、merge…)に、GitHub が 事前に登録された URL に HTTP リクエストを投げてくれる機能。Vercel は連携時にこの Webhook URL を登録しているので、push の瞬間に通知が飛ぶ仕組み。

…つまり、Vercel が GitHub を監視してるのではなく、GitHub が Vercel に「変更あったよ!」って教えてあげてる側でした。

# 私たちが触るのはここまで
$ git push origin main
                ↓
       [ GitHub ]webhook (HTTP POST)
       [ Vercel ]
                ↓
        ビルドキューに登録
                ↓
       ビルド開始
TERM
Webhook
「何か起きたら教えて」を事前に登録しておく仕組み。push, PR merge, issue 作成など、イベント駆動で外部サービスに通知できる。
— STEP 02 / 05

ビルドが走る

使い捨てのコンテナで成果物を作る
素朴な疑問
どこで npm run build してるの?自分の PC じゃないよね?

Vercel が 使い捨てのビルドコンテナ を一個立ち上げて、その中でビルドします。

イメージとしては「クリーンな Linux サーバーが毎回新しく用意されて、git clone してビルドして、終わったら消える」感じ。だから誰がビルドしても結果が同じになる(再現性)。

ローカルだと「私の環境では動く」になりがちだけど、毎回ゼロから作るのでその罠が起きにくい設計らしいです。

       [ ビルドコンテナ ]
       ┌─────────────────────┐
       │ 1. git clone        │
       │ 2. npm install      │
       │ 3. npm run build    │
       │ 4. 成果物を取り出す │
       │ 5. コンテナ破棄     │
       └─────────────────────┘
                ↓
       成果物 (静的ファイル + Function)
TERM
使い捨てコンテナ (Ephemeral)
毎回ゼロから作って、終わったら捨てる方式。前回の汚れが残らない=再現性が高い。CI/CD でよく使われる考え方。
— STEP 03 / 05

成果物を世界中に配る

静的ファイルは CDN へ、動的処理は Function へ
素朴な疑問
「ビルド済みのファイル」って、どこに置かれるの?

ファイルの種類によって 置き場所が違う んです。

  • 静的ファイル(HTML, CSS, 画像)→ 世界中のCDN (PoP) に複製
  • サーバーサイド処理(API, SSR)→ Serverless Function として登録
  • 軽い処理(認証チェック, リダイレクト)→ Edge Function として登録

「全部 CDN に置けば速い」じゃなくて、適材適所で配り分けてるんだなと。

       ビルド成果物
            │
   ┌────────┼────────┐
   ↓        ↓        ↓
[ 静的 ] [ API ]  [ Middleware ]
HTML    Serverless Edge
CSS     Function   Function
画像    ↓          ↓
↓       米国DC等    世界中のPoP
世界中
のCDN

※ 種類によって配り先が違う
TERM
CDN (Content Delivery Network)
世界中に置かれたサーバー網。ユーザーの最寄りから配信することで「物理的な距離」を縮めて、表示を速くする仕組み。
— STEP 04 / 05

DNS が新しい場所を指す

Atomic Deploy = 一瞬で切り替わる
素朴な疑問
デプロイ中、サイトが止まらないのはなんで?

Vercel は新しいデプロイを 別の URL で完成させてから、最後に切り替える ようになってます。

イメージとしては「新しいお店を裏でこっそり完成させて、看板(DNS)だけ最後にスッと差し替える」感じ。

なので、デプロイ中もユーザーは 古いバージョンを問題なく見られる切り替えは一瞬。失敗したらすぐ前の URL に戻せる(即ロールバック)のもこの仕組みのおかげ。

デプロイ中:
mysite.com  ──→ deploy-v1 (稼働中)
                  deploy-v2 (裏で準備中)

準備完了の瞬間:
mysite.com  ──→ deploy-v2 (切替)
                  deploy-v1 (残ってる)

ロールバック時:
mysite.com  ──→ deploy-v1 (戻すだけ)
                  deploy-v2
TERM
Atomic Deploy
デプロイの完了を「全部できた瞬間」だけ反映する方式。中途半端な状態が見える時間がない。即ロールバック可能。
— STEP 05 / 05

世界中で見られる状態に

ユーザーは最寄りの拠点 (PoP) に繋がる
素朴な疑問
東京の人もNYの人も、なんで同じ URL で速くアクセスできるの?

Vercel は世界中に PoP (Points of Presence) という拠点を持っていて、ユーザーは 自動的に最寄りの拠点 に繋がります。

「同じ URL を打っても、東京の人は東京の拠点に、NY の人は NY の拠点に繋がる」というのが裏側で起きてること。物理的な距離が短い分、表示が速い。

この「自動で最寄りに振り分ける」仕組みが Anycast というルーティング技術なんですが、これは Vol.2 で詳しくやります。

       同じ mysite.com にアクセス

  [Tokyo User]           [NY User]
        ↓                    ↓
   PoP Tokyo           PoP New York
   (数 ms)             (数 ms)
        ↓                    ↓
    キャッシュHIT          キャッシュHIT
        ↓                    ↓
      表示                  表示

※ どちらも同じURL、自動で最寄りへ
TERM
PoP (Points of Presence)
CDN の拠点。Vercel は世界に 126+ 箇所持ってる。ユーザーから物理的に近い場所で配信することで、レイテンシ(待ち時間)を減らす。
— おまけ

「動的なページ」はどうしてるの?

CDN だけだと足りないやつの話
素朴な疑問
ログインとか、DBから取ってくるやつは?CDNには置けないよね?

そういう「毎回違う結果になるやつ」は、Serverless Function として登録されます。

リクエストが来た瞬間に、関数が起動して、処理して、レスポンスを返す。使い終わったら消える。サーバーをずっと起動しっぱなしにしないので、コストが安い…らしいです。

ただし起動に少し時間がかかる(Cold Start問題)など、トレードオフも色々あるみたい。これも Vol.2 で。

普通のサーバー:
[Server]──常時起動──┐
   高コスト           ├ Request
   即レスポンスServerless:
Request → [ 関数を起動 ] → レスポンス
              ↓
         使い終わったら消える

         + 使った分だけ課金
         + 自動でスケールする
         - Cold Start
TERM
Serverless
「サーバーがない」じゃなくて「サーバーを意識しなくていい」という意味。リクエスト時だけ関数が動く方式。AWS Lambda がこの仕組みの代表例。

登場人物を、全部並べてみる

5 ステップを、誰がどこにいて、どう繋がっているか、絵にしてみました。
あなた git push STEP 01 GitHub Webhook 発火 webhook VERCEL PLATFORM STEP 02 Build Container 使い捨て / 再現性 STEP 03a 静的 → CDN STEP 03b 動的 → Functions STEP 04 Atomic Deploy STEP 05 Edge Network 世界中の PoP Tokyo NY London Sydney + 120 拠点 世界中の ユーザー 最寄りの PoP に接続 数十秒で公開完了 アクセス
あなたが書いたコードが、Vercel の中で ビルド → 配布 → 切替 → 世界配信。全部並べると、これだけの仕組みが同時に動いています。

git push だけの裏で、
これだけのことが起きてた

01
Webhook で GitHub が Vercel に通知
02
使い捨て ビルドコンテナで成果物を作成
03
静的・動的を 適材適所で配り分け
04
Atomic Deploy で一瞬で切り替え
05
世界中の PoP から最寄り配信
動的処理は Serverless Function で対応
— 次回予告 / VOL.2
もうちょっと深く掘ります:
Anycast って何? Cold Start って何? ISR ってどう動いてる?

もっと知りたい人向け リンク集

今日話した内容は、ほぼ Vercel 公式のブログやドキュメントに書いてあります。本気で覗きたい人は、まず一番上の「Life of a Vercel request」がおすすめです。
VERCEL OFFICIAL BLOG ★おすすめ
Life of a Vercel request
vercel.com/blog/life-of-a-vercel-request-navigating-the-edge-network
1リクエストが Edge Network 内で辿る道筋を、PoP → Firewall → Routing の順に Vercel 自身が解説
VERCEL DOCS
Edge Network 全体
vercel.com/docs/edge-network
CDN、PoP、リージョン構成の公式ドキュメント。今日話した適材適所配信の根拠
VERCEL DOCS
Edge Network Regions
vercel.com/docs/edge-network/regions
126 PoP + 20 Compute Region の世界配置と、障害時の自動フェイルオーバー仕様
VERCEL DOCS
Vercel Functions
vercel.com/docs/functions
Serverless Function と Edge Function の使い分け、ランタイムの違い
VERCEL DOCS
Deployments & Atomic Deploy
vercel.com/docs/deployments
即時ロールバックの仕組み、Git Webhook 連携、ビルドパイプラインの公式説明
GITHUB DOCS
Webhooks の仕様
docs.github.com/webhooks
STEP 1 で説明した Webhook の発火タイミング、ペイロード形式など

便利 の裏に、
こんなに 面白い仕組み
隠れていました。

Vercel に限らず、「便利だな」と思ったツールほど、
中身を覗いてみるとインフラの勉強になるかもしれません。
VOL.1 / END. ご清聴ありがとうございました
1 / 13