mcpField
C
cloudflare-workers-expert

cloudflare-workers-expert

github.com/sickn33クラウド・DevOps48.7k115 回インストール今日更新
リポジトリ

cloudflare-workers-expert について

Cloudflare Workers の開発を支援するエンジニアリングスキルです。エッジ関数やデータストレージ、フルスタックアプリを開発する人向けに、Wrangler、Fetch API、バインディング、Durable Objects と実環境に即した検証方法を扱います。

主な機能

  1. 01Workers と Wrangler の開発ガイド
  2. 02KV、D1 などのバインディング設定
  3. 03標準 Fetch API によるリクエスト処理
  4. 04Durable Objects による状態管理と調整
  5. 05エッジのデバッグと性能に関する助言

活用シーン

  1. 01エッジのサーバーレス関数の設計とデプロイ
  2. 02KV や D1 を使ったエッジデータの保存
  3. 03Cloudflare Pages と Workers のアプリ開発
  4. 04リクエスト処理や CPU 時間の問題調査

インストール

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

$npx skills add https://github.com/sickn33/agentic-awesome-skills --skill cloudflare-workers-expert

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

詳細

エッジコンピューティングアーキテクチャ、エッジでのパフォーマンス最適化、および Cloudflare の開発者向けエコシステム全般(Wrangler、KV、D1、Queues など)を専門とする、Cloudflare Workers のシニアエンジニアです。

このスキルを使用する場面

  • Cloudflare のエッジにサーバーレス関数を設計してデプロイする
  • KV、D1、または Durable Objects を使用してエッジ側のデータストレージを実装する
  • ロジックをエッジに移して、アプリケーションのレイテンシを最適化する
  • Cloudflare Pages と Workers でフルスタックアプリを構築する
  • リクエスト/レスポンスの変更、セキュリティヘッダー、エッジ側のキャッシュを扱う

このスキルを使用しない場面

  • サーバー上で実行する従来型の Node.js/Express アプリが対象の場合
  • AWS Lambda または Google Cloud Functions が対象の場合(それぞれに対応したスキルを使用してください)
  • エッジ機能を利用しない一般的なフロントエンド開発

手順

  1. Wrangler エコシステム:プロジェクトの wrangler.jsonc または wrangler.toml 設定を使用し、ローカルテストには npx wrangler dev を使用してください。
  2. Fetch API:Workers は Node.js のグローバルではなく、Web 標準の Fetch API を使用することに留意してください。
  3. バインディング:すべてのバインディング(KV、D1、シークレット)を wrangler.toml で定義し、fetch ハンドラーの env パラメーターからアクセスしてください。
  4. コールドスタート:レイテンシがゼロだと約束したり、古いサイズ制限をハードコードしたりしないでください。実際のデプロイ環境について、現在のプラン制限、互換性フラグ、測定した起動/リクエストのレイテンシを確認してください。
  5. Durable Objects:状態を伴う調整や高い同時実行性が必要な場合は、Durable Objects を使用してください。
  6. エラー処理:レスポンス送信後に実行する非ブロッキングの非同期タスク(ログ記録、分析など)には waitUntil() を使用してください。

例

例 1:KV バインディングを使用した基本的な Worker
export interface Env {
  MY_KV_NAMESPACE: KVNamespace;
}

export default {
  async fetch(
    request: Request,
    env: Env,
    ctx: ExecutionContext,
  ): Promise<Response> {
    const value = await env.MY_KV_NAMESPACE.get("my-key");
    if (value === null) {
      return new Response("Not Found", { status: 404 });
    }
    return new Response(`Stored Value: ${value}`);
  },
};
例 2:エッジでのレスポンス変更
export default {
  async fetch(request, env, ctx) {
    const response = await fetch(request);
    const newResponse = new Response(response.body, response);

    // Add security headers at the edge
    newResponse.headers.set("X-Content-Type-Options", "nosniff");
    newResponse.headers.set(
      "Content-Security-Policy",
      "upgrade-insecure-requests",
    );

    return newResponse;
  },
};

ベストプラクティス

  • ✅ 推奨: シークレットと環境変数には env.VAR_NAME を使用してください。
  • ✅ 推奨: エッジでのリダイレクトには Response.redirect() を使用してください。
  • ✅ 推奨: 本番環境のライブデバッグには wrangler tail を使用してください。
  • ❌ 非推奨: Workers のメモリと CPU 時間には制限があるため、大規模なライブラリをインポートしないでください。
  • ❌ 非推奨: Node.js 互換モードを使用する場合を除き、fs や path などの Node.js 専用ライブラリを使用しないでください。

トラブルシューティング

問題: リクエストが CPU 時間の制限を超えました。
解決策: ループを最適化し、同期的な CPU 処理をプロファイリングして削減してください。I/O の待機は CPU 時間とは異なります。waitUntil は制限されたバックグラウンド処理の実行期間を延長しますが、CPU 制限を回避したり、処理の配信を保証したりするものではありません。永続性が必要なジョブには、レビュー済みのキューを使用してください。

制限事項

  • 公開、リソースの作成、シークレットの設定、本番ログへのアクセスには、該当するアカウント/スコープの承認が必要です。設定によってはローカル開発でもリモートバインディングを使用できるため、まず設定を確認してください。KV は結果整合性のため、調整には適切なプリミティブを使用してください。
  • エッジレスポンスの例は、承認済みのオリジンに接続されたルートを前提としています。任意のプロキシを公開したり、アプリケーションをテストせずに upgrade-insecure-requests を完全な CSP として適用したりしないでください。
  • 出力を、環境固有の検証、テスト、または専門家によるレビューの代わりとして扱わないでください。
  • 必要な入力、権限、安全上の境界、または成功基準が不足している場合は、作業を中断して確認してください。

コメント