blog.dopana

Back

モダンなWeb開発において、画像やHTMLなどの静的アセットをCDNでキャッシュするのは一般的です。しかし、世界中のユーザーへミリ秒未満の超低遅延で提供したい動的なアプリケーションデータはどう管理すべきでしょうか?

そこで活躍するのが Cloudflare Workers KV(Key-Value)です。エッジ環境において高頻度な読み込みに特化した、グローバル分散型のサーバーレスKey-Valueストレージです。

1. Cloudflare KVとは?(子どもでもわかる解説)#

世界中に330店舗以上ある国際的なカフェチェーンを想像してみてください。

  • もし東京・ロンドン・ニューヨークのバリスタが、当日の割引メニューを確認するために毎回カリフォルニアの本社へ国際電話をかけていたら、お客さんは待ちくたびれてしまいます。
  • Cloudflare KV は、割引メニューのコピーをあらかじめ世界中の全店舗のレジ横に置いておく仕組みです。
  • お客さんが来たら、レジ横のメモを一瞬で確認できます(1ms未満のローカル読み込み)。本社が価格を変更したときは、数秒〜数十秒以内に全店舗へ新しいコピーが届けられます(結果整合性: Eventual Consistency)。
flowchart TD
    subgraph GlobalEdge["Cloudflare グローバルエッジ (330+拠点)"]
        direction LR
        Edge1["🇯🇵 東京エッジ<br/>ローカルKVキャッシュ (~1ms)"]
        Edge2["🇬🇧 ロンドンエッジ<br/>ローカルKVキャッシュ (~1ms)"]
        Edge3["🇺🇸 NYエッジ<br/>ローカルKVキャッシュ (~1ms)"]
    end

    subgraph Central["中央KVストレージ層"]
        CoreDB["グローバルコアストレージ<br/>永続化層"]
    end

    ClientTokyo["📱 東京のユーザー"] -->|GET /config| Edge1
    ClientLondon["📱 ロンドンのユーザー"] -->|GET /config| Edge2
    ClientNY["📱 NYのユーザー"] -->|GET /config| Edge3

    Admin["💻 管理者 / バックエンド"] -->|PUT key=value 書き込み| CoreDB
    CoreDB -.->|非同期エッジレプリケーション| Edge1
    CoreDB -.->|非同期エッジレプリケーション| Edge2
    CoreDB -.->|非同期エッジレプリケーション| Edge3

2. Cloudflare KVの主な特徴#

  • 圧倒的な読み取りスループット: 世界中で毎秒数百万件の読み込みリクエストを処理可能。
  • Read-Local / Write-Central モデル: 書き込みは中央ストレージに集約され、世界330以上のデータセンターへ非同期に配信されます。
  • 結果整合性(Eventual Consistency): 書き込み後、世界中の全エッジに約60秒以内にデータが伝播します。
  • シンプルなKVSモデル: キーは最大512バイト、バリューは最大25MBまで格納可能。
  • TTL(有効期限)の標準サポート: expirationTtlexpiration を指定してキーの自動失効が可能。
  • 軽量メタデータの付与: キーに最大1KBのJSONメタデータを紐付け、本体をダウンロードせずに高速判定が可能。

3. Cloudflare KVの使い方#

wrangler.toml でのバインディング設定#

wrangler.toml
name = "my-edge-app"
main = "src/index.ts"
compatibility_date = "2026-08-01"

[[kv_namespaces]]
binding = "CONFIG_KV"
id = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
toml

Workers(TypeScript)での実装コード#

4. 比較: Cloudflare KV vs 単一VPSのインメモリRAM (Redis) vs DynamoDB#

Cloudflare KVと、VPS上で動かすRedisやAWS DynamoDBとのアーキテクチャの違いを見てみましょう:

flowchart LR
    subgraph VPS["単一VPS / 自前Redis"]
        direction TB
        Server["VPS (RAMキャッシュ)"]
        UserUS["🇺🇸 USユーザー (高速 ~5ms)"] --> Server
        UserAsia["🇯🇵 アジアユーザー (遅延 ~200ms)"] --> Server
    end

    subgraph CF["Cloudflare KV グローバル分散"]
        direction TB
        KV_US["🇺🇸 US エッジKV (~1ms)"]
        KV_JP["🇯🇵 日本エッジKV (~1ms)"]
        UserUS2["🇺🇸 USユーザー"] --> KV_US
        UserJP2["🇯🇵 日本ユーザー"] --> KV_JP
    end

特徴比較表#

比較項目Cloudflare KVVPS インメモリRAM (Redis)AWS DynamoDB / Global Tables
グローバル展開330以上のエッジPoPに自動展開単一リージョン(クラスタ自作が必要)マルチリージョン設定が必要
読み込みレイテンシユーザー最寄りのエッジで < 1ms距離に応じて150〜300msの遅延リージョン内で5〜15ms
書き込みの整合性結果整合性(約60秒で全同期)即時整合性(強い整合性)設定可能な強い整合性
書き込みスループットキーあたり約1回/秒毎秒10万回以上の超高速書き込みプロビジョニングに応じて拡張可能
運用保守コストゼロ(完全サーバーレス)高い(OS更新、冗長化、バックアップ)中程度(IAM・キャパシティ設計)
料金体系従量課金($0.50/GB、無料枠あり)サーバー固定費(月額55〜50+)リクエスト数・容量課金
データ容量制限1値あたり最大25MBサーバーRAM容量に依存1アイテムあたり最大400KB

5. Cloudflare KVの使い所(向いている用途・不向きな用途)#

最適なユースケース(Read過多・低頻度Write)#

  • 機能フラグ(Feature Flags)と動的設定: 再デプロイ不要で機能を即座に切り替え。
  • ユーザー認証トークン・APIキーの検証: エッジで素早くアクセス権限を判定。
  • URL短縮サービス・リダイレクト管理: 短縮スラッグから転送先URLへ即時リダイレクト。
  • A/Bテストの配信制御: ユーザーの地域や属性に応じた設定の出し分け。
  • APIレスポンスのキャッシュ(Cache-Aside): オリジンDBへの負荷を削減。

向いていないユースケース#

  • リアルタイムカウンター・頻繁な数値インクリメント: キーあたり秒間1回の書き込み制限があるため、Durable Objects や D1 を推奨。
  • 金融決済やトランザクション処理: 厳密な即時整合性(ACID)が必要な処理。
  • 複雑なリレーショナル検索・フィルタリング: キー完全一致または前方一致のみ対応。テーブル結合が必要な場合は Cloudflare D1(SQLite)を利用。

6. まとめ#

Cloudflare KVを使えば、世界中に広がる分散キャッシュ基盤を env.KV.get('key') という簡単なコードだけで手に入れることができます。「読み込み頻度が高く、世界中から超高速に参照でき、サーバー管理を一切したくない」 という要件において、Cloudflare KVは最も費用対効果の高い選択肢です。

参考文献#