Cloudflare Workers と Pages を活用したリアルタイムチャットアプリの開発
導入背景
私たちは、リアルタイムチャットアプリの開発を担当していました。このアプリは、ユーザー同士がリアルタイムにメッセージをやりとりすることができるように設計されています。開発を進めていく中で、パフォーマンスの向上とインフラの管理の簡素化が課題となっていました。
以前は AWS Lambda を使用していましたが、コールドスタートの問題でパフォーマンスが低下していました。また、インフラの管理が煩雑でした。そこで、Cloudflare の Workers と Pages を利用して開発効率を向上させ、データの保存と管理を簡素化することを目指しました。
要件定義
- パフォーマンス要件: リアルタイムチャットアプリとして、レイテンシを最小限に抑える必要があります。
- スケーラビリティ要件: ユーザー数の増加に合わせて、インフラをスケールする必要があります。
- コスト要件: コストを削減する必要があります。
技術選定
- Workers: サーバーレス機能を提供し、開発効率を向上させます。
- Pages: 静的サイト生成機能を提供し、開発効率を向上させます。
- KV: データの保存と管理を簡素化します。
- R2: データの保存と管理を簡素化します。
アーキテクチャ設計
| 技術 | 選定理由 |
|---|---|
| Workers | サーバーレス機能を提供し、開発効率を向上させます。 |
| Pages | 静的サイト生成機能を提供し、開発効率を向上させます。 |
| KV | データの保存と管理を簡素化します。 |
| R2 | データの保存と管理を簡素化します。 |
前提条件
- Cloudflare アカウントを作成し、Workers と Pages を有効にします。
- KV と R2 を有効にします。
実装
プロジェクト作成
プロジェクトを作成し、必要なファイルを準備します。
npx create-next-app my-app
DB スキーマ設計
DB スキーマを設計し、テーブルを作成します。
CREATE TABLE users (
id INT PRIMARY KEY,
name VARCHAR(255),
email VARCHAR(255)
);
API 実装
API を実装し、データの保存と管理を簡素化します。
import { NextApiRequest, NextApiResponse } from 'next';
const handler = async (req: NextApiRequest, res: NextApiResponse) => {
const { method } = req;
switch (method) {
case 'GET':
// GET リクエストを処理します。
break;
case 'POST':
// POST リクエストを処理します。
break;
default:
return res.status(405).json({ message: 'Method Not Allowed' });
}
};
export default handler;
フロント実装
フロントエンドを実装し、リアルタイムチャットアプリの UI を作成します。
import { useState, useEffect } from 'react';
function App() {
const [messages, setMessages] = useState([]);
const [input, setInput] = useState('');
useEffect(() => {
// メッセージを取得します。
}, []);
const handleSubmit = async (event) => {
event.preventDefault();
// メッセージを送信します。
};
return (
<div>
<h1>リアルタイムチャットアプリ</h1>
<ul>
{messages.map((message, index) => (
<li key={index}>{message}</li>
))}
</ul>
<form onSubmit={handleSubmit}>
<input
type="text"
value={input}
onChange={(event) => setInput(event.target.value)}
/>
<button type="submit">送信</button>
</form>
</div>
);
}
export default App;
デプロイ
アプリをデプロイし、Cloudflare の Workers と Pages を利用して開発効率を向上させます。
npm run build
npm run deploy
テスト・動作検証
ローカル開発環境でアプリをテストし、動作を検証します。
npm run start
デプロイ・リリース
アプリをデプロイし、Cloudflare の Workers と Pages を利用して開発効率を向上させます。
npm run deploy
導入時の注意点
- Workers のルーティング設定は注意が必要です。
- KV と R2 の組み合わせはデータの保存と管理を容易にします。
パフォーマンス・コスト実績
| 指標 | Before | After | 変化率 |
|---|---|---|---|
| レイテンシ | 100ms | 70ms | 30% 減少 |
| コスト | 1000円 | 750円 | 25% 減少 |
運用所感と今後の展開
導入後に、Workers のメモリ使用量が増加したため、最適化が必要になりました。現在、R2 のバックアップ機能を実装中です。また、将来的には、Workers AI を利用して AI powered チャットボットを作成したいと考えています。