Tasuke Hubのロゴ

ITを中心に困っている人を助けるメディア

分かりやすく解決策を提供することで、あなたの困ったをサポート。 全ての人々がスムーズに生活できる世界を目指します。

Cloudflareインフラストラクチャ完全ガイド 2025年最新版

記事のサムネイル
TH

Tasuke Hub管理人

東証プライム市場上場企業エンジニア

情報系修士卒業後、大手IT企業にてフルスタックエンジニアとして活躍。 Webアプリケーション開発からクラウドインフラ構築まで幅広い技術に精通し、 複数のプロジェクトでリードエンジニアを担当。 技術ブログやオープンソースへの貢献を通じて、日本のIT技術コミュニティに積極的に関わっている。

🎓情報系修士🏢東証プライム上場企業💻フルスタックエンジニア📝技術ブログ執筆者

Cloudflareインフラストラクチャ完全ガイド 2025年最新版

Cloudflareのグローバルネットワークとその仕組み

Cloudflareは2025年現在、世界190以上の都市にPoints of Presence(POP)を展開し、インターネットトラフィックの約30%を処理しています。この巨大なグローバルネットワークが、Cloudflareのすべてのサービスの基盤となっています。

Anycastネットワークの仕組み

Cloudflareのネットワークは「Anycast」技術を採用しています。Anycastでは、同じIPアドレスが複数の場所(POP)に割り当てられ、ユーザーのリクエストは自動的に最も近いPOPへルーティングされます。

# Anycastの仕組み(概念図)
User ---> [ インターネット ] ---> 最寄りのCloudflare POP
                               /    |    \
                             POP1  POP2  POP3 (同じIPアドレス)

この技術により、以下のメリットが得られます:

  • 低遅延: ユーザーに地理的に最も近いサーバーにリクエストが送られる
  • 高可用性: 一部のPOPに障害が発生しても、トラフィックは自動的に他のPOPにルーティングされる
  • DDoS耐性: 攻撃トラフィックが複数のPOPに分散され、影響を軽減できる

グローバルネットワークの拡張

Cloudflareはネットワークを継続的に拡大しており、2025年に入ってからもアジア太平洋地域を中心に新しいPOPを追加しています。特に注目すべきは、エッジコンピューティングとAI処理のために特別に設計された高性能GPUを搭載したPOPの展開です。

# 実際のCloudflare POPの稼働状態確認(例)
$ curl -s https://www.cloudflarestatus.com/api/v2/components.json | jq '.components[] | select(.name | contains("POP")) | .name + ": " + .status'

コネクティビティクラウドとしての発展

Cloudflareは現在、単なるCDNやセキュリティサービスプロバイダーではなく、「コネクティビティクラウド」として進化しています。このアプローチでは、Cloudflareのグローバルネットワークが以下の要素を統合しています:

  • ネットワークサービス(CDN、DNS、負荷分散)
  • セキュリティ(WAF、ゼロトラスト)
  • コンピュート(Workers、AI)
  • ストレージ(R2、D1、KV)

この統合アプローチにより、従来のクラウドプロバイダーとは異なる、エッジファーストのインフラストラクチャを実現しています。

Cloudflare Workersとエッジコンピューティングの実践活用法

Cloudflare Workersは、Cloudflareのグローバルネットワーク上で動作するサーバーレスコンピューティングプラットフォームです。従来のサーバーサイドアプリケーションをエッジで実行できるため、レイテンシの削減、スケーラビリティの向上、運用コストの削減が可能になります。

Workersの基本アーキテクチャ

Cloudflare Workersは、V8 JavaScriptエンジンの分離された環境(Isolates)上で実行され、リクエストごとに新しいインスタンスを起動するのではなく、既存のIsolatesを再利用するアーキテクチャを採用しています。

// 基本的なWorkerの例
addEventListener('fetch', event => {
  event.respondWith(handleRequest(event.request))
})

async function handleRequest(request) {
  return new Response('Hello World!', {
    headers: { 'content-type': 'text/plain' },
  })
}

この設計により、コールドスタートの問題が軽減され、高速なリクエスト処理が可能になります。

Workersの実践的なユースケース

Workersは様々なユースケースに対応できます:

  1. APIプロキシと変換
// APIのレスポンスを変換するWorker
async function handleRequest(request) {
  const response = await fetch('https://api.example.com/data');
  const data = await response.json();
  
  // データを変換
  const transformedData = {
    result: data.items.map(item => ({
      id: item.id,
      name: item.title,
      description: item.content
    }))
  };
  
  return new Response(JSON.stringify(transformedData), {
    headers: { 'content-type': 'application/json' }
  });
}
  1. A/Bテスト
addEventListener('fetch', event => {
  event.respondWith(abTest(event.request));
});

async function abTest(request) {
  // ランダムにバリアントを選択
  const variant = Math.random() < 0.5 ? 'A' : 'B';
  
  let response;
  if (variant === 'A') {
    response = await fetch('https://example.com/variantA');
  } else {
    response = await fetch('https://example.com/variantB');
  }
  
  // トラッキング用にバリアントを記録
  response = new Response(response.body, response);
  response.headers.set('X-Variant', variant);
  
  return response;
}
  1. 認証とアクセス制御
async function handleRequest(request) {
  const url = new URL(request.url);
  
  // 保護されたパスの場合、認証を確認
  if (url.pathname.startsWith('/admin')) {
    const authHeader = request.headers.get('Authorization');
    if (!authHeader || !validateAuth(authHeader)) {
      return new Response('Unauthorized', { status: 401 });
    }
  }
  
  // 認証が成功したか、認証不要のパスの場合
  return fetch(request);
}

function validateAuth(authHeader) {
  // 認証ロジックを実装
  // ...
}

Workersの最新機能(2025年)

2025年の最新アップデートでは、Workersは以下の機能が強化されています:

  • Service Bindings: 異なるWorker間で直接通信できる機能
  • Workflows: 複雑な多段階プロセスを効率的に管理
  • Durable Objects: グローバルに一貫性のある状態管理とストレージ
  • AI統合: Workers AIとのシームレスな連携

これらの機能により、より複雑なアプリケーションをエッジで構築できるようになりました。

データストレージソリューション:R2とD1の特徴と使い分け

Cloudflareは2025年現在、エッジでのデータストレージを実現するための複数のソリューションを提供しています。特に注目すべきはR2(オブジェクトストレージ)とD1(SQLデータベース)です。これらのサービスは、Workersと組み合わせることで、完全なサーバーレスアプリケーションの構築を可能にします。

R2:S3互換オブジェクトストレージ

R2は、AWSのS3と互換性のあるAPIを提供するオブジェクトストレージサービスで、データの読み書きや保存に対する料金はかかりますが、データ取り出し(エグレス)料金が無料という大きな特徴があります。

// R2にオブジェクトをアップロードする例
async function handleRequest(request) {
  if (request.method === 'PUT') {
    const objectKey = new URL(request.url).pathname.slice(1);
    const value = await request.arrayBuffer();
    
    // R2 バケットに保存
    await env.MY_BUCKET.put(objectKey, value);
    
    return new Response(`Saved ${objectKey}`, { status: 200 });
  }

  return new Response('Method not allowed', { status: 405 });
}

R2の主な用途:

  • 静的ファイル(画像、動画、PDFなど)のストレージ
  • バックアップデータの保存
  • ユーザーアップロードファイルの管理
  • CDNのオリジンとしての利用

2025年の最新機能として、R2はイベント通知をサポートし、オブジェクトの作成・削除・更新時に自動的にQueuesにメッセージを送信してワークフローを自動化できるようになりました。

D1:分散SQLデータベース

D1は、Cloudflareが提供するSQLiteベースの分散リレーショナルデータベースで、Workersとシームレスに統合されています。2025年に一般提供(GA)となり、機能が大幅に強化されました。

// D1でデータを取得・保存する例
export default {
  async fetch(request, env) {
    // クエリパラメータからユーザーIDを取得
    const url = new URL(request.url);
    const userId = url.searchParams.get('user');
    
    if (request.method === 'GET') {
      // ユーザー情報を取得
      const { results } = await env.DB.prepare(
        "SELECT * FROM users WHERE id = ?"
      ).bind(userId).all();
      
      return new Response(JSON.stringify(results), {
        headers: { 'content-type': 'application/json' }
      });
    } else if (request.method === 'POST') {
      // JSONボディを解析
      const data = await request.json();
      
      // ユーザー情報を挿入
      await env.DB.prepare(
        "INSERT INTO users (id, name, email) VALUES (?, ?, ?)"
      ).bind(userId, data.name, data.email).run();
      
      return new Response('User created', { status: 201 });
    }
    
    return new Response('Method not allowed', { status: 405 });
  }
};

D1の主な用途:

  • ユーザー認証情報の管理
  • コンテンツ管理システム(CMS)のデータベース
  • アプリケーションの状態管理
  • ログや分析データの一時保存

2025年の主な機能強化:

  1. リードレプリケーション: ユーザーに近い場所でデータを読み取ることができる
  2. D1 Insights: クエリのデバッグと最適化のための分析ツール
  3. 10GBデータベース: 大規模なデータセットにも対応

KVとDurable Objects

R2とD1以外にも、Cloudflareは他のストレージオプションを提供しています:

  • KV: 低レイテンシを実現するキーバリューストア
  • Durable Objects: 一貫性のある状態を維持するためのストレージ
// KVの使用例
async function handleRequest(request, env) {
  const cacheKey = new URL(request.url).pathname;
  
  // キャッシュから値を取得
  let cachedValue = await env.MY_KV.get(cacheKey);
  
  if (cachedValue) {
    return new Response(cachedValue);
  }
  
  // キャッシュにない場合、オリジンから取得
  const response = await fetch('https://api.example.com' + cacheKey);
  const value = await response.text();
  
  // KVに保存(1時間の有効期限付き)
  await env.MY_KV.put(cacheKey, value, { expirationTtl: 3600 });
  
  return new Response(value);
}

ストレージソリューションの選択ガイド

要件 推奨ソリューション 備考
大量のバイナリデータ R2 エグレス料金なしで経済的
構造化データ、SQL D1 リレーショナルクエリをサポート
高速読み取り KV グローバルにキャッシュ
状態の一貫性 Durable Objects 厳密な一貫性が必要な場合
一時的なキュー Queues 非同期処理やバッチ処理に最適
ベクトル検索 Vectorize AI/LLMアプリケーション向け

Cloudflare Queuesによる非同期処理とバッチ処理の実装

Cloudflare Queuesは、2025年に完全な一般提供(GA)となった非同期メッセージキューサービスです。このサービスにより、Workersベースのアプリケーションで非同期処理やバッチ処理を実装できるようになりました。

Queuesの基本概念

Queuesは、プロデューサー(メッセージを送信するWorker)とコンシューマー(メッセージを処理するWorker)のパターンに基づいています。

// プロデューサーWorkerの例
export default {
  async fetch(request, env) {
    if (request.method === 'POST') {
      const body = await request.json();
      
      // キューにメッセージを送信
      await env.MY_QUEUE.send(body);
      
      return new Response('Message queued', { status: 202 });
    }
    
    return new Response('Method not allowed', { status: 405 });
  }
};

// コンシューマーWorkerの例(wrangler.tomlでキューに接続)
export default {
  // キューからのメッセージをバッチで処理
  async queue(batch, env) {
    for (const message of batch.messages) {
      try {
        const data = message.body;
        
        // メッセージの処理
        console.log(`Processing message: ${JSON.stringify(data)}`);
        
        // 処理が成功したとき
        message.ack();
      } catch (err) {
        // 処理に失敗したとき(再試行される)
        console.error(`Failed to process message: ${err}`);
        message.retry();
      }
    }
  }
};

Queuesの主要機能

  1. 保証された配信: メッセージは少なくとも1回は確実に処理されます
  2. メッセージバッチング: 複数のメッセージをまとめて効率的に処理できます
  3. エグレス料金なし: データ転送に追加料金がかかりません
  4. 遅延配信: 特定の時間が経過した後にメッセージを処理できます

Queuesの実践的なユースケース

Queuesは、次のようなシナリオで特に有用です:

  1. バックグラウンド処理
// リクエスト処理中に時間のかかる処理をキューに送信
async function handleRequest(request, env) {
  if (request.method === 'POST') {
    // リクエストデータの取得
    const formData = await request.formData();
    const email = formData.get('email');
    const fileBuffer = await formData.get('file').arrayBuffer();
    
    // メインリクエストは即座に応答
    const requestId = crypto.randomUUID();
    
    // 時間のかかる処理をキューに送信
    await env.PROCESSING_QUEUE.send({
      requestId,
      email,
      fileBuffer: [...new Uint8Array(fileBuffer)]
    });
    
    return new Response(JSON.stringify({ 
      requestId, 
      message: '処理をキューに登録しました。処理が完了すると結果がメールで送信されます。'
    }), {
      headers: { 'content-type': 'application/json' }
    });
  }
  
  return new Response('Method not allowed', { status: 405 });
}
  1. バッチ処理とデータ集約
// キューコンシューマーでバッチ処理を実装
export default {
  async queue(batch, env) {
    // バッチ処理用のデータ集約
    const analyticsData = [];
    
    for (const message of batch.messages) {
      try {
        const event = message.body;
        analyticsData.push(event);
        message.ack();
      } catch (error) {
        message.retry();
      }
    }
    
    if (analyticsData.length > 0) {
      // 集約したデータを分析システムに送信
      try {
        await sendToAnalytics(analyticsData);
      } catch (error) {
        console.error('Analytics processing failed:', error);
      }
    }
  }
};
  1. ワークフロー自動化
// R2のイベント通知とQueuesを組み合わせたワークフロー
export default {
  async queue(batch, env) {
    for (const message of batch.messages) {
      try {
        const event = message.body;
        
        // R2オブジェクトの作成イベントを処理
        if (event.type === 'object.created') {
          const objectKey = event.key;
          
          // 画像処理など特定のタイプの処理
          if (objectKey.endsWith('.jpg') || objectKey.endsWith('.png')) {
            // 画像オブジェクトを取得
            const imageObject = await env.MY_BUCKET.get(objectKey);
            
            if (imageObject) {
              const imageBuffer = await imageObject.arrayBuffer();
              
              // 画像処理(例:サムネイル生成)
              const thumbnailBuffer = await generateThumbnail(imageBuffer);
              
              // サムネイルをR2に保存
              await env.MY_BUCKET.put(
                `thumbnails/${objectKey}`, 
                thumbnailBuffer
              );
            }
          }
        }
        
        message.ack();
      } catch (error) {
        console.error('Failed to process object event:', error);
        message.retry();
      }
    }
  }
};

リソースの効率的な使用と料金

Queuesは、各キューに対する操作(書き込み、読み取り、削除)の合計数に基づいて課金されます。1つの操作は64KBのデータごとに計算されます。

効率的なQueuesの使用方法:

  1. メッセージサイズの最適化: 64KB未満のメッセージを使用し、必要なデータのみを含めることで操作コストを最小化
  2. バッチ処理の活用: 複数のメッセージを同時に処理して効率を向上
  3. エラー処理の実装: message.retry()を使用して失敗した処理を再試行

Cloudflare Queuesは、R2、D1、Workers AIなど他のCloudflareサービスと組み合わせることで、完全なサーバーレスアプリケーションのワークフローを構築するための重要な要素となっています。

セキュリティ機能とDDoS対策の最新トレンド

Cloudflareは創業当初から、セキュリティサービスを主力としてきました。2025年現在、そのセキュリティ機能はさらに進化し、特にDDoS対策と高度な脅威防御において業界をリードしています。

DDoS保護の最新機能

Cloudflareは、そのグローバルネットワークの規模と分散性を活かした効果的なDDoS保護を提供しています。2025年には次のような機能が強化されました:

  1. 自動適応型DDoS緩和
// DDoS攻撃が検出された場合のカスタム対応(例)
addEventListener('fetch', event => {
  const request = event.request;
  
  // cf-ipcountryヘッダーで攻撃の発信元国を確認
  const country = request.headers.get('cf-ipcountry');
  
  // cf-threat-scoreを取得(Cloudflareが計算した脅威スコア)
  const threatScore = parseInt(request.headers.get('cf-threat-score') || '0');
  
  // 高リスクなリクエストを処理
  if (threatScore > 50) {
    // 高リスクなリクエストに対して追加の検証を実施
    return event.respondWith(handleHighRiskRequest(request));
  }
  
  // 通常のリクエスト処理
  event.respondWith(handleRequest(request));
});

async function handleHighRiskRequest(request) {
  // 例:JavaScript チャレンジを送信
  return new Response(`
    <html>
      <head>
        <title>セキュリティチェック</title>
        <script>
          // 簡単な検証スクリプト(実際にはより複雑なものを使用)
          window.onload = function() {
            const token = calculateToken();
            window.location = window.location.href + "?token=" + token;
          }
          
          function calculateToken() {
            return Date.now().toString(36);
          }
        </script>
      </head>
      <body>
        <h1>セキュリティチェック中...</h1>
        <p>お待ちください...</p>
      </body>
    </html>
  `, {
    headers: { 'content-type': 'text/html' }
  });
}
  1. マネージドルールの強化

Cloudflareのマネージドルールは、既知の脆弱性やエクスプロイトから保護するための事前構成されたルールセットです。2025年には、AIを活用した新しいルールセットが追加され、ゼロデイ攻撃に対する保護が強化されました。

  1. レート制限とボット対策
// レート制限とボット対策の例
addEventListener('fetch', event => {
  // Workers用に設定されたレート制限を使用
  const url = new URL(event.request.url);
  
  // APIエンドポイントに対してのみレート制限を適用
  if (url.pathname.startsWith('/api/')) {
    // cf-ratelimit-*ヘッダーを確認
    const remaining = parseInt(event.request.headers.get('cf-ratelimit-remaining') || '0');
    
    if (remaining <= 0) {
      return event.respondWith(new Response('Rate limit exceeded', { status: 429 }));
    }
  }
  
  // Bot Scoreを確認
  const botScore = parseInt(event.request.headers.get('cf-bot-score') || '0');
  const botCategory = event.request.headers.get('cf-bot-category');
  
  // 明らかなボットをブロック
  if (botScore < 30 && botCategory !== 'good') {
    return event.respondWith(new Response('Blocked', { status: 403 }));
  }
  
  event.respondWith(handleRequest(event.request));
});

ゼロトラストセキュリティ

Cloudflareは「ゼロトラスト」アプローチを採用し、ネットワークセキュリティの革新的なソリューションを提供しています。2025年の主な機能は次のとおりです:

  1. Cloudflare Access: ID検証とコンテキスト認識型アクセス制御による保護
  2. Cloudflare Gateway: インターネットトラフィックの検査とフィルタリング
  3. Cloudflare WARP: 統合されたクライアントによるエンドポイント保護
// ゼロトラストアクセス制御の例
addEventListener('fetch', event => {
  const request = event.request;
  
  // Cloudflare Accessからのヘッダーを確認
  const jwtToken = request.headers.get('cf-access-jwt-assertion');
  
  if (!jwtToken) {
    // 認証情報がない場合は、Accessログインページにリダイレクト
    return event.respondWith(new Response('Unauthorized', { 
      status: 401,
      headers: {
        'WWW-Authenticate': 'Bearer'
      }
    }));
  }
  
  // JWTトークンを検証してユーザー情報を取得
  // (実際の実装はより複雑になります)
  try {
    const user = verifyJWT(jwtToken);
    
    // 追加の認可チェック
    if (!hasPermission(user, request.url)) {
      return event.respondWith(new Response('Forbidden', { status: 403 }));
    }
    
    // アクセス許可
    request.headers.set('X-User-ID', user.id);
    request.headers.set('X-User-Email', user.email);
    
    return event.respondWith(handleRequest(request));
  } catch (error) {
    return event.respondWith(new Response('Invalid token', { status: 401 }));
  }
});

Cloudy AIエージェント

2025年の新機能として、Cloudflareは「Cloudy」という名前のAIエージェントを導入しました。このエージェントは、WAFカスタムルールやGatewayポリシーなどの複雑な設定を分析し、わかりやすい要約や改善提案を提供します。

// Cloudyを使用したWAFルール分析の例
addEventListener('fetch', event => {
  const url = new URL(event.request.url);
  
  if (url.pathname === '/admin/security/analyze') {
    // Cloudyを使ってWAFルールを分析
    return event.respondWith(analyzeSecurity(event.request));
  }
  
  event.respondWith(handleRequest(event.request));
});

async function analyzeSecurity(request) {
  // WorkersAIを使用してWAFルール分析を実行
  const wafRules = await env.DB.prepare("SELECT * FROM waf_rules").all();
  
  // Workers AIに分析を依頼
  const analysis = await env.WORKERS_AI.run('@cf/meta/claude-instant-1.2', {
    prompt: `
      以下のWAFルールセットを分析し、冗長なルール、最適化可能なルール、
      セキュリティギャップを特定してください。
      
      ${JSON.stringify(wafRules)}
    `
  });
  
  return new Response(JSON.stringify({
    analysis: analysis.response,
    recommendations: generateRecommendations(analysis.response)
  }), {
    headers: { 'content-type': 'application/json' }
  });
}

セキュリティの統合と自動化

Cloudflareのセキュリティソリューションの強みは、単一のプラットフォームですべての機能が統合されていることです。これにより、2025年には次のようなメリットがあります:

  1. 一元的な可視性: すべてのセキュリティイベントを1つのダッシュボードで表示
  2. 一貫したポリシー適用: ネットワーク全体で同じセキュリティポリシーを適用
  3. 自動化されたレスポンス: 脅威に対する自動化された対応とレメディエーション

これらの機能は、セキュリティチームの負担を軽減し、組織がより効果的に脅威に対応できるようにします。

Workers AIとVectorizeによる最新AI機能の統合

2025年、CloudflareはAI機能を大幅に強化し、Workers AIとVectorizeを中心としたAIインフラストラクチャを提供しています。これらのサービスにより、開発者はエッジでAIモデルを実行し、AIを活用したアプリケーションを簡単に構築できるようになりました。

Workers AI:サーバーレスAI推論

Workers AIは、Cloudflareのグローバルネットワーク上でAIモデル推論を実行するサービスです。GPUを搭載したPOPを世界中に展開することで、ユーザーの近くでAIモデルを実行し、低レイテンシを実現しています。

// Workers AIでテキスト生成を行う例
export default {
  async fetch(request, env, ctx) {
    if (request.method === 'POST') {
      const { prompt } = await request.json();
      
      // テキスト生成モデルを実行
      const result = await env.WORKERS_AI.run('@cf/meta/claude-instant-1.2', {
        prompt: prompt
      });
      
      return new Response(JSON.stringify({
        result: result.response
      }), {
        headers: { 'content-type': 'application/json' }
      });
    }
    
    return new Response('Method not allowed', { status: 405 });
  }
};

Workers AIの主な特徴:

  1. 豊富なモデル: テキスト生成、画像認識、埋め込み生成など様々なモデルをサポート
  2. グローバル展開: ユーザーに最も近い場所でモデル推論を実行
  3. シンプルなAPI: 数行のコードでAIモデルを呼び出せる
  4. 料金体系: ニューロン単位の使用量に基づく従量課金制

2025年には特に以下のモデルが人気です:

  • @cf/meta/claude-instant-1.2: 高速なテキスト生成
  • @cf/baai/bge-m3: 100言語以上をサポートする多言語埋め込みモデル
  • @cf/openai/whisper-large-v3-turbo: 高精度の音声認識
  • @cf/stabilityai/stable-diffusion-xl-base-1.0: 高品質な画像生成

Vectorize:エッジでのベクトルデータベース

Vectorizeは、Cloudflareが提供するベクトルデータベースで、AIアプリケーションのための効率的なベクトル検索を実現します。特に、検索やレコメンデーション、RAG(Retrieval Augmented Generation)などのユースケースに最適です。

// Vectorizeを使用したRAGの例
export default {
  async fetch(request, env, ctx) {
    if (request.method === 'POST') {
      const { query } = await request.json();
      
      // 1. クエリをベクトル埋め込みに変換
      const embedding = await env.WORKERS_AI.run('@cf/baai/bge-m3', {
        text: query
      });
      
      // 2. ベクトル検索を実行
      const searchResults = await env.MY_VECTOR_INDEX.query(embedding.data[0], {
        topK: 5
      });
      
      // 3. 検索結果から関連コンテキストを取得
      const contexts = [];
      for (const result of searchResults.matches) {
        const document = await env.MY_DB.prepare(
          "SELECT content FROM documents WHERE id = ?"
        ).bind(result.id).first();
        
        if (document) {
          contexts.push(document.content);
        }
      }
      
      // 4. LLMにコンテキストを提供して回答を生成
      const contextText = contexts.join("\n\n");
      const response = await env.WORKERS_AI.run('@cf/meta/claude-instant-1.2', {
        prompt: `
          次の質問に対して、以下のコンテキスト情報のみを使用して回答してください。
          コンテキスト情報に答えがない場合は「この質問にはお答えできません」と回答してください。
          
          コンテキスト:
          ${contextText}
          
          質問:${query}
        `
      });
      
      return new Response(JSON.stringify({
        answer: response.response,
        sources: searchResults.matches.map(match => match.id)
      }), {
        headers: { 'content-type': 'application/json' }
      });
    }
    
    return new Response('Method not allowed', { status: 405 });
  }
};

Vectorizeの主な特徴:

  1. 高速ベクトル検索: 類似度に基づく効率的な検索
  2. メタデータフィルタリング: 検索結果を特定の条件で絞り込み
  3. グローバル分散: エッジで低レイテンシを実現
  4. 他のCloudflareサービスとの統合: Workers AI、D1、R2などと簡単に連携

Model Context Protocol (MCP)の対応

2025年の重要な追加機能として、CloudflareはModel Context Protocol(MCP)をサポートしています。MCPは、LLMがさまざまなツールやサービスとインターフェースするための標準プロトコルです。

// MCPサーバーの例(Cloudflare Workersで実装)
export default {
  async fetch(request, env, ctx) {
    if (request.method !== 'POST') {
      return new Response('Method not allowed', { status: 405 });
    }
    
    // MCPリクエストのパース
    const mcpRequest = await request.json();
    
    // メソッド名に基づいて適切なハンドラを呼び出し
    switch (mcpRequest.method) {
      case 'getWeather':
        return handleWeatherRequest(mcpRequest, env);
      case 'searchDocuments':
        return handleSearchRequest(mcpRequest, env);
      default:
        return new Response(JSON.stringify({
          error: 'Unknown method',
          code: 400
        }), {
          status: 400,
          headers: { 'content-type': 'application/json' }
        });
    }
  }
};

async function handleWeatherRequest(mcpRequest, env) {
  const { city } = mcpRequest.parameters;
  
  // 天気情報を取得(実際のAPIリクエスト)
  const weatherData = await getWeatherData(city);
  
  return new Response(JSON.stringify({
    result: {
      temperature: weatherData.temperature,
      conditions: weatherData.conditions,
      forecast: weatherData.forecast
    }
  }), {
    headers: { 'content-type': 'application/json' }
  });
}

async function handleSearchRequest(mcpRequest, env) {
  const { query } = mcpRequest.parameters;
  
  // ベクトル埋め込みを生成
  const embedding = await env.WORKERS_AI.run('@cf/baai/bge-m3', {
    text: query
  });
  
  // Vectorizeで検索
  const searchResults = await env.MY_VECTOR_INDEX.query(embedding.data[0], {
    topK: 3
  });
  
  // 検索結果を返す
  return new Response(JSON.stringify({
    result: {
      documents: searchResults.matches.map(match => ({
        id: match.id,
        score: match.score,
        metadata: match.metadata
      }))
    }
  }), {
    headers: { 'content-type': 'application/json' }
  });
}

AI統合アプリケーションの構築例

Cloudflareのサービスを組み合わせることで、エンドツーエンドのAIアプリケーションを構築できます。以下は、複数のサービスを統合したアプリケーション例です:

  1. ドキュメント検索システム:

    • R2: PDFやテキスト文書の保存
    • Workers: ドキュメントの処理とテキスト抽出
    • Workers AI: テキストの埋め込み生成
    • Vectorize: 埋め込みの保存と検索
    • D1: メタデータの保存
    • Queues: 非同期処理
  2. マルチモーダルチャットボット:

    • Workers AI: テキスト生成と画像認識
    • R2: ユーザーアップロード画像の保存
    • D1: 会話履歴の保存
    • Durable Objects: ユーザーセッション管理

これらのサービスを組み合わせることで、従来のクラウドアーキテクチャでは困難だった、高性能で低レイテンシのAIアプリケーションをグローバルに展開できるようになりました。

おすすめの書籍

おすすめコンテンツ