レスポンスキャッシュとCDN統合ガイド

Smart Money APIのパフォーマンスを最適化するためのインテリジェントなキャッシュ戦略を学びましょう。HTTPキャッシュヘッダー、ETag検証、CDN統合、クライアントサイドキャッシュパターンを使用してレイテンシと帯域幅コストを削減します。

公開日: 2026年3月21日 読了時間16分 パフォーマンス

キャッシュの概要

Smart Money APIエンドポイントは、異なる頻度で変化する暗号通貨市場データを提供します。一部のデータ(クジラアドレス、資金調達レート)は数秒ごとに更新され、他のデータ(履歴分析、教育コンテンツ)は数時間静的なままです。インテリジェントなキャッシュはパフォーマンスを大幅に向上させ、コストを削減します。

Smart Money APIは3層のキャッシュ戦略を実装しています:

  • CDNエッジキャッシュ — 自動キャッシュ無効化を伴うグローバルコンテンツ配信
  • HTTPブラウザキャッシュ — 標準HTTPヘッダーを使用したクライアントサイドキャッシュ
  • アプリケーションキャッシュ — 頻繁にアクセスされるデータセットのためのメモリ内キャッシュ

パフォーマンスインサイト: キャッシュされたレスポンスは、新しいAPIリクエストよりも50~100倍高速に処理され、帯域幅を大幅に節約します。適切にキャッシュされた統合により、データ転送量を70~85%削減できます。

すべてのSmart Money APIレスポンスには、データが有効な期間をクライアントとCDNに伝えるキャッシュディレクティブが含まれています。これらのディレクティブを理解し、正しく実装することが最適なパフォーマンスには不可欠です。

キャッシュの基礎

HTTPキャッシュは、コンテンツをキャッシュできるかどうか、そしてどのくらいの期間キャッシュできるかを示すレスポンスヘッダーに基づいて動作します。

Cache-Controlヘッダー

キャッシュ動作を制御する主要なメカニズム。すべてのSmart Money APIレスポンスには、以下を指定するCache-Controlヘッダーが含まれます:

  • max-age — レスポンスが有効な期間(秒単位)
  • public/private — 中間キャッシュが保存できるかどうか
  • must-revalidate — 提供前に新鮮さを確認するかどうか
  • no-store — 機密データをキャッシュしない

キャッシュヘッダーの例

エンドポイントごとに異なるキャッシュ要件があります:

レスポンスヘッダー
// クジラアドレスデータ(5分ごとに更新)
Cache-Control: public, max-age=300
ETag: "abc123def456"
// リアルタイム資金調達レート(1秒ごとに更新)
Cache-Control: public, max-age=1
ETag: "xyz789abc123"
// 履歴データ(変更なし)
Cache-Control: public, max-age=86400, immutable
ETag: "static-content-v1"

エンドポイントタイプ別キャッシュ期間

データタイプ キャッシュ期間 ユースケース
リアルタイム資金調達 1-5秒 ライブ取引、ポジションサイジング
クジラの動き 5分 シグナル確認、アラート
日次OHLCV 1時間 テクニカル分析、チャート
履歴分析 24時間 バックテスト、リサーチ
静的コンテンツ 7日間 APIドキュメント、ガイド、設定
30秒でAPIキーを取得

構築の準備はできましたか?無料のAPIキー(1日100回、カード不要)を取得して、ライブのクジラ、資金調達、オンチェーンデータを取得しましょう。

APIキーを取得 →

HTTPキャッシュヘッダー

Smart Money APIレスポンスには、パフォーマンスを最大化しながらデータの新鮮さを維持するために連携するいくつかのキャッシュ関連ヘッダーが含まれています。

Cache-Control: 主要なヘッダー

ブラウザと中間キャッシュのキャッシュ動作を制御します:

Cache-Controlディレクティブ
// 公開データ、5分間キャッシュ
Cache-Control: public, max-age=300
// プライベートデータ、ブラウザのみでキャッシュ
Cache-Control: private, max-age=3600
// 不変コンテンツ、永久キャッシュ
Cache-Control: public, max-age=31536000, immutable
// 提供前に常に再検証
Cache-Control: public, max-age=0, must-revalidate
// 機密データをキャッシュしない
Cache-Control: private, no-store, no-cache

Expiresヘッダー(レガシー)

古いクライアント向けに、Smart MoneyはExpiresヘッダー(HTTP/1.0)も提供します:

Expiresヘッダー
// 絶対的な有効期限
Expires: Wed, 22 Mar 2026 14:30:00 GMT
// HTTP/1.1ではCache-Control max-ageが優先されます

Last-Modifiedヘッダー

コンテンツが最後に更新された時刻を示し、条件付きリクエストを可能にします:

Last-Modifiedの使用法
// レスポンスにLast-Modifiedを含む
Last-Modified: Wed, 21 Mar 2026 10:15:30 GMT
// クライアントはIf-Modified-Sinceで再検証
If-Modified-Since: Wed, 21 Mar 2026 10:15:30 GMT
// 変更されていない場合、サーバーは304 Not Modifiedで応答
HTTP/1.1 304 Not Modified

Varyヘッダー

レスポンスに影響を与えるリクエストヘッダー(認証、パラメータ)をキャッシュに伝えます:

Varyヘッダー
// レスポンスは認証とシンボルによって異なる
Vary: Authorization, X-Symbols
// キャッシュは異なる値に対して別々のバージョンを保存

ETagと条件付きリクエスト

ETag(エンティティタグ)は、完全なレスポンスボディをダウンロードせずにキャッシュされたコンテンツを検証する効率的な方法を提供します。

ETagの仕組み

  1. 初期リクエスト — クライアントがデータをリクエストし、サーバーがETagで応答
  2. キャッシュストレージ — クライアントはETagと共にレスポンスをキャッシュ
  3. 後続のリクエスト — クライアントはキャッシュされたETagを含むIf-None-Matchヘッダーを送信
  4. 検証 — データが変更されていない場合、サーバーは304 Not Modifiedを返す
  5. 帯域幅の節約 — レスポンスボディが送信されないため、大幅な帯域幅節約

ETagの実装

初期リクエスト&レスポンス
// 初回リクエスト
GET /v1/whales/btc HTTP/1.1
// レスポンスにはETagが含まれる
HTTP/1.1 200 OK
ETag: "8a3b9c2d"
Cache-Control: public, max-age=300
Content-Type: application/json
{...response body...}
条件付き再検証
// キャッシュ期限切れ後、If-None-Matchを送信
GET /v1/whales/btc HTTP/1.1
If-None-Match: "8a3b9c2d"
// 変更されていない場合、サーバーは304を返す
HTTP/1.1 304 Not Modified
ETag: "8a3b9c2d"
Cache-Control: public, max-age=300
// ボディ送信なし!帯域幅節約

ETagの強度

ETagには強い検証と弱い検証がある:

タイプ 形式 使用例
強いETag "8a3b9c2d" バイト単位で同一、検証用
弱いETag W/"8a3b9c2d" 意味的に同等、表示変更用

Cache-Controlディレクティブ

Cache-Controlディレクティブを理解することで、アプリケーションに最適なキャッシュ戦略を構築できます。

ディレクティブリファレンス

ディレクティブ 意味
max-age レスポンスが新鮮な状態を保つ秒数 max-age=300
public キャッシュ可能で共有可能 public
private 受信者のみがキャッシュ可能 private
must-revalidate 古くなったら再検証必須 must-revalidate
no-cache 使用前に必ず再検証 no-cache
no-store 一切キャッシュしない no-store
immutable 永久不変、無限キャッシュ immutable
s-maxage CDNキャッシュ期間 s-maxage=3600

実践的なCache-Controlパターン

一般的なパターン
// パターン1: ブラウザキャッシュ300秒、CDN1時間
Cache-Control: public, max-age=300, s-maxage=3600
// パターン2: ユーザー固有データ、プロキシキャッシュ不可
Cache-Control: private, max-age=1800
// パターン3: 常に最新、常にチェック
Cache-Control: public, no-cache, must-revalidate
// パターン4: 不変のバージョン付きアセット
Cache-Control: public, max-age=31536000, immutable

CDN統合

Smart Money APIはCloudflareのグローバルCDNネットワーク経由でレスポンスを配信し、世界中のエッジロケーションで自動的にキャッシュされるため、レイテンシーを最小限に抑えます。

Smart Money CDNの仕組み

  1. ユーザーリクエスト — リクエストが最寄りのCloudflareエッジロケーションに到達
  2. キャッシュチェック — エッジがレスポンスがキャッシュ済みで新鮮か確認
  3. キャッシュヒット — キャッシュ済みの場合、10ms未満のレイテンシーですぐに提供
  4. キャッシュミス — キャッシュされていない場合、オリジンサーバーから取得
  5. 保存&提供 — レスポンスをキャッシュしユーザーに配信

キャッシュキー設定

Cloudflareはキャッシュキーを使用してキャッシュレスポンスを一意に識別します。デフォルトでは:

  • リクエストパスとクエリパラメータが含まれる
  • ほとんどのヘッダーは無視される(キャッシュヒット率最大化のため)
  • Authorizationヘッダーは含まれない(アカウント情報漏洩防止)
  • カスタムヘッダーはVaryヘッダー経由で含め可能

CDNパージ

Smart Moneyはデータ更新時にCDNキャッシュを自動的にパージします:

手動キャッシュパージ
// CDNから特定URLをパージ
curl -X POST "https://api.smartmoneyapi.com/v1/cache/purge" \
-H "Authorization: Bearer token" \
-d '{
"urls": [
"https://api.smartmoneyapi.com/v1/whales/btc"
]
}'

CDNパフォーマンス測定

レスポンスヘッダーを確認してリクエストがキャッシュから提供されたか確認:

レスポンスヘッダー
// CDNエッジからのキャッシュヒット
CF-Cache-Status: HIT
CF-RAY: 8a9b7c6d5e4f3g2h
Age: 45 // キャッシュからの経過秒数
// キャッシュミス、オリジンから取得
CF-Cache-Status: MISS
Age: 0

クライアントサイドキャッシュ

API呼び出しをさらに削減し応答性を向上させるため、アプリケーションにキャッシュを実装します。

ブラウザキャッシュ実装

JavaScriptキャッシュ
// キャッシュストレージ作成
const cache = new Map();
async function fetchWithCache(url) {
// キャッシュを最初に確認
const cached = cache.get(url);
if (cached && !isCacheExpired(cached)) {
return cached.data;
}
// APIから取得
const response = await fetch(url);
const data = await response.json();
// ヘッダーからキャッシュ期間を解析
const cacheControl = response.headers
.get('cache-control');
const maxAge = parseMaxAge(cacheControl);
// キャッシュに保存
cache.set(url, {
data,
expiry: Date.now() + (maxAge * 1000)
});
return data;
}

Service Worker キャッシュ

オフライン対応と高度なキャッシュ戦略には、Service Workerを使用します:

Service Worker
// Service WorkerでAPIレスポンスをキャッシュ
self.addEventListener('fetch', (event) => {
if (event.request.url.includes('api.smartmoneyapi.com')) {
// ネットワーク優先、キャッシュにフォールバック
event.respondWith(
fetch(event.request)
.then(response => {
// キャッシュを最新のレスポンスで更新
caches.open('api-cache')
.then(cache => cache.put(
event.request, response.clone()));
return response;
})
.catch(() =>
caches.match(event.request))
);
}
});

キャッシュバスティング戦略

時にはクライアントに強制的に最新データを取得させる必要があります。以下の手法を使用します:

バージョンパラメータ

データ変更時にキャッシュを無効化するため、バージョンパラメータを追加:

バージョン付きURL
// データバージョンまたはタイムスタンプを含める
https://api.smartmoneyapi.com/v1/whales/btc?v=1709980800
// データ更新時、バージョンをインクリメント
https://api.smartmoneyapi.com/v1/whales/btc?v=1709981000
// 新しいURL = 新しいキャッシュエントリ

強制再検証

最新データが必要な場合、Cache-Control: no-cacheでキャッシュを上書き:

強制最新データ
// JavaScript: 強制的に最新リクエスト
fetch(url, {
cache: 'no-cache', // 常に再検証
headers: {
'Cache-Control': 'max-age=0'
}
});

キャッシュパフォーマンスの監視

キャッシュヒット率とパフォーマンス改善を追跡し、キャッシュ戦略を検証します。

監視すべきキャッシュメトリクス

  • ヒット率 — キャッシュから提供されたリクエストの割合(目標: >70%)
  • レスポンス時間 — 平均レイテンシ(キャッシュ時: <50ms、非キャッシュ時: 100-300ms)
  • 節約された帯域幅 — データ転送の削減
  • オリジン負荷 — オリジンサーバーへのリクエスト削減

キャッシュヘッダーの分析

キャッシュ分析スクリプト
// レスポンスキャッシュヘッダーを分析
async function analyzeCache(url) {
const response = await fetch(url);
return {
cacheControl: response.headers
.get('cache-control'),
etag: response.headers.get('etag'),
age: response.headers.get('age'),
cfStatus: response.headers
.get('cf-cache-status'),
contentLength:
response.headers.get('content-length')
};
}

キャッシュのベストプラクティス

1. レスポンスヘッダーを尊重

Smart Money APIからのCache-Controlヘッダーを常に尊重します。no-storeやno-cacheとマークされたコンテンツはキャッシュしないでください。

2. 条件付きリクエストを実装

キャッシュされたコンテンツを再検証する際、If-None-Match(ETag)とIf-Modified-Sinceヘッダーを送信します。304レスポンスで帯域幅を節約。

3. データタイプに応じて適切にキャッシュ

  • リアルタイムデータ(資金調達レート): 最大1-5秒キャッシュ
  • ライブシグナル(クジラの動き): 5-30秒キャッシュ
  • 時間データ(OHLCV): 1時間キャッシュ
  • 履歴データ: 24時間キャッシュ
  • 静的コンテンツ: 7日間キャッシュ

4. キャッシュ効果を監視

ヒット率とレイテンシ改善を追跡。データの鮮度要件とキャッシュパフォーマンスに基づきTTLを調整。

5. Varyヘッダーは慎重に使用

Varyヘッダーは別々のキャッシュエントリを作成しヒット率を低下させます。異なる認証レベルやパラメータが必要な場合のみ使用。

6. 複数レイヤーでキャッシュ

CDN、ブラウザ、アプリケーションレベルでキャッシュを実装。各レイヤーがオリジンに到達する前にリクエストをキャッチ。

APIパフォーマンスを最適化

Smart Money APIのキャッシュインフラはグローバルスケールで100ms未満のレスポンスを保証。インテリジェントなキャッシュ戦略を実装し、パフォーマンス最大化とコスト最小化を実現。

プランを比較
全てのプランにフルCDNキャッシュが含まれます。上位ティアではキャッシュ制御とパージングAPIを提供。

関連リソース

無料で開始 — 200コール/日、カード不要

1つのAPIから3取引所のライブクジラフロー、資金調達、オープンインタレスト、オンチェーンデータを取得。無料ティア、クレジットカード不要、いつでもアップグレード可能。

無料で開始 →
ライブAPIコンソールを試す → (アカウント不要)