spinny:~/writing $ less serverless-aws-lambda-vercel-cloudflare.md
12Serverless コンピューティングでは、サーバーを管理せずにコードを実行できます。関数を書いてデプロイすれば、プラットフォームがスケーリング、可用性、インフラストラクチャを処理します。2026年、3つのプラットフォームが serverless の分野を支配しています:**AWS Lambda**、**Vercel Serverless Functions**、**Cloudflare Workers**。それぞれ異なる強みとトレードオフがあります。34この記事では、実際の例、パフォーマンスの考慮事項、料金の内訳を使って比較します。56## Serverless の仕組み78```mermaid9graph LR10 User -- "HTTP Request" --> Gateway[API Gateway / Edge]11 Gateway -- "Invoke" --> Function[Serverless Function]12 Function -- "Response" --> User13 Function -- "Read/Write" --> DB[(Database)]14```1516関数をデプロイします。リクエストが来ると、プラットフォームは:171. 実行環境を起動する(またはウォーム状態のものを再利用する)182. 関数を実行する193. レスポンスを返す204. アイドル時にゼロにスケールする(アイドル時間に料金は発生しない)2122## プラットフォーム概要2324### AWS Lambda2526オリジナルの serverless プラットフォーム(2014年に開始)。最も成熟し機能が豊富で、AWS エコシステムとの深い統合があります。2728```javascript29// AWS Lambda handler30export const handler = async (event) => {31 const body = JSON.parse(event.body);3233 const result = await processData(body);3435 return {36 statusCode: 200,37 headers: { 'Content-Type': 'application/json' },38 body: JSON.stringify(result),39 };40};41```4243### Vercel Serverless Functions4445Next.js とフロントエンドデプロイメントワークフローに緊密に統合されています。関数はフロントエンドと一緒にゼロコンフィグでデプロイされます。4647```typescript48// app/api/hello/route.ts (Next.js App Router)49import { NextResponse } from 'next/server';5051export async function GET(request: Request) {52 const { searchParams } = new URL(request.url);53 const name = searchParams.get('name') || 'World';5455 return NextResponse.json({ message: `Hello, ${name}!` });56}57```5859### Cloudflare Workers6061世界中の300以上の都市にある Cloudflare のエッジネットワーク上で実行されます。Node.js の代わりに V8 エンジン(Chrome と同じ)を使用するため、非常に高速なコールドスタートを実現します。6263```javascript64// Cloudflare Worker65export default {66 async fetch(request, env) {67 const url = new URL(request.url);68 const name = url.searchParams.get('name') || 'World';6970 return new Response(71 JSON.stringify({ message: `Hello, ${name}!` }),72 { headers: { 'Content-Type': 'application/json' } }73 );74 },75};76```7778## 機能比較7980| 機能 | AWS Lambda | Vercel Functions | Cloudflare Workers |81|---------|-----------|-----------------|-------------------|82| **ランタイム** | Node.js, Python, Go, Rust, Java, .NET | Node.js, Python, Go, Ruby | V8 Isolates (JS/TS, Rust via WASM) |83| **最大実行時間** | 15分 | 60秒 (Hobby), 300秒 (Pro) | 30秒(無料)、15分(有料) |84| **メモリ** | 128MB - 10GB | 1024MB - 3008MB | 128MB |85| **コールドスタート** | 100-500ms | 100-300ms | < 5ms |86| **デプロイ場所** | 単一リージョン(またはマルチは手間がかかる) | 複数リージョン | 300以上のエッジロケーション |87| **最大ペイロード** | 6MB(同期)、256KB(非同期) | 4.5MB | 100MB |88| **内蔵ストレージ** | なし(DynamoDB、S3を使用) | なし(外部DBを使用) | KV、D1 (SQLite)、R2(S3互換) |89| **料金モデル** | リクエストごと + 実行時間 | プランに含まれる | リクエストごと + 実行時間 |90| **無料枠** | 月100万リクエスト | 月10万 (Hobby) | 日10万リクエスト |9192## コールドスタート9394コールドスタートは、新しい関数インスタンスを初期化するのにかかる時間です。これは serverless における最大のパフォーマンス上の懸念事項です。9596```mermaid97graph LR98 subgraph "Cold Start"99 A[Request] --> B[Provision Environment]100 B --> C[Load Code]101 C --> D[Initialize Runtime]102 D --> E[Execute Function]103 end104105 subgraph "Warm Invocation"106 F[Request] --> G[Execute Function]107 end108```109110| プラットフォーム | 典型的なコールドスタート | 理由 |111|----------|-------------------|-----|112| **Cloudflare Workers** | < 5ms | V8 アイソレート、完全なランタイム不要 |113| **Vercel Functions** | 100-300ms | エッジまたはリージョナルの Node.js ランタイム |114| **AWS Lambda** | 100-500ms | 完全なコンテナ初期化 |115| **AWS Lambda (Java)** | 1-5秒 | JVM 起動のオーバーヘッド |116117Cloudflare Workers はコンテナの代わりに V8 アイソレートを使用するため、コールドスタートで圧倒的な差をつけて勝利しています。118119## 料金比較120121### 無料枠122123| プラットフォーム | 無料リクエスト | 無料コンピュート |124|----------|--------------|--------------|125| **AWS Lambda** | 月100万 | 400,000 GB-秒 |126| **Vercel** | 月10万 | Hobbyプランに含まれる |127| **Cloudflare Workers** | 日10万(月約300万) | 呼び出しごとに10ms CPU |128129### 大規模利用時(月1000万リクエスト、平均実行時間50ms)130131| プラットフォーム | 推定月額コスト |132|----------|----------------------|133| **AWS Lambda** | 約$2.50(リクエスト)+ 約$4.15(コンピュート)= **約$6.65** |134| **Vercel** | **月$20**(Proプラン、関数を含む) |135| **Cloudflare Workers** | **月$5**(有料プラン、1000万リクエストを含む) |136137ほとんどのユースケースでは、Cloudflare Workers が最も安価です。Vercel の料金はシンプルですが、プラットフォーム全体(ホスティング、CDN、アナリティクス)を含んでいます。AWS Lambda は最もきめ細かい料金体系を持っています。138139## 実際のユースケース140141### AWS Lambda:最適な用途142143- **複雑なバックエンドワークフロー** - step functions、イベント駆動アーキテクチャ144- **AWSサービスとの統合** - S3 トリガー、DynamoDB ストリーム、SQS キュー145- **長時間実行タスク** - 最大15分の実行時間146- **多言語チーム** - 最も幅広いランタイムをサポート147148```mermaid149graph TD150 S3[S3 Upload] --> Lambda1[Process Image]151 Lambda1 --> SQS[SQS Queue]152 SQS --> Lambda2[Generate Thumbnails]153 Lambda2 --> DDB[DynamoDB]154 DDB --> Lambda3[Send Notification]155 Lambda3 --> SNS[SNS / Email]156```157158### Vercel Functions:最適な用途159160- **Next.js アプリケーション** - ゼロコンフィグの API ルート161- **フロントエンド重視のチーム** - フロントエンドとバックエンドを一緒にデプロイ162- **迅速なプロトタイピング** - git push でデプロイ163- **Jamstack アーキテクチャ** - 静的フロントエンド + serverless API164165```typescript166// app/api/subscribe/route.ts167import { NextResponse } from 'next/server';168169export async function POST(request: Request) {170 const { email } = await request.json();171172 // Validate173 if (!email || !email.includes('@')) {174 return NextResponse.json(175 { error: 'Invalid email' },176 { status: 400 }177 );178 }179180 // Save to database181 await db.subscribers.create({ email });182183 return NextResponse.json({ success: true });184}185```186187### Cloudflare Workers:最適な用途188189- **低レイテンシー API** - 世界中の300以上の場所でコードが実行される190- **エッジコンピューティング** - レスポンスの変換、A/Bテスト、パーソナライゼーション191- **大量アクセス API** - 大規模で最も安価、寛大な無料枠192- **グローバルアプリケーション** - KV と D1 でユーザーの近くにデータを配置193194```javascript195// Edge-side A/B test196export default {197 async fetch(request, env) {198 const url = new URL(request.url);199200 // Assign user to variant201 const cookie = request.headers.get('Cookie') || '';202 let variant = cookie.includes('ab=b') ? 'b' : 'a';203204 if (!cookie.includes('ab=')) {205 variant = Math.random() < 0.5 ? 'a' : 'b';206 }207208 // Fetch the appropriate version209 const response = await fetch(`${url.origin}/variants/${variant}`);210 const newResponse = new Response(response.body, response);211212 // Set cookie for consistent experience213 newResponse.headers.set('Set-Cookie', `ab=${variant}; Path=/; Max-Age=86400`);214215 return newResponse;216 },217};218```219220## いつどれを選ぶか221222### AWS Lambda を選ぶべき場合:223- 既に AWS エコシステムに投資している224- 長時間実行の関数が必要(最大15分)225- 複雑なイベント駆動アーキテクチャが必要226- JavaScript 以外のランタイムが必要(Python、Go、Rust、Java)227228### Vercel Functions を選ぶべき場合:229- Next.js またはフロントエンドフレームワークで開発している230- 最もシンプルなデプロイ体験を望んでいる(git push)231- チームがフロントエンド重視232- ホスティング + 関数 + CDN を1つのプラットフォームで必要としている233234### Cloudflare Workers を選ぶべき場合:235- グローバルで可能な限り低いレイテンシーが必要236- 大規模で最も安価なオプションを望んでいる237- エッジコンピューティング機能が必要238- コールドスタート時間がユースケースにとって重要239240## 組み合わせて使えるか?241242もちろんです。一般的なアーキテクチャ:243244```mermaid245graph TD246 User --> CF[Cloudflare Workers\nEdge caching, routing, A/B tests]247 CF --> Vercel[Vercel\nNext.js frontend + API routes]248 Vercel --> Lambda[AWS Lambda\nHeavy processing, background jobs]249 Lambda --> S3[S3 Storage]250 Lambda --> DB[(Database)]251```252253- **Cloudflare Workers**:エッジルーティング、キャッシング、セキュリティ254- **Vercel Functions**:フロントエンド API ルート、SSR255- **AWS Lambda**:重いバックエンド処理、スケジュールタスク、イベントパイプライン256257## 結論258259Serverless は大きく成熟しました。2026年、AWS Lambda、Vercel Functions、Cloudflare Workers の選択は、あなたのスタックと優先事項によって決まります:260261- **最もシンプルな開発者体験**:Vercel262- **最も強力で柔軟**:AWS Lambda263- **最高のパフォーマンスと価格**:Cloudflare Workers2642653つとも本番環境に対応し、実戦で検証されています。現在のスタックに合ったものから始めて、ニーズの成長に合わせて拡張しましょう。266
:Serverless の実践:AWS Lambda vs Vercel Functions vs Cloudflare Workerslines 1-266 (END) — press q to close