mcpField
E
edgeone-makers-edge-functions

edgeone-makers-edge-functions

github.com/tencentedgeone開発1.8k253 回インストール3 週間前に更新
リポジトリ

edgeone-makers-edge-functions について

Makers の Edge Functions を開発するためのスキルです。V8 ベースの JavaScript ランタイム、ルーティング、コンテキスト API、KV の前提条件、対応 Web API と制限を説明します。

主な機能

  1. 01V8 ランタイムの指針
  2. 02HTTP メソッドハンドラーと動的ルート
  3. 03EventContext API の資料
  4. 04KV ストレージ設定の指針
  5. 05対応 API とランタイム制限

活用シーン

  1. 01Edge Function の API エンドポイント作成
  2. 02動的 URL パラメーターの処理
  3. 03エッジ関数からの KV ストレージ利用

インストール

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

$npx skills add https://github.com/tencentedgeone/edgeone-makers-tools --skill edgeone-makers-edge-functions

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

詳細

エッジ関数

エッジで実行される、V8 ベースの軽量な関数です。シンプルな API、KV ストレージへのアクセス、超低レイテンシーのレスポンスに最適です。

ランタイム: V8(Cloudflare Workers と同様) — Node.js ではありません。Node.js の組み込みモジュールや npm パッケージは使用しないでください。

⚠️ この V8 ランタイムでは Response.json() は利用できません。代わりに必ず new Response(JSON.stringify(data), { headers: { 'Content-Type': 'application/json' } }) を使用してください。

基本的な関数

ファイル:edge-functions/api/hello.js

export default function onRequest(context) {
  return new Response('Hello from Edge Functions!');
}

アクセス先:GET /api/hello

HTTP メソッドのハンドラー

// edge-functions/api/users.js

// Handle all methods
export function onRequest(context) {
  return new Response('Any method');
}

// Or use specific method handlers:
export function onRequestGet(context) {
  return new Response(JSON.stringify({ users: [] }), {
    headers: { 'Content-Type': 'application/json' },
  });
}

export async function onRequestPost(context) {
  const body = await context.request.json();
  return new Response(JSON.stringify({ created: true }), {
    status: 201,
    headers: { 'Content-Type': 'application/json' },
  });
}

EventContext オブジェクト

export function onRequest(context) {
  const {
    request,    // Standard Request object
    params,     // Dynamic route params, e.g. { id: "123" }
    env,        // Environment variables from Makers console
    waitUntil,  // Extend function lifetime for async tasks
  } = context;

  // GEO info available via:
  const geo = context.request.eo;
  // geo.geo.countryName, geo.geo.cityName, geo.geo.latitude, etc.

  return new Response('OK');
}

動的ルート

// edge-functions/api/users/[id].js
// Matches: /api/users/123, /api/users/abc

export function onRequestGet(context) {
  const userId = context.params.id;
  return new Response(JSON.stringify({ userId }), {
    headers: { 'Content-Type': 'application/json' },
  });
}
// edge-functions/api/[[default]].js
// Catches all unmatched routes under /api/

export function onRequest(context) {
  return new Response('Catch-all route', { status: 404 });
}

KV ストレージ(エッジ関数のみ)

相互参照:コードで context.store または KV API を使用する場合は、../makers-storage/SKILL.md もお読みください。

⚠️ 前提条件:KV を使用する前に、EdgeOne Makers コンソールで KV ストレージを有効にして、名前空間を作成し、プロジェクトにバインドする必要があります。設定手順の詳細は ../makers-storage/references/kv.md を参照してください。

KV 名前空間はグローバル変数です(名前はコンソールでバインドする際に設定します)。context.env 上にはありません。

// edge-functions/api/counter.js

export async function onRequest(context) {
  // ⚠️ my_kv is a GLOBAL variable (name set when binding namespace in console)
  // Do NOT use context.env.KV ❌
  
  // Read
  const count = await my_kv.get('page_views') || '0';
  const newCount = parseInt(count) + 1;

  // Write
  await my_kv.put('page_views', String(newCount));

  return new Response(JSON.stringify({ views: newCount }), {
    headers: { 'Content-Type': 'application/json' },
  });
}

KV ストレージ API と使用方法の詳細については、../makers-storage/references/kv.md を参照してください。

サポートされているランタイム API

エッジ関数は V8 上で実行され、次の Web 標準 API をサポートしています。

  • Fetch API — 外部への HTTP リクエストに使用する fetch()
  • Cache API — caches.open()、cache.match()、cache.put()
  • Headers / Request / Response — 標準の Web API オブジェクト
  • Streams — ReadableStream、WritableStream、TransformStream
  • Web Crypto — 暗号化/署名に使用する crypto.subtle
  • Encoding — TextEncoder、TextDecoder
  • URL / URLSearchParams — URL の解析

⚠️ 利用できません:Node.js の組み込みモジュール(Node の fs、path、http、crypto)、require()、npm パッケージ。

制限

リソース制限
コードパッケージのサイズ5 MB
リクエストボディ1 MB
1 回の実行あたりの CPU 時間200 ms
言語JavaScript(ES2023 以降)のみ

コメント