午前2時の悪夢:VPSが海外トラフィックに「降参」した時
午前2時、スマホが激しく震えました。Sentryからのアラートが止まりません。シンガポールに配置していたVPSが「息切れ」状態になっていたのです。アメリカやヨーロッパからのトラフィックが急増し、CPU使用率は100%に。サーバーから遠い地域のユーザーは2〜3秒ものレイテンシ(遅延)に耐えなければならず、到底受け入れられる数字ではありませんでした。その時、単一の物理拠点をベースにした従来のサーバー構成が、グローバルアプリケーションにとって大きな壁であることを痛感しました。
RAMのアップグレードに資金を投じる代わりに、私はより効果的な方法を選びました。コアAPIをHonoに移行し、Cloudflare Workersにデプロイすることです。この組み合わせは驚くべき効果をもたらしました。Cloudflare Workersは、あなたのコードを世界300以上のデータセンター、つまりユーザーのすぐ隣まで運びます。一方、Honoは超軽量(コアサイズは1KB未満)なフレームワークです。その速度は「風を切る」ほど速く、実際のベンチマークではExpressやFastifyを遥かに凌駕します。
30秒でEdge Runtime環境を構築する
複雑なDockerやNginxの設定は忘れてください。Cloudflareがすべてを担ってくれます。ターミナルを開いて、次のコマンドを1つ打つだけです:
npm create cloudflare@latest my-hono-api
使用するフレームワークを聞かれるので、Honoを選択してください。私は常にTypeScriptを優先します。デプロイ後にバグが爆発するのを防ぎ、コードを書いている最中に「undefined」のような初歩的なミスに気づくことができるからです。依存関係のインストールも数秒で終わります:
cd my-hono-api
npm install
Honoのディレクトリ構造は非常にシンプルです。src/index.tsがプロジェクトの心臓部であり、ここですべてのリクエストロジックを処理します。
実践的なスタイルでコーディングする
教科書通りの「Hello World」はスキップしましょう。GET、POST、そしてJSON処理を備えた実用的なREST APIを構築します。作業中、重い拡張機能をインストールする代わりに、私はよく toolcraft.app を利用してJSONを整形したり正規表現をチェックしたりしています。VS Codeを何度も開き直すよりずっと便利です。
以下は、標準的な src/index.ts の設定です:
import { Hono } from 'hono'
import { cors } from 'hono/cors'
const app = new Hono()
// フロントエンド開発者のためのCORSエラー対策
app.use('*', cors())
// GETルート:システムのステータス確認
app.get('/api/v1/status', (c) => {
return c.json({
status: 'online',
timestamp: new Date().toISOString(),
region: c.req.header('cf-ipcountry') // クライアントの国を特定できるCloudflareの便利なヘッダー
})
})
// POSTルート:データの受信と処理
app.post('/api/v1/data', async (c) => {
const body = await c.req.json()
if (!body.id) {
return c.json({ error: 'IDは必須項目です' }, 400)
}
return c.json({
message: 'データを受信しました',
received: body
}, 201)
})
export default app
Honoの魅力は、CORSやロガー、認証などのミドルウェアが標準で用意されており、バンドルサイズを肥大化させない点にあります。Cloudflare Workersの無料プランでは、スクリプトのサイズが1MB以下に制限されています。そのため、コードが軽量であればあるほど、ビジネスロジックに割けるリソースが増えるのです。
環境変数の安全な管理
APIキーをコード内に直接書き込むような不注意は避けましょう。wrangler.toml ファイルで宣言してください。これはプロジェクトのセキュリティを守るための鉄則です:
[vars]
API_SECRET = "あなたのシークレットキー"
DB_URL = "https://あなたのデータベースURL.com"
Honoでは、c.env.API_SECRET を通じて非常に自然にこれらの値を呼び出すことができます。
デプロイとモニタリング:毎晩ぐっすり眠るために
「本番公開」の前に、ローカル環境でテストを実行してすべてがスムーズに動作することを確認しましょう:
npx wrangler dev
このコマンドは、あなたのPC上でEdge環境をシミュレートします。準備が整ったら、最後のコマンドを打って世界中に展開しましょう:
npx wrangler deploy
わずか5秒後には、あなたのAPIが300カ国で利用可能になります。しかし油断は禁物です。優れたエンジニアは常にダッシュボードを確認します。Honoを使用すると、Median Request Duration(平均レスポンス時間)は通常30〜50ms程度に収まります。これは、従来のVPSで動作するExpressに比べて10倍速い数値です。
このペアに移行してから、サーバーのメモリ不足やOSのセキュリティパッチ適用に頭を悩ませることはなくなりました。コストも非常に安く、無料プランでも1日あたり最大10万リクエストまで許容されます。もし皆さんのVPSが重いと感じているなら、今すぐサーバーレスを試してみてください。もう以前のやり方には戻りたくなくなるはずです。

