mcpField
E
edge-computing

edge-computing

github.com/travisjneumanクラウド・DevOps10695 回インストール今日更新
リポジトリ

edge-computing について

エッジでのアプリケーション開発に取り組む開発者向けのリファレンススキルです。ランタイムやデータストアの比較に加え、プラットフォームの制約と一般的な設計パターンを扱います。

主な機能

  1. 01ランタイムとプラットフォームの比較
  2. 02エッジデータベースの選択肢
  3. 03レンダリング、ルーティング、キャッシュのパターン
  4. 04レート制限と A/B テスト
  5. 05ランタイム制約とデータベースの指針

活用シーン

  1. 01アプリケーションのエッジランタイム選定
  2. 02エッジ処理向けデータベースの選定
  3. 03地域別ルーティングとキャッシュの設計
  4. 04デプロイ前のランタイム制約の確認

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/travisjneuman/.claude --skill edge-computing

インストール後、Claude Code で/edge-computingを入力して読み込まれたか確認します。

詳細

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

プラットフォーム

プラットフォームランタイムコールドスタート制限
Cloudflare WorkersV8 isolates約0ms128MB、CPU 30秒
Deno DeployV8 isolates約0ms512MB、CPU 50ms
Vercel Edge FunctionsV8 isolates約0ms128MB、25秒
AWS Lambda@EdgeNode.js約100ms128MB、5秒(ビューワー)
BunJavaScriptCore該当なし(サーバー)固定の制限なし

Cloudflare Workers

export default {
  async fetch(request: Request, env: Env): Promise<Response> {
    const url = new URL(request.url);

    // KV storage
    const cached = await env.KV.get(url.pathname);
    if (cached) return new Response(cached, { headers: { 'Cache-Control': 'max-age=60' } });

    // D1 database
    const { results } = await env.DB.prepare('SELECT * FROM users WHERE id = ?')
      .bind(url.searchParams.get('id'))
      .all();

    // Durable Objects for state
    const id = env.COUNTER.idFromName('global');
    const obj = env.COUNTER.get(id);
    const count = await obj.fetch(request);

    return new Response(JSON.stringify(results));
  }
};

エッジデータベース

データベース種類最適な用途
Cloudflare D1SQLiteWorkers ネイティブ、エッジでの SQL
TursolibSQL(SQLite)マルチリージョンレプリカ、組み込み
Cloudflare KVキー値シンプルなキャッシュ、設定
Durable Objectsステートフルリアルタイム処理、調整、カウンター
Upstash RedisRedisレート制限、エッジでのセッション管理

Deno Deploy

Deno.serve(async (req: Request) => {
  const kv = await Deno.openKv();
  const url = new URL(req.url);

  if (req.method === "POST") {
    const body = await req.json();
    await kv.set(["items", crypto.randomUUID()], body);
    return new Response("Created", { status: 201 });
  }

  const entries = kv.list({ prefix: ["items"] });
  const items = [];
  for await (const entry of entries) items.push(entry.value);
  return Response.json(items);
});

パターン

  • エッジサイドレンダリング: グローバルに TTFB を 50ms 未満にするエッジでの SSR
  • スマートルーティング: request.cf.country に基づく、地域を考慮したリクエストルーティング
  • エッジキャッシュ: 細かな制御や stale-while-revalidate には Cache API を使用
  • レート制限: Durable Objects または Upstash を使ったスライディングウィンドウカウンター
  • A/B テスト: オリジンへの往復なしでエッジ側の機能フラグを使用
  • 画像最適化: エッジでのオンザフライ変換(Cloudflare Images、Imgproxy)

制約と注意点

  • V8 isolate ランタイムでは Node.js API(fs、net など)は使用できません
  • ネイティブモジュールやバイナリは使用できません(計算負荷の高い処理には WASM を使用してください)
  • リクエストごとの CPU 時間には上限があります。負荷の高い処理はキューにオフロードしてください
  • isolate のコールドスタートはほぼゼロですが、Lambda@Edge では実際に発生します
  • データベース接続には TCP 接続プールではなく、HTTP ベースのクライアントを使用してください

コメント