Performance & Scalabilityシリーズの一部
完全ガイドを読む遅延が 100 ミリ秒改善されるごとに、e コマースのコンバージョン率が 1.1% 増加します。 月商 100 万ドルの店舗の場合、その 100 ミリ秒の改善は年間 132,000 ドルの追加収益に相当します。 CDN の最適化は、あると便利な技術的なものではなく、直接的な収益源です。
このガイドでは、CDN アーキテクチャ、キャッシュ戦略、エッジ コンピューティング、Web アプリケーション、e コマース ストア、ERP システムのパフォーマンス チューニングについて説明します。
重要なポイント
- 適切なキャッシュ ヘッダーだけで、オリジン サーバーの負荷を 60 ~ 80% 削減できます。
- CDN 変換による画像の最適化により、コード変更なしでページの重量が 40 ~ 60% 削減されます。
- エッジ コンピューティングにより API ロジックがユーザーの近くに移動し、キャッシュされた応答の遅延が 200 ミリ秒から 20 ミリ秒に短縮されます。
- マルチ CDN 戦略は、世界中の視聴者にフェイルオーバーと地理的な最適化を提供します
CDN アーキテクチャの基礎
CDN の仕組み
CDN は、ユーザーに最も近い場所からコンテンツをキャッシュして提供する、世界中に分散されたサーバーのネットワークです。
User in Tokyo --> CDN Edge (Tokyo, 5ms) --> [Cache HIT] --> Response
User in London --> CDN Edge (London, 5ms) --> [Cache MISS] --> Origin (US-East, +120ms) --> Cache + Response
User in London --> CDN Edge (London, 5ms) --> [Cache HIT] --> Response (subsequent requests)
何をキャッシュするか
| コンテンツ タイプ | キャッシュ期間 | キャッシュ制御ヘッダー |
|---|---|---|
| 静的アセット (JS、CSS) | 1 年 (不変) | コード0 |
| 画像 | 30日 | コード0 |
| フォント | 1年 | コード0 |
| HTML ページ (静的) | 5分 | コード0 |
| API 応答 (公開) | 1~5分 | コード0 |
| API レスポンス (プライベート) | キャッシュしない | コード0 |
キャッシュ制御ヘッダー
Next.js キャッシュ構成
// next.config.ts
const nextConfig = {
async headers() {
return [
{
source: '/_next/static/:path*',
headers: [
{
key: 'Cache-Control',
value: 'public, max-age=31536000, immutable',
},
],
},
{
source: '/images/:path*',
headers: [
{
key: 'Cache-Control',
value: 'public, max-age=2592000',
},
],
},
];
},
};
Nginx キャッシュヘッダー
location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff2)$ {
expires 365d;
add_header Cache-Control "public, immutable";
add_header Vary "Accept-Encoding";
}
location ~* \.html$ {
expires 5m;
add_header Cache-Control "public, must-revalidate";
}
# API responses - let the application control caching
location /api/ {
proxy_pass http://backend;
proxy_cache_bypass $http_authorization;
}
画像の最適化
ほとんどの Web サイトでは、画像がページの重量の 50 ~ 70% を占めます。 CDN ベースの画像最適化により、ビルド時の画像処理が不要になります。
Cloudflareの画像変換
<!-- Original: 2.4 MB JPEG -->
<!-- Optimized: 180 KB WebP, properly sized -->
<img
src="/cdn-cgi/image/width=800,quality=80,format=auto/images/product-hero.jpg"
alt="Product"
width="800"
height="600"
loading="lazy"
/>
CDN を使用した Next.js 画像コンポーネント
// next.config.ts
const nextConfig = {
images: {
loader: 'custom',
loaderFile: './lib/image-loader.ts',
},
};
// lib/image-loader.ts
export default function cloudflareLoader({
src,
width,
quality,
}: {
src: string;
width: number;
quality?: number;
}) {
const params = [`width=${width}`, `quality=${quality || 80}`, 'format=auto'];
return `/cdn-cgi/image/${params.join(',')}${src}`;
}
画像の最適化による影響
| メトリック | CDN 最適化前 | CDN 最適化後 |
|---|---|---|
| 平均画像サイズ | 850KB | 120KB |
| ページの重さ (画像) | 4.2MB | 680KB |
| LCP (最大コンテンツフルペイント) | 3.8秒 | 1.4秒 |
| ページの合計読み込み時間 | 5.2秒 | 2.1秒 |
エッジ コンピューティング
API キャッシュ用の Cloudflare ワーカー
// worker.js - Cache API responses at the edge
addEventListener('fetch', event => {
event.respondWith(handleRequest(event.request));
});
async function handleRequest(request) {
const url = new URL(request.url);
// Only cache GET requests to public API endpoints
if (request.method !== 'GET' || !url.pathname.startsWith('/api/public/')) {
return fetch(request);
}
const cache = caches.default;
const cacheKey = new Request(url.toString(), request);
// Check cache
let response = await cache.match(cacheKey);
if (response) {
return response;
}
// Fetch from origin
response = await fetch(request);
// Clone and cache successful responses
if (response.ok) {
const cachedResponse = new Response(response.body, response);
cachedResponse.headers.set('Cache-Control', 'public, max-age=300');
cachedResponse.headers.set('X-Cache-Status', 'MISS');
event.waitUntil(cache.put(cacheKey, cachedResponse.clone()));
return cachedResponse;
}
return response;
}
eコマースのエッジユースケース
| 使用例 | レイテンシーの改善 | 実装 |
|---|---|---|
| 製品カタログAPI | 200ミリ秒から5ミリ秒 | エッジで 5 分間キャッシュ |
| 地理位置情報リダイレクト | 100ミリ秒から1ミリ秒 | IP ルックアップを使用したエッジ ワーカー |
| A/B テスト | 50ミリ秒から0ミリ秒 | エッジワーカーがバリアントを割り当てる |
| ボットの検出 | 100ミリ秒から5ミリ秒 | 原点前のエッジチャレンジ |
| 価格のローカリゼーション | 150ミリ秒から5ミリ秒 | 通貨換算を伴うエッジ ワーカー |
CDN プロバイダーの比較
| 特集 | クラウドフレア | AWS クラウドフロント | 早く | バニーCDN |
|---|---|---|---|---|
| グローバルPoP | 310+ | 450+ | 80+ | 114+ |
| 無料枠 | 寛大 | 1 TB/月 (12 か月) | なし | なし |
| エッジコンピューティング | 労働者 | ラムダ@エッジ | コンピューティング@エッジ | エッジスクリプト |
| 画像の最適化 | 内蔵 | ラムダが必要 | 内蔵 | 内蔵 |
| WebSocket のサポート | はい | はい | はい | はい |
| DDoS 保護 | 含まれています | AWS シールド (追加) | 含まれています | 基本 |
| 開始価格 | 無料 | 従量課金制 | $50/月 | 1 ドル/月 |
推奨事項: ほとんどのビジネス向けの Cloudflare。無料利用枠は寛大で、エッジ ネットワークは最大規模で、Workers は追加のインフラストラクチャなしで強力なエッジ コンピューティングを提供します。
マルチ CDN 戦略
マルチ CDN を使用する理由
すべてのリージョンで最高のパフォーマンスを発揮できる単一の CDN はありません。マルチ CDN 戦略は、ユーザーをその場所で最もパフォーマンスの高い CDN にルーティングします。
| アプローチ | 複雑さ | コスト | メリット |
|---|---|---|---|
| プライマリ + フェイルオーバー | 低い | 1.1倍 | 信頼性 |
| 地理的ルーティング | 中 | 1.3倍 | レイテンシの最適化 |
| パフォーマンスベースのルーティング | 高 | 1.5倍 | 可能な限り最高のレイテンシ |
実装
DNS レベルのルーティングを使用して、ユーザーを最適な CDN に誘導します。
User request -> DNS (Cloudflare/Route53)
|
+--> US/EU traffic -> Cloudflare (best PoP coverage)
|
+--> APAC traffic -> AWS CloudFront (strong APAC presence)
|
+--> China traffic -> Alibaba CDN (required for China performance)
ほとんどの企業では、DNS レベルで構成されたフェイルオーバー CDN を備えた単一の CDN (Cloudflare) で、完全なマルチ CDN ルーティングの複雑さを省いて十分な冗長性を提供できます。
CDN によくある落とし穴
落とし穴 1: 認証されたコンテンツのキャッシュ
ユーザー固有のデータを含む応答をキャッシュしないでください。ユーザー A のキャッシュされた応答がユーザー B に提供されると、セキュリティ侵害になります。すべての認証された API 応答には Cache-Control: private, no-store を使用します。
落とし穴 2: デプロイメントのキャッシュ無効化を無視する
新しい JavaScript または CSS をデプロイすると、ユーザーはキャッシュされた古いバージョンを受け取る可能性があります。解決策:
- コンテンツのハッシュ: ファイル名にハッシュを含めます (
app.a1b2c3d4.js)。 Next.js はこれを自動的に行います。 - デプロイ時のキャッシュのパージ: デプロイ パイプラインの一部として CDN キャッシュをパージします。
- バージョン付き URL:
/styles.cssではなく/v2/styles.css。
落とし穴 3: 動的コンテンツに対する CDN の構成ミス
CDN がキャッシュすべきではない動的コンテンツ (API 応答、ユーザー状態を含む HTML ページ) をキャッシュすると、古いデータまたは不正確なデータが提供されることになります。 CDN キャッシュ ルールを定期的に監査し、Vary ヘッダーを使用してキャッシュの競合を防ぎます。
パフォーマンス測定
コア ウェブ バイタル ターゲット
| メトリック | 良い | 改善が必要 | 悪い |
|---|---|---|---|
| LCP (最大コンテンツフルペイント) | <2.5秒 | 2.5-4.0秒 | >4.0秒 |
| INP (次のペイントへのインタラクション) | <200ms | 200-500ミリ秒 | >500ミリ秒 |
| CLS (累積レイアウト シフト) | <0.1 | 0.1~0.25 | >0.25 |
キャッシュパフォーマンスの監視
# Check CDN cache hit ratio
curl -sI https://example.com/page | grep -i "cf-cache-status\|x-cache\|age"
# Expected output for a cached response:
# cf-cache-status: HIT
# age: 3600
キャッシュ ヒット率を経時的に追跡します。目標: 静的アセットでは 85% 以上、動的コンテンツでは 50% 以上。
よくある質問
ユーザーが 1 つの国にいる場合、CDN は必要ですか?
はい、しかしメリットは変わります。地理的な遅延が軽減される代わりに、DDoS 保護、SSL 終了オフロード、イメージの最適化、オリジン サーバーの負荷軽減が得られます。単一国の視聴者であっても、CDN はサーバーのコストを削減し、信頼性を向上させます。 Cloudflareの無料利用枠により、これはコストゼロで改善されます。
動的コンテンツのキャッシュの無効化はどのように処理すればよいですか?
3 つの戦略: (1) 頻繁に変更されるコンテンツに対する短い TTL (1 ~ 5 分)、(2) コンテンツ更新のためのタグごとのパージを備えたキャッシュ タグ、(3) バックグラウンドで新しいコンテンツを取得しながらキャッシュされたコンテンツを提供する stale-while-revalidate ヘッダー。 CDN キャッシュには s-maxage を、ブラウザー キャッシュには max-age を個別に使用します。
ERP システムに CDN を使用する必要がありますか?
CDN は、ERP 静的資産 (JavaScript、CSS、画像) および一般向けポータルに有益です。認証された API 応答やセッション依存のコンテンツをキャッシュしないでください。 ECOSIRE は、セキュリティ リスクのない最適なキャッシュを確保するために、Odoo 実装サービス の一部として CDN キャッシュを構成します。
CDN はサーバー側のレンダリングとどのように対話しますか?
Next.js SSR ページの場合は、短い TTL (1 ~ 5 分) の完全な URL (クエリ パラメーターを含む) に基づいてキャッシュするように CDN を構成します。 Next.js がバックグラウンドで再生成されている間に、少し古いコンテンツを提供するには、stale-while-revalidate を使用します。 ISR (増分静的再生成) は CDN キャッシュと自然に連携します。
次に何が起こるか
CDN の最適化は、負荷時のパフォーマンスを検証するための 負荷テスト と、キャッシュ ヒット率とレイテンシを追跡するための モニタリング と自然に組み合わせられます。インフラストラクチャ最適化の完全なロードマップについては、中小企業向けの DevOps ガイド を参照してください。
CDN のセットアップとパフォーマンスの最適化に関するコンサルティングについては、ECOSIRE にお問い合わせください。
ECOSIRE が発行 -- 企業が世界中でコンテンツをより迅速に配信できるよう支援します。
執筆者
ECOSIRE TeamTechnical Writing
The ECOSIRE technical writing team covers Odoo ERP, Shopify eCommerce, AI agents, Power BI analytics, GoHighLevel automation, and enterprise software best practices. Our guides help businesses make informed technology decisions.
関連記事
2026 年のクラウド ホスティングの費用はいくらですか?実質価格の内訳 (AWS、Hetzner、DigitalOcean、Odoo.sh)
請求書を支払うチームからの 2026 年の実際のクラウド ホスティング コスト: 月 5 ~ 25 ドルの趣味、月 50 ~ 400 ドルの SMB、隠れた下りとバックアップの料金、予約インスタンスの計算。
2026 年の Odoo ホスティング要件: ユーザー数によるサーバーのサイジング (実際の構成を使用)
ユーザー数別の Odoo ホスティング要件: 5 ~ 250 ユーザー以上の vCPU、RAM、ストレージ、ワーカー設定、および実際のデプロイメントからの PostgreSQL チューニング値。
Shopify 速度の最適化: ウェブの重要な要素を実際に動かす技術的チェックリスト (2026)
実店舗での LCP、INP、CLS を実際に改善するもの、時間を無駄にするもの、アプリとテーマを監査する方法について、フィールドでテストされた 2026 年の Shopify スピード チェックリスト。
Performance & Scalabilityのその他の記事
Shopify 速度の最適化: ウェブの重要な要素を実際に動かす技術的チェックリスト (2026)
実店舗での LCP、INP、CLS を実際に改善するもの、時間を無駄にするもの、アプリとテーマを監査する方法について、フィールドでテストされた 2026 年の Shopify スピード チェックリスト。
テクニカル SEO 監査チェックリスト 2026: すべてのクライアント サイトで実行する 47 のチェック
2026 年にすべてのクライアント サイトで実行する 47 項目の技術的な SEO 監査チェックリスト (クロール可能性、インデックス付け、正規化、hreflang、Core Web Vitals、ログ)。
Odoo 19 HR: スキル マトリックス、キャリア プラン、パフォーマンス サイクル
Odoo 19 HR アップグレード: ネイティブ スキル マトリックス、キャリア パス計画、パフォーマンス レビュー サイクル、9 ボックス グリッド、後継者計画、HRIS 統合。
Odoo 19 パフォーマンス ベンチマーク: PostgreSQL 17 のチューニング数値
実際の Odoo 19 パフォーマンス ベンチマーク: Web クライアント速度、ORM スループット、PG17 チューニング設定、接続プーリング、ワーカー数、スケーリングしきい値。
OpenClaw のコスト最適化と大規模なトークン効率
OpenClaw トークン コストの最適化: プロンプト キャッシュ、モデル ルーティング、応答キャッシュ、バッチ API、実稼働エージェントのテナントごとのコスト ガードレール。
1,000 万行を超えるテーブルの Power BI 増分更新
1,000 万行以上のテーブル用の Power BI 増分更新プレイブック: パーティション設計、RangeStart/RangeEnd、更新ポリシー、クエリの折りたたみ、DirectQuery ハイブリッド。