mcpField
C
cloudflare-workers-migration

cloudflare-workers-migration

github.com/secondskyクラウド・DevOps240302 回インストール5 週間前に更新
リポジトリ

cloudflare-workers-migration について

AWS Lambda、Vercel、Express などから Cloudflare Workers へアプリケーションを移行するためのガイドです。移行パターン、互換性の注意点、トラブルシューティングのチェックリストをまとめています。

主な機能

  1. 01移行元別の移行手順
  2. 02Lambda と Express のコード例
  3. 03Node.js API の互換性ガイド
  4. 04よくある移行エラーの対処
  5. 05移行チェックリストとテスト手順

活用シーン

  1. 01AWS Lambda ハンドラーの Workers への移行
  2. 02Vercel または Next.js アプリの適応
  3. 03Express または Node.js API の置き換え
  4. 04非対応ランタイム機能の調査

インストール

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

$npx skills add https://github.com/secondsky/claude-skills --skill cloudflare-workers-migration

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

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

references/
express-migration.md
lambda-migration.md
node-compatibility.md
vercel-migration.md
scripts/
analyze-migration.sh
templates/
express-adapter.ts
lambda-adapter.ts
node-compat.ts
vercel-adapter.ts

詳細

Workers 移行ガイド

さまざまなプラットフォームから Cloudflare Workers に既存のアプリケーションを移行します。

移行判断ツリー

What are you migrating from?
├── AWS Lambda
│   └── Node.js handler? → Lambda adapter pattern
│   └── Python? → Consider Python Workers
│   └── Container/custom runtime? → May need rewrite
├── Vercel/Next.js
│   └── API routes? → Minimal changes with adapter
│   └── Full Next.js app? → Use OpenNext adapter
│   └── Middleware? → Direct Workers equivalent
├── Express/Node.js
│   └── Simple API? → Hono (similar API)
│   └── Complex middleware? → Gradual migration
│   └── Heavy node: usage? → Compatibility layer
└── Other Edge (Deno Deploy, Fastly)
    └── Standard Web APIs? → Minimal changes
    └── Platform-specific? → Targeted rewrites

プラットフォームの比較

機能WorkersLambdaVercelExpress
コールドスタート~0ms100-500ms10-100ms該当なし
CPU 制限50ms/10ms15 min10sなし
メモリ128MB10GB1GBシステム
最大レスポンス6MB(ストリーミングは無制限)6MB4.5MBなし
グローバルエッジ300+ PoPsリージョン~20 PoPs手動
Node.js API一部すべてすべてすべて

移行時によくあるエラー 10 件

エラー移行元原因解決策
fs is not definedLambda/Expressファイルシステムへのアクセスストレージには KV/R2 を使用します
Buffer is not definedNode.jsNode.js のグローバルnode:buffer からインポートします
process.env undefinedすべて環境変数へのアクセス方法env パラメーターを使用します
setTimeout not returningLambda非同期処理のパターンctx.waitUntil() を使用します
require() not foundExpressCommonJSESM インポートに変換します
Exceeded CPU timeすべて長時間の計算処理を分割するか、DO を使用します
body already consumedExpressリクエストボディ読み取る前にクローンします
Headers not iterableLambdaHeaders APIHeaders コンストラクターを使用します
crypto.randomBytesNode.jsNode.js の cryptocrypto.getRandomValues を使用します
Cannot find moduleすべてポリフィルの不足Workers との互換性を確認します

移行の簡単なパターン

AWS Lambda ハンドラー
// Before: AWS Lambda
export const handler = async (event, context) => {
  const body = JSON.parse(event.body);
  return {
    statusCode: 200,
    body: JSON.stringify({ message: 'Hello' }),
  };
};

// After: Cloudflare Workers
export default {
  async fetch(request: Request, env: Env): Promise<Response> {
    const body = await request.json();
    return Response.json({ message: 'Hello' });
  },
};
Express ミドルウェア
// Before: Express
app.use((req, res, next) => {
  if (!req.headers.authorization) {
    return res.status(401).json({ error: 'Unauthorized' });
  }
  next();
});

// After: Hono Middleware
app.use('*', async (c, next) => {
  if (!c.req.header('Authorization')) {
    return c.json({ error: 'Unauthorized' }, 401);
  }
  await next();
});
環境変数
// Before: Node.js
const apiKey = process.env.API_KEY;

// After: Workers
export default {
  async fetch(request: Request, env: Env): Promise<Response> {
    const apiKey = env.API_KEY;
    // ...
  },
};

Node.js の互換性

Workers は互換性フラグを使用して多くの Node.js API をサポートします。

// wrangler.jsonc
{
  "compatibility_flags": ["nodejs_compat_v2"],
  "compatibility_date": "2024-12-01"
}

nodejs_compat_v2 でサポートされるもの:

  • crypto(ほとんどのメソッド)
  • buffer(Buffer クラス)
  • util(promisify、types)
  • stream(Readable、Writable)
  • events(EventEmitter)
  • path(すべてのメソッド)
  • string_decoder
  • assert

サポートされないもの(代替手段が必要):

  • fs → R2/KV を使用します
  • child_process → 使用できません
  • cluster → 該当しません
  • dgram → サポートされません
  • net → fetch/WebSocket を使用します
  • tls → プラットフォームが処理します

リファレンスを読み込むタイミング

リファレンス読み込むタイミング
references/lambda-migration.mdAWS Lambda 関数を移行する場合
references/vercel-migration.mdVercel/Next.js から移行する場合
references/express-migration.mdExpress/Node.js アプリを移行する場合
references/node-compatibility.mdNode.js API の互換性に問題がある場合

移行チェックリスト

  1. 依存関係を分析する:サポートされていない Node.js API がないか確認します
  2. ESM に変換する:require() を import に置き換えます
  3. 環境変数へのアクセスを更新する:process.env の代わりに env パラメーターを使用します
  4. ファイルシステムを置き換える:ストレージには R2/KV を使用します
  5. 非同期処理に対応する:バックグラウンドタスクには ctx.waitUntil() を使用します
  6. ローカルでテストする:wrangler dev で動作を確認します
  7. パフォーマンステストを行う:CPU 制限を超えないことを確認します

関連項目

  • workers-runtime-apis - Workers で利用可能な API
  • workers-performance - 最適化の手法
  • cloudflare-worker-base - Workers の基本設定

コメント