•10 min read

Web開発者のためのEdgeComputing:その実体と活用法

Web開発者のためのEdgeComputing:その実体と活用法

2023年に初めてCloudflare Workerをデプロイしたのは、オリジンサーバーに到達する前にボットトラフィックをブロックしたかったからです。Workerのおかげでアプリケーションロジックを書き直す手間が省けました。JavaScriptを15行追加しただけで問題は解決しました。

この経験から、エッジコンピューティングは理解する価値があると感じました。すべてのユースケースに当てはまるわけではありませんが、特定の種類の問題に対しては、最もクリーンなソリューションです。

Audio Briefing
0:00 / 0:00

「エッジ」が実際に意味するもの

「エッジ」とは、コードをユーザーの近くで実行することを意味します。すべてのリクエストがus-east-1にある1つのサーバーに行くのではなく、エッジ関数は世界中に分散したデータセンターで実行されます。東京のユーザーは東京のノードからサービスを受け、ロンドンのユーザーはロンドンのノードからサービスを受けます。リクエストが移動する距離がはるかに短くなります。

エッジは、データベースを置き換えたり、重い計算を行ったりするためのものではありません。ユーザーへのレイテンシーが最小限に抑えられる場所で、認証、ルーティング、単純な変換といった特定のタスクを処理するためのものです。

主要なプロバイダーはCloudflare Workers、Vercel Edge Functions、Deno Deployです。これらはすべて同様の制約を共有しています。つまり、メモリ制限が非常に厳しく、ファイルシステムがなく、完全なNode.jsではなくV8 isolateランタイムを使用し、コールドスタートが秒単位ではなくミリ秒単位で測定されます。

Advertisement

実際に理にかなっているユースケース

本番環境でエッジ関数を2年間デプロイしてきた結果、私がためらうことなく採用するのは以下のものです。

JWTトークン検証 — リクエストがオリジンに到達する前にトークンを検証します。エッジからの401レスポンスは30msです。オリジンでの同じ検証では、完全な往復の時間が追加されます。トラフィックの多いAPIでは、これが積み重なります。

A/Bテストと機能フラグ — サーバーサイドレンダリングの前にユーザーをバリアントに割り当てます。JavaScriptのちらつきや、遅延したレイアウトシフトはありません。エッジがルーティングの決定を行い、ユーザーは最初のバイトから一貫したエクスペリエンスを得られます。

地理位置情報ルーティング — アプリケーションコードを変更することなく、地域のエンドポイントへのリダイレクト、国によるアクセスブロック、またはローカライズされたコンテンツの提供を行います。Cloudflareからのリクエストヘッダーには、無料で地理データが含まれています。

ボット検出 — リクエストヘッダーと動作のパターンマッチングを行います。正当なユーザーは瞬時に通過します。ボットはサーバーに到達する前にブロックされます。

スマートな無効化によるレスポンスキャッシュ — キャッシュパージをトリガーするものをきめ細かく制御しながら、エッジでAPIレスポンスをキャッシュします。すべてのリクエストでオリジンが応答するのを待つよりもはるかに高速です。

簡単な例:認証のためのCloudflare Worker

export default {
  async fetch(request) {
    const url = new URL(request.url);
    
    // Only check protected routes
    if (!url.pathname.startsWith('/api/')) {
      return fetch(request);
    }

    // Validate at the edge before touching origin
    const token = request.headers.get('Authorization');
    if (!token || !isValidToken(token)) {
      return new Response(
        JSON.stringify({ error: 'Unauthorized' }),
        { status: 401, headers: { 'Content-Type': 'application/json' } }
      );
    }
    
    // Pass through to origin
    return fetch(request);
  }
};

function isValidToken(token) {
  // JWT signature check — stateless, no database needed
  const [, payload] = token.replace('Bearer ', '').split('.');
  const decoded = JSON.parse(atob(payload));
  return decoded.exp > Date.now() / 1000;
}

これは、オリジンへのリクエストの前に実行されます。認証されていないリクエストは私のサーバーに決して到達しません。

エッジを使用すべきでない場合

Good for EdgeBad for Edge
Request validation
ステートレスなトークンチェック
データベースセッションルックアップ
Authentication
JWT検証
リダイレクトを伴うOAuthフロー
Routing logic
地理位置情報、A/Bフラグ
複雑なビジネスルール
Compute
単純な変換、ヘッダー操作
画像処理、ML推論
Advertisement

私が陥った落とし穴

これらのことは、実際に経験するまで誰も教えてくれません。

Node.js APIがない — V8 isolateは完全なNodeランタイムを提供しません。fs、path、crypto(Nodeバージョン)、およびほとんどのネイティブモジュールは動作しません。利用可能なものについてはCloudflareのドキュメントを確認してください。

npmの互換性は部分的 — ほとんどのnpmパッケージはNode環境を前提としています。一部は動作しますが、多くは動作しません。デプロイ時に判明します。

データベース接続は永続しない — リクエスト間でデータベース接続をウォームアップ状態に保つことはできません。すべての呼び出しは接続の観点からはコールドです。これに対応するために構築された接続プーラー(PlanetScale、Neon、Supabase)を使用してください。

メモリ制限は厳しい — 通常128MBです。以前、WorkerでそこそこのサイズのWASMモジュールを使おうとしたところ、すぐに制限に達しました。

デバッグがより困難 — console.logはダッシュボードに送られ、ターミナルには送られません。ローカル開発は機能しますが、本番環境の動作を常に忠実に再現するわけではありません。

最もよく見かける間違い

人々はアプリケーション全体をエッジに移行しようとします。それはうまくいきません。データベースは1つのリージョンにあります。重い計算には実際のメモリが必要です。エッジはフィルターでありルーターであり、バックエンドの代替ではありません。

エッジはレイヤーであり、目的地ではない

機能するメンタルモデルは次のとおりです。オリジンサーバーはこれまで通りすべてを処理します。エッジレイヤーは特定のリクエストを傍受し、完全な往復なしでそれらを処理します。これら2つは連携して機能します。代替案ではありません。

私の推奨事項

まず1つのエンドポイントから始めましょう。レートリミッター、認証チェック、ボットフィルターなど、ステートレスなものを選びます。それをCloudflare WorkersまたはVercel Edgeにデプロイし、前後のレイテンシーを測定して、それがあなたのユースケースにとって重要かどうかを確認してください。

ほとんどのWebアプリにとって、エッジコンピューティングによる最大のメリットは、認証検証、A/Bルーティング、レスポンスキャッシュという3つのシンプルなユースケースからもたらされます。何か変わったことを試す前に、そこから始めましょう。

Edge Computing Performance
関連記事

こちらもおすすめ

Share this article:

Stay Updated

Get the latest posts delivered straight to your inbox.

Free Developer Utilities

Free In-Browser Developer Tools

Clean AI CLI logs, build cron expressions, decode JWTs, and calculate chmod permissions offline.

Explore Tools
Advertisement
2026年のAWS Lambdaコールドスタート: 緩和戦略
cloud-computing

2026年のAWS Lambdaコールドスタート: 緩和戦略

サーバーレス環境における長年の課題であるコールドスタートを、SnapStart、プロビジョニングされた同時実行、言語選択などの最も効果的な戦略で2026年に緩和する方法をご紹介します。

Read more