フロントエンドアーキテクチャ

ホスティングの選び方 ― CDN/エッジ/Static First ― 生成AI時代のアーキテクチャ超入門

ホスティングの選び方 ― CDN/エッジ/Static First ― 生成AI時代のアーキテクチャ超入門

本記事について

当サイトを閲覧いただきありがとうございます。 本記事はシリーズ『生成AI時代のアーキテクチャ超入門』の「フロントエンドアーキテクチャ」カテゴリ第1弾として、ホスティングについて解説する記事です。

モバイルで3秒以上の読み込みで53%が離脱(Google調査)。ホスティング設計はユーザー体験の底を決める領域です。本記事ではCDN・静的ホスティング・エッジコンピューティングキャッシュ戦略・画像最適化・Core Web Vitalsを解説し、「Static First」と「Git push = 本番デプロイ」という2大原則を示します。

本記事のテーマについてさらに詳しく知りたい方は『AWSの基本・仕組み・重要用語が全部わかる教科書』も参考にしてみてください。

そもそもホスティングとは何か

ホスティングとは、ざっくり言えば「作ったWebサイトやアプリのファイルを置いて、世界中のユーザーに届ける仕組み」です。

宅配便の配送拠点を想像してください。倉庫(サーバー)が東京に1か所だけだと、北海道や沖縄への配送は時間がかかります。全国各地に中継拠点(CDN)を置けば、最寄りの拠点から素早く届けられます。さらに「よく注文される商品はあらかじめ各拠点に在庫しておく」キャッシュ)ことで、倉庫に問い合わせる手間すら省けます。ホスティング設計とは、この配送ネットワークをどう組むかを決める工程です。

なぜホスティング設計が重要なのか

もしホスティング設計を軽視したらどうなるか。モバイルで3秒以上の読み込みで53%が離脱(Google調査)──せっかく作った機能もページも、届くのが遅ければユーザーは見てくれません。

フロントエンドで作ったHTML・CSS・JS・画像を、どこに置いてどう配信するかを決めるのがホスティング設計です。バックエンドが「サーバー上でロジックを実行する」側なのに対し、フロントエンドは「大量の静的ファイルを世界中のユーザーに届ける」側で、求められる特性が全く違います。CDNを使うか」「エッジで処理するか」「どうキャッシュするか」を決めるのは、数百ミリ秒単位でUXを削り出す作業です。

バックエンドとは独立して設計すべき領域です。配信の速さがUXそのものです。

主要なホスティング形態

フロントエンドのホスティングには大きく5つの形態があり、プロジェクト規模と運用スタイルによって選択が変わります。個人サイトから大規模サービスまで、それぞれに適した選択肢が存在します。

形態特徴
自サーバ配信Nginx / Apache で配る古典的・コントロール可能だが運用負荷大
クラウド静的ストレージS3 / GCS / Azure Blob安価で堅牢・CDN連携が前提
CDN配信CloudFront / Cloudflare / Fastly世界中のエッジから高速配信
プラットフォーム型Vercel / Netlify / Cloudflare PagesGitと連携で自動デプロイ
フルスタック型Next.js + Vercel / Nuxt + NuxtHubフレームワークとホスティングが一体

現代の本命はプラットフォーム型で、git push するだけで自動ビルド・デプロイ・CDN配信まで完結します。個人開発なら無料枠で十分実用的なレベルのサービスが使えます。

CDNの基本

CDNは、世界中に分散配置されたエッジサーバーにコンテンツのコピーを置き、ユーザーから最も近いエッジから配信する仕組みです。物理的な距離が近いほど通信のレイテンシが小さくなるため、体感速度が劇的に改善します。

CDNによるコンテンツ配信の仕組み 宅配便の全国中継拠点と同じ。最寄りの拠点から素早く届ける オリジンサーバー S3 / GCS / 自社サーバ (米国リージョン等) 東京エッジ キャッシュヒット: 10ms以下 日本のユーザーはここから取得 欧州エッジ 欧州ユーザーに高速配信 ロンドン / フランクフルト等 シンガポールエッジ 東南アジア向け 米国西海岸エッジ 北米向け 東京ユーザー CDN経由(エッジヒット) 10ms以下 直接アクセス(米国サーバ) 200ms以上 CDNは「速くするため」と「落ちないため」の二重の価値。DDoS吸収+オリジン負荷軽減

東京のユーザーが米国サーバに直接アクセスすると往復200ms以上かかりますが、東京エッジでキャッシュヒットすれば10ms以下で返せます。CDNレイテンシ削減に加えて、「オリジン負荷の軽減」DDoS攻撃の吸収」といった防御的効果もあり、現代のWebサービスではほぼ必須のインフラです。

CDN「速くするため」だけでなく「落ちないため」にも入れます。二重の価値があります。

主要CDN比較

CDN製品は群雄割拠で、それぞれに得意分野があります。AWS中心のシステムなら CloudFront、無料枠と機能豊富さ重視なら Cloudflare が現代のスタンダードです。

CDN特徴
CloudFrontAWS完全統合・料金明瞭・S3等との連携がシンプル
Cloudflare無料枠が広い・エッジ機能豊富・DDoS対策が強力
Fastly設定柔軟性が高い・大手メディア・ECの採用多
Akamaiエンタープライズ定番・金融・官公庁で強い
Vercel EdgeNext.jsと密結合・開発体験に特化

個人開発〜中規模なら Cloudflare Pages / Vercel / Netlify、AWSを中心に組むなら「CloudFront + S3」が鉄板構成です。Akamai級は大企業向けで、個人や小規模で選ぶ必要はありません。

キャッシュ戦略

CDNキャッシュをどう管理するか」が設計の肝です。ファイルの種類によって更新頻度と許容できる鮮度が全く違うため、一律のTTLでは最適化できません

キャッシュ対象推奨戦略
HTML短命(数分〜no-cache)+ ETag(内容識別子で変更があった時だけ再取得させる仕組み)
CSS / JSハッシュファイル名 + 長期キャッシュ(1年)
画像長期キャッシュ + CDN側で変換
APIレスポンスCache-Control + Varyヘッダで個別制御

決定的なテクニックがファイル名ハッシュ化です。main.js ではなく main.abc123.js のように内容ハッシュをファイル名に埋め込むと、内容が変わればファイル名が変わるため、「いつキャッシュを破棄するか」を悩む必要がなくなります。

main.abc123.js ← 内容変わればファイル名変わる
                  → 長期immutable可能

HTMLは短命、その他は長期。ハッシュ化ファイル名がモダンフロントの大前提です。

キャッシュ破棄(Invalidation)

デプロイ時の「ユーザーに古いキャッシュが残る」問題をどう解くかが、CDN運用の最大のテーマです。3つの方式がありますが、結論はハッシュ化ファイル名を使えばほぼ解決するです。

方式特徴
ハッシュ化ファイル名自動で新URL → invalidation不要(鉄板)
明示的invalidationCDN APIで手動削除 / 料金と伝播時間がかかる
短TTLすぐ消えるがキャッシュ効率が落ちる

CloudFrontの明示的invalidationは月1000件まで無料ですが、全世界のエッジに伝播するまで数分かかる上、頻繁に発行すると料金も発生します。一方ハッシュ化ファイル名なら、新しいURLは自動でキャッシュミス → オリジンから最新取得という流れが自然に起きるため、invalidation自体が不要。Next.js / Vite / webpack 等のモダンビルドツールは全てこのパターンを標準装備しています。

エッジコンピューティング

CDNのエッジでコードを実行するのがエッジコンピューティングです。従来はCDNは「ファイルを配るだけ」の役割でしたが、エッジでも軽量な処理が走るようになり、低遅延で動的な処理が可能になりました。2020年代後半の大きな潮流の一つです。

プラットフォーム言語特徴
Cloudflare WorkersJS / WASM(WebAssembly、ブラウザ/エッジで動くバイナリ実行形式)V8 Isolateで高速起動・Durable Objects等
Vercel Edge FunctionsJS / WASMNext.js Middlewareと密結合
AWS Lambda@EdgeJSCloudFrontでのリクエスト改変
Deno DeployJS / TSTypeScriptネイティブ・エッジ全開

得意分野はA/Bテストの振り分け・認証前置フィルタ・国別リダイレクト・画像変換・軽量なAPI。コールドスタートがほぼゼロ(数ms〜数十ms)なので、従来のLambda系よりもリアルタイム応答が求められる処理に向きます。

エッジは「軽い処理を低遅延で」が最適解。重い処理は依然としてオリジン側です。

静的 vs 動的配信

ページを配る方式は大きく静的配信動的配信に分かれ、現代は「Static First(まず静的、必要部分だけ動的)」が本命です。

配信特徴
静的(Pre-rendered)Astro / Next.js SSG / Jekyll高速・安価・CDN完結・障害に強い
動的(SSR)Next.js SSR / Remix / Rails個別生成・サーバ必要・最新データ反映
ISR / OnDemandNext.js / Gatsby一定期間ごとに再生成

静的配信はCDNに全ページ置くだけなのでサーバ障害の影響を受けず、配信コストも極めて低く抑えられます。ブログ・ドキュメント・マーケサイトなら静的で十分。一方、ユーザーごとに内容が変わるログイン後の画面はSSRが必要です。

Static First の発想で設計します。全てを動的にする理由は意外と少ないです。

ドメインとSSL・画像最適化

独自ドメインでサイトを公開する場合、ドメイン登録・DNS設定・SSL証明書の3点セットの設定が必要です。現代は多くの工程が自動化されており、数分で整います。

項目ポイント
独自ドメインRoute 53 / Cloudflare Registrar / お名前.com等
SSL証明書CDN側で自動発行(Let’s Encrypt / ACM)
HTTP/2 / HTTP/3CDNで自動対応(設定不要)
HSTS(HTTP Strict Transport Security)強制HTTPS化のヘッダ(推奨)

現代のホスティングサービス(Vercel・Netlify・Cloudflare Pages)は、独自ドメインを設定するだけで「自動的にSSL証明書を発行・更新」してくれます。HTTPSは必須(Chromeで警告)、HTTP/3対応もほぼ標準です。

画像最適化

画像は多くの場合、サイト全体の最大のペイロードを占めます。HTMLは数KBでも、トップに貼った高解像度画像1枚が2MBということは珍しくなく、ここを最適化するかどうかで表示速度が数秒単位で変わります

手法内容
次世代フォーマットWebP / AVIF(JPEGの半分〜1/3のサイズ)
レスポンシブ画像srcset / Pictureタグで画面サイズ別に配信
遅延読み込みloading="lazy" 属性で画面外は後回し
CDN変換Cloudflare Images / imgix / Next/Image 等で自動変換

Next/Image や Astro の <Image> は、元画像1枚からWebP/AVIF・複数サイズ・lazy loadの全てをビルド時/リクエスト時に自動生成してくれます。手書きで <img> を貼るより、フレームワークのコンポーネントを使う方が圧倒的に効率的です。

画像最適化はLCPに直結します。手作業は諦めてフレームワーク機能に任せます。

Core Web Vitals

Core Web Vitals はGoogleが定めた体感速度の指標で、SEO(検索順位)にも直接影響します。フロントエンド設計の目標値として、この3指標を意識するのが現代のWeb開発の基本姿勢です。

指標意味目標
LCP(Largest Contentful Paint)最大コンテンツ描画までの時間< 2.5秒
INP(Interaction to Next Paint)クリック等の応答性< 200ms
CLS(Cumulative Layout Shift)レイアウトのズレ量< 0.1

LCPCDN・画像最適化・初期HTMLサイズで改善、INPはJSの実行量削減やメインスレッドの解放で改善、CLSは画像や広告のサイズを事前に指定することで改善します。Google PageSpeed Insightsで無料計測でき、定期的に見る習慣がSEO対策にもなります。

Core Web Vitalsの数値Gate

※ 2026年4月時点の業界相場値です。テクノロジー・人材市場の変化で陳腐化するため、定期的にアップデートが必要です。

「速いサイト」を曖昧に目指すのではなく、数値で追うのが現代のフロント運用です。Googleが公式に定める閾値が業界標準になっています。

指標GoodNeeds ImprovementPoor
LCP< 2.5秒2.5〜4.0秒> 4.0秒
INP< 200ms200〜500ms> 500ms
CLS< 0.10.1〜0.25> 0.25
TTFB< 800ms800〜1800ms> 1800ms
JSバンドルサイズ(gzip後)< 170KB170〜350KB> 350KB
画像サイズ(LCP画像)< 200KB200〜500KB> 500KB

LCP 2.5秒・CLS 0.1・INP 200msはGoogleのSEO判定に直結し、「75%のページビューがGood圏内」にあるかが評価基準になります。PageSpeed Insights / Lighthouse / Search Consoleで「週1回計測」し、悪化したら即対応するのが運用の鉄則です。

Core Web Vitalsが悪いと検索順位が下がります。測定を運用に組み込みます。

「CDNがあるから安心」の落とし穴(業界事例)

2019年7月にCloudflareで発生した大規模障害は、CDN自体がSPOFになり得ることを示した事件として語り継がれています。「単一の正規表現」がデプロイされた途端、全エッジで CPU 100% を引き起こし、約30分にわたり全世界のトラフィックに影響が出ました。2021年6月のFastly障害(Amazon・GitHub・Reddit・NYTimes などが一斉に停止)も同系統の事例で、「CDNは落ちない」という前提は実は成り立たないことが一気に認識されました。

Fastly障害の日にちょうど個人のダッシュボードを触っていて、急にGitHubも落ちて、何が起きているのか把握するまで数分かかった、という体験談もよく聞きます。CDNがあるから安心」と思考停止するのではなく、オリジン直接アクセスのフォールバック経路や、障害時のステータスページ運用も合わせて設計しておくべき、というのが共通の教訓です。

マルチCDN(通常はA、障害時はBへDNSで切り替え)を採用する大手メディアも増えていて、可用性を極める現場ほど「CDNを信じすぎない設計」に向かっています。

ホスティング選定マトリクス

プロジェクトの規模や要件によって、最適なホスティング構成は変わります。個人開発と大規模グローバル展開では、全く違うスタックになります。

規模・要件推奨向くケース
個人ブログ・ポートフォリオVercel / Netlify / Cloudflare Pages(無料枠で十分)無料で始めてGit pushだけで公開したい
中規模SaaSCloudFront + S3 or Vercel Proコスト管理と自前運用を両立したい
グローバル大規模Fastly / Akamai + 自前オリジン(CDN調整自由度高)世界配信でCDN設定を細かく制御したい
セキュリティ重視・社内自社CDN / クローズドCDNデータが外部に出せない規制環境

本シリーズが置かれている senkohome.com は「CloudFront + S3」構成です。Vercel系は手軽ですが、完全自前管理と「コスト明瞭さ」を重視するならAWS直叩きも十分に実用的です。

やってはいけないこと

CDNキャッシュの運用で事故る典型パターンを整理します。どれもサイト全停止・古い版表示・請求書爆発の原因になります。

禁じ手なぜダメか
HTMLを長期キャッシュ(max-age=31536000)で配信デプロイしても古い版が出続ける地獄。HTMLは短命(s-maxage=60)
ファイル名をハッシュ化せず長期キャッシュ更新のたびにinvalidationが必要。ビルドツールが自動ハッシュ化するのを使う
CDN invalidationに頼る運用全世界伝播に数分・料金発生。ハッシュ化ファイル名で根本解決
画像を元サイズのまま配信LCP悪化の定番。Next/Image / Astro Image / Cloudflare Imagesで自動変換
CDNを入れずにオリジン直接配信DDoSに一晩で落とされる。Cloudflare無料枠で十分
CDN障害時のフォールバック未設計2019年Cloudflare・2021年FastlyのようにCDNはSPOFになり得る
Vary: User-Agent を安易に付けるキャッシュヒット率が激減。CDNがUser-Agent毎に別キャッシュ化
画像のwidth/height属性未指定CLS悪化の直接原因。必ず固定サイズを指定
Vercel / Netlify で全ページSSRにする関数実行料金が線形爆発。Static Firstで設計
Git push以外の手動FTP / SCPデプロイAI時代の生産性を殺す。Git連携プラットフォームへ移行
「CDNは速くするだけ」と思い込むDDoS吸収・オリジン負荷軽減の方が重要。落ちない仕組みとして導入
「画像は後で最適化」と先送り画像が最大のペイロードでLCPに直撃。最初からFW機能で自動変換

CDNは入れるだけでは守りません。設定と運用で価値が決まります。

AI判断軸

AI時代に有利AI時代に不利
Vercel / Netlify / Cloudflare Pages(Git連携)手動FTP・独自デプロイスクリプト
フレームワーク密結合型(Next.js + Vercel等)自前Nginx・手動SSL管理
エッジ関数(Cloudflare Workers等)従来Lambda + CloudFront(起動遅延)
ハッシュ化ファイル名 + CDN標準設定手動invalidation運用
  1. CDN前提で設計する(レイテンシDDoS・負荷分散の三位一体)
  2. Static Firstの発想(全SSRは過剰設計)
  3. ハッシュ化ファイル名 + 長期キャッシュ(invalidation依存を捨てる)
  4. Git push = 本番デプロイ(AI駆動開発の前提)

Git push = デプロイの構成がAI駆動開発の前提

Vercel・Netlify・Cloudflare PagesのようなGit連携型プラットフォームでは、mainブランチへのpushが即座に本番デプロイになります。AIがコードを生成→PRを作成→マージ→自動デプロイ、という一連のフローが人間の介入なしで回るため、AI駆動開発のデプロイ頻度を最大化できます。

手動FTPや独自デプロイスクリプトでは、AIが書いたコードの本番反映に人間の手動操作が挟まり、デプロイのボトルネックになります。

エッジ関数とAIの組み合わせ

Cloudflare Workers・Vercel Edge FunctionsのようなEdge Runtimeは、AIが生成したサーバサイドロジックをグローバルに低レイテンシで配信できます。AIにEdge Function用のコードを書かせる場合、Node.js互換が部分的であることに注意が必要です(fsモジュールが使えない等)。この制約をプロジェクトルールとして明示しておくと、AIは互換性のあるAPIだけを使ったコードを生成します。

決めるべきこと — 自分のプロジェクトでの答えは?

以下の項目について、自分のプロジェクトの答えを1〜2文で言語化してみてください。曖昧なまま着手すると、必ず後から「なぜそう決めたんだっけ」が問われます。

  • 配信元(S3 / VPS / プラットフォーム型)
  • CDN製品(CloudFront / Cloudflare / Fastly等)
  • キャッシュTTL戦略(HTML短命・静的長期)
  • 独自ドメインとSSL自動化
  • エッジコンピューティングの利用範囲
  • 画像最適化方針(フォーマット・CDN変換)
  • Core Web Vitalsの目標値と計測方法

この記事に関連する記事

https://senkohome.com/arch-intro-frontend-rendering/ https://senkohome.com/arch-intro-frontend-auth/ https://senkohome.com/arch-intro-frontend-bff/

まとめ

本記事はホスティングについて、CDNキャッシュ戦略・エッジ・Core Web Vitalsまで含めて解説しました。如何だったでしょうか。

CDN前提・Static First・ハッシュ化ファイル名・Git push = 本番デプロイ。この4点を押さえれば、配信は速く・落ちず・運用が軽くなります。

次回はレンダリング方式MPA/SPA/SSR/SSG/ISR)について解説します。

シリーズ目次に戻る → 『生成AI時代のアーキテクチャ超入門』の歩き方

本記事で扱った内容の詳細は Amazon CloudFront も合わせて参考にしてください。

それでは次の記事も閲覧いただけると幸いです。