workers-best-practices

作成者: Cloudflare

Cloudflare Workersのコードをレビューし、本番環境のベストプラクティスに照らして作成します。新しいWorkersの作成時、Workerコードのレビュー時、wrangler.jsoncの設定時、または一般的なWorkersのアンチパターン(ストリーミング、フローティングプロミス、グローバルステート、シークレット、バインディング、可観測性)の確認時に読み込んでください。事前学習された知識よりもCloudflareのドキュメントからの取得を優先します。

npx skills add https://github.com/cloudflare/skills --skill workers-best-practices

Your knowledge of Cloudflare Workers APIs, types, and configuration may be outdated. Prefer retrieval over pre-training for any Workers code task — writing or reviewing.

Retrieval Sources

Fetch the latest versions before writing or reviewing Workers code. Do not rely on baked-in knowledge for API signatures, config fields, or binding shapes.

SourceHow to retrieveUse for
Workers best practicesFetch https://developers.cloudflare.com/workers/best-practices/workers-best-practices/Canonical rules, patterns, anti-patterns
Workers typesSee references/review.md for retrieval stepsAPI signatures, handler types, binding types
Wrangler config schemanode_modules/wrangler/config-schema.jsonConfig fields, binding shapes, allowed values
Cloudflare docsSearch tool or https://developers.cloudflare.com/workers/API reference, compatibility dates/flags

FIRST: Fetch Latest References

Before reviewing or writing Workers code, retrieve the current best practices page and relevant type definitions. If the project's node_modules has an older version, prefer the latest published version.

# Fetch latest workers types
mkdir -p /tmp/workers-types-latest && \
  npm pack @cloudflare/workers-types --pack-destination /tmp/workers-types-latest && \
  tar -xzf /tmp/workers-types-latest/cloudflare-workers-types-*.tgz -C /tmp/workers-types-latest
# Types at /tmp/workers-types-latest/package/index.d.ts

Reference Documentation

  • references/rules.md — all best practice rules with code examples and anti-patterns
  • references/review.md — type validation, config validation, binding access patterns, review process

Rules Quick Reference

Configuration

RuleSummary
Compatibility dateSet compatibility_date to today on new projects; update periodically on existing ones
nodejs_compatEnable the nodejs_compat flag — many libraries depend on Node.js built-ins
wrangler typesRun wrangler types to generate Env — never hand-write binding interfaces
SecretsUse wrangler secret put, never hardcode secrets in config or source
wrangler.jsoncUse JSONC config for non-secret settings — newer features are JSON-only

Request & Response Handling

RuleSummary
StreamingStream large/unknown payloads — never await response.text() on unbounded data
waitUntilUse ctx.waitUntil() for post-response work; do not destructure ctx

Architecture

RuleSummary
Bindings over RESTUse in-process bindings (KV, R2, D1, Queues) — not the Cloudflare REST API
Queues & WorkflowsMove async/background work off the critical path
Service bindingsUse service bindings for Worker-to-Worker calls — not public HTTP
HyperdriveAlways use Hyperdrive for external PostgreSQL/MySQL connections

Observability

RuleSummary
Logs & TracesEnable observability in config with head_sampling_rate; use structured JSON logging

Code Patterns

RuleSummary
No global request stateNever store request-scoped data in module-level variables
Floating promisesEvery Promise must be awaited, returned, voided, or passed to ctx.waitUntil()

Security

RuleSummary
Web CryptoUse crypto.randomUUID() / crypto.getRandomValues() — never Math.random() for security
No passThroughOnExceptionUse explicit try/catch with structured error responses

Anti-Patterns to Flag

Anti-patternWhy it matters
await response.text() on unbounded dataMemory exhaustion — 128 MB limit
Hardcoded secrets in source or configCredential leak via version control
Math.random() for tokens/IDsPredictable, not cryptographically secure
Bare fetch() without await or waitUntilFloating promise — dropped result, swallowed error
Module-level mutable variables for request stateCross-request data leaks, stale state, I/O errors
Cloudflare REST API from inside a WorkerUnnecessary network hop, auth overhead, added latency
ctx.passThroughOnException() as error handlingHides bugs, makes debugging impossible
Hand-written Env interfaceDrifts from actual wrangler config bindings
Direct string comparison for secret valuesTiming side-channel — use crypto.subtle.timingSafeEqual
Destructuring ctx (const { waitUntil } = ctx)Loses this binding — throws "Illegal invocation" at runtime
any on Env or handler paramsDefeats type safety for all binding access
as unknown as T double-castHides real type incompatibilities — fix the design
implements on platform base classes (instead of extends)Legacy — loses this.ctx, this.env. Applies to DurableObject, WorkerEntrypoint, Workflow
env.X inside platform base classShould be this.env.X in classes extending DurableObject, WorkerEntrypoint, etc.

Review Workflow

  1. Retrieve — fetch latest best practices page, workers types, and wrangler schema
  2. Read full files — not just diffs; context matters for binding access patterns
  3. Check types — binding access, handler signatures, no any, no unsafe casts (see references/review.md)
  4. Check config — compatibility_date, nodejs_compat, observability, secrets, binding-code consistency
  5. Check patterns — streaming, floating promises, global state, serialization boundaries
  6. Check security — crypto usage, secret handling, timing-safe comparisons, error handling
  7. Validate with toolsnpx tsc --noEmit, lint for no-floating-promises
  8. Reference rules — see references/rules.md for each rule's correct pattern

Scope

This skill covers Workers-specific best practices and code review. For related topics:

  • Durable Objects: load the durable-objects skill
  • Workflows: see Rules of Workflows
  • Wrangler CLI commands: load the wrangler skill

Principles

  • Be certain. Retrieve before flagging. If unsure about an API, config field, or pattern, fetch the docs first.
  • Provide evidence. Reference line numbers, tool output, or docs links.
  • Focus on what developers will copy. Workers code in examples and docs gets pasted into production.
  • Correctness over completeness. A concise example that works beats a comprehensive one with errors.

Cloudflareのその他のスキル

agents-sdk
Cloudflare
Cloudflare Workers上でAgents SDKを使用してAIエージェントを構築します。ステートフルなエージェント、耐久性のあるワークフロー、リアルタイムWebSocketアプリ、スケジュールタスク、MCPサーバー、チャットアプリケーションを作成する際に読み込んでください。Agentクラス、状態管理、呼び出し可能RPC、Workflows統合、Reactフックをカバーします。
official
building-ai-agent-on-cloudflare
Cloudflare
| Cloudflare上でAIエージェントを構築します。Agents SDKを使用し、状態管理、リアルタイムWebSocket、スケジュールタスク、ツール統合、チャット機能を備え、Workersにデプロイ可能なプロダクション対応のエージェントコードを生成します。 使用するタイミング: ユーザーが「エージェントを構築」「AIエージェント」「チャットエージェント」「ステートフルエージェント」を希望する場合、「Agents SDK」に言及する場合、「リアルタイムAI」「WebSocket AI」が必要な場合、またはエージェントの「状態管理」「スケジュールタスク」「ツール呼び出し」について質問する場合。
developmentofficial
building-mcp-server-on-cloudflare
Cloudflare
Cloudflare Workers上でツール、OAuth認証、本番デプロイを備えたリモートMCP(Model Context Protocol)サーバーを構築します。サーバーコードの生成、認証プロバイダーの設定、Workersへのデプロイを行います。 使用タイミング: ユーザーが「MCPサーバーを構築」「MCPツールを作成」「リモートMCP」「MCPをデプロイ」「MCPにOAuthを追加」、またはCloudflare上のModel Context Protocolについて言及した場合。また、「MCP認証」や「MCPデプロイ」にも反応します。
developmentofficial
cloudflare
Cloudflare
Cloudflareプラットフォームに関する包括的なスキル。Workers、Pages、ストレージ(KV、D1、R2)、AI(Workers AI、Vectorize、Agents SDK)、ネットワーキング(Tunnel、Spectrum)、セキュリティ(WAF、DDoS)、およびインフラストラクチャ・アズ・コード(Terraform、Pulumi)をカバー。あらゆるCloudflare開発タスクに使用可能。
official
durable-objects
Cloudflare
Cloudflare Durable Objectsを作成・レビューします。ステートフルな連携(チャットルーム、マルチプレイヤーゲーム、予約システム)の構築時、RPCメソッド、SQLiteストレージ、アラーム、WebSocketの実装時、またはDOコードのベストプラクティス確認時に使用します。Workers統合、wrangler設定、Vitestを使ったテストをカバーします。
official
sandbox-sdk
Cloudflare
サンドボックス化されたアプリケーションを構築し、安全なコード実行を実現します。AIコード実行、コードインタプリタ、CI/CDシステム、インタラクティブな開発環境、または信頼できないコードの実行時にロードしてください。Sandbox SDKのライフサイクル、コマンド、ファイル、コードインタプリタ、プレビューURLをカバーします。
official
web-perf
Cloudflare
Chrome DevTools MCPを使用してウェブパフォーマンスを分析します。Core Web Vitals(FCP、LCP、TBT、CLS、Speed Index)を測定し、レンダリングをブロックするリソース、ネットワーク依存関係チェーン、レイアウトシフト、キャッシュ問題、アクセシビリティのギャップを特定します。ページ読み込みパフォーマンス、Lighthouseスコア、サイト速度の監査、プロファイリング、デバッグ、最適化を求められた際に使用します。
official
wrangler
Cloudflare
Cloudflare Workers CLIを使用して、Workers、KV、R2、D1、Vectorize、Hyperdrive、Workers AI、Containers、Queues、Workflows、Pipelines、Secrets Storeのデプロイ、開発、管理を行います。wranglerコマンドを実行する前にロードして、正しい構文とベストプラクティスを確保します。
official