edgeone-makers-edge-functions について
Makers の Edge Functions を開発するためのスキルです。V8 ベースの JavaScript ランタイム、ルーティング、コンテキスト API、KV の前提条件、対応 Web API と制限を説明します。
主な機能
- 01V8 ランタイムの指針
- 02HTTP メソッドハンドラーと動的ルート
- 03EventContext API の資料
- 04KV ストレージ設定の指針
- 05対応 API とランタイム制限
活用シーン
- 01Edge Function の API エンドポイント作成
- 02動的 URL パラメーターの処理
- 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 以降)のみ |