Web APIをサクッと作って公開したい時、「サーバーのセットアップが面倒」「レスポンス速度を極限まで速くしたい」と思ったことはありませんか?
今回は、エッジサーバーレス環境の Cloudflare Workers と、軽量・超高速フレームワーク Hono を組み合わせて、超高速なWeb APIを爆速で構築・デプロイする流れを解説します。
1. Cloudflare Workersの概要
Cloudflare Workers は、Cloudflareが提供するサーバーレス(Function-as-a-Service)の実行環境です。
従来のAWS Lambdaなどのコンテナベース(Dockerなど)のサーバーレスとは異なり、V8エンジン上の「Isolate」という技術を用いて動いているのが大きな特徴です。
主な特徴・メリット
- コールドスタートがほぼゼロ: コンテナの起動待ちが発生せず、リクエストに対して即座にレスポンスを返せます。
- グローバルなエッジ配信: 世界中のデータセンターにコードが自動デプロイされ、ユーザーに一番近い場所で処理が行われます。
- 強力な無料枠: 1日あたり10万リクエストまで無料で利用できるため、個人開発や実験的プロジェクトに最適です。
2. Honoの概要
Hono は、Web Standards(Fetch APIなど)に準拠した、超軽量かつ爆速のWeb Webフレームワークです。
TypeScriptとの親和性が抜群で、Expressライクな直感的な書き方ができることから、現在JavaScript/TypeScriptコミュニティで非常に高い人気を集めています。
自分も今までは DockerコンテナでPython FastAPIを使うことが多かったのですが、サーバーレスで動かせるHonoに出会ってからはこちらをメインに使っています。
主な特徴・メリット
- 圧倒的な高速性: 高速なルーティングエンジン(RegExpRouter)を搭載しており、レスポンス速度が極めて高速です。
- 超軽量: 依存ライブラリがほぼなく、コードサイズが非常にコンパクトです。
- TypeScriptフルサポート: 型補完が強力で、開発体験(DX)が非常に優れています。
3. なぜ相性が良いのか?(Cloudflare Workers × Hono)
Cloudflare WorkersでAPIを構築する際、Honoはまさに「ベストパートナー」と言えます。その理由は以下の3点です。
- Web Standards互換: Honoは標準的な Request / Response オブジェクトをベースに設計されているため、Cloudflare WorkersのV8 Isolate環境でネイティブかつ極めて効率的に動作します。
- 容量制限を回避しやすい: Cloudflare Workers(無料枠)にはスクリプトサイズ制限がありますが、Honoは超軽量(約14KB〜)なため制限に余裕を持って開発できます。
- エコシステムとの連携: Cloudflareが提供するストレージサービス(KV、D1、R2など)を、Honoのコンテキスト(c.env)から型安全かつ簡単に操作できます。
4. 活用事例
Hono × Cloudflare Workersの組み合わせは、主に以下のような用途で真価を発揮します。
- WebアプリケーションのバックエンドAPI
- フロントエンド(React, Vue, Next.js等)から呼び出すRestful APIの構築。
- マイクロサービス・Webhook受け口
- GitHubやStripeなど外部サービスからのWebhook受信用エンドポイント。
- BFF(Backend For Frontend)
- 複数のマイクロサービスのデータを集約・整形してフロントエンドへ返す層。
- 軽量な認証・プロキシサーバー
- APIキーの検証やヘッダーの付与、エッジでのリダイレクト処理。
5. 必要な環境構築
開発に必要なツールは非常にシンプルです。
必須のツール
- Node.js: v18.x 以上(推奨: v20 LTS 以降)
- npm (または pnpm / yarn / bun)
- Cloudflare アカウント: (無料登録可能)
6. プロジェクト作成コマンド
公式のCLIツール create-cloudflare (C3) を使用すると、一瞬でHonoの環境をセットアップできます。
ターミナルを開き、以下のコマンドを実行します。
npm create cloudflare@latest -- my-hono-app --framework=honomy-hono-app は新たに作成するプロジェクトのディレクトリ名(およびアプリ名)です。
- 任意の名前に変更可能です。
- カレントディレクトリにこの名前のフォルダが自動作成され、その中に必要なファイル一式が展開されます。
コマンドを実行すると、ターミナル上で対話形式の質問がいくつか行われます。
- Do you want to use git for version control? → Yes(推奨): プロジェクト直下に Git リポジトリ(.git)を初期化します。特別な理由がなければ Yes を選ぶのがおすすめです。
- Do you want to deploy your application? → 今すぐデプロイする場合は Yes(後でデプロイする場合は No)今回はローカルで試してからデプロイするのでNoを選択します。
wrangler 等の依存パッケージなどが自動でインストールされます。
7.生成されるファイルやフォルダ
📁 フォルダ(Directory)
| フォルダ名 | 役割・解説 |
| src/ | 【一番重要】 メインのソースコードを格納する場所です。エントリーポイントとなる src/index.ts が入っており、ルーティングやAPIロジックは基本的にここに書いていきます。 |
| public/ | 画像やファビコン、静的HTMLなどの静的ファイル(Static Assets)を置く場所です。Cloudflare Workers with Assets の機能で配信されます。 |
| node_modules/ | HonoやWranglerなど、プロジェクトに必要なnpmパッケージがインストールされているフォルダです。 |
| .vscode/ | VS Code用の設定ファイル(おすすめ拡張機能やエディタ設定など)が入っています。 |
📄 ファイル(Files)
| ファイル名 | 役割・解説 |
| wrangler.jsonc | 【Cloudflare設定ファイル】 Cloudflare Workersの挙動を管理する最重要設定ファイルです(JSON with Comments形式)。環境変数の定義、D1データベースやKVのバインディング(紐付け)などをここに記述します。 |
| package.json | プロジェクトの依存ライブラリや npm run dev などの実行コマンド(スクリプト)が定義されている管理ファイルです。 |
| worker-configuration.d.ts | Cloudflare Workersの環境変数やバインディング(D1やKVなど)のTypeScript型定義が自動生成されるファイルです。補完を効かせるために重要です。 |
| tsconfig.json | TypeScriptのコンパイル設定ファイルです。Web Standards(Fetch APIなど)やCloudflare環境に最適化された設定があらかじめ書き込まれています。 |
| .gitignore | Gitでバージョン管理に含めないファイル(node_modules やビルド成果物など)を指定する設定ファイルです。 |
| package-lock.json | インストールされたnpmパッケージの正確なバージョン情報が記録されているファイルです。 |
| README.md | プロジェクトの概要や基本的なコマンド(起動・デプロイ方法など)が書かれた説明ドキュメントです。 |
8. 開発サーバーの立ち上げ
先ほど生成したプロジェクトフォルダに移動します。
cd my-hono-appローカル環境で動作確認を行うため、Cloudflareのローカルエミュレータ(Wrangler)を利用して開発サーバーを起動します。
npm run devターミナルに以下のような出力が表示されたら起動成功です。
Ready on http://localhost:8787ブラウザやAPIクライアント(Postman等)で http://localhost:8787 にアクセスすると、Hello Hono! と表示されることが確認できます。
サンプルコード(src/index.ts)
標準で生成される src/index.ts は以下のようになっています。
import { Hono } from "hono";
const app = new Hono<{ Bindings: CloudflareBindings }>();
app.get("/message", (c) => {
return c.text("Hello Hono!");
});
export default app;これを少し編集して実践的なコードに変えてみます。
商品A〜Cの「価格(price)」と「在庫数(stock)」をオブジェクトとして用意し、2つのエンドポイント(全件取得・個別取得)を作成しています。
import { Hono } from 'hono'
const app = new Hono()
// 商品データの定義(メモリ上に保存される疑似データ)
const products = {
a: { name: '商品A', price: 1000, stock: 15 },
b: { name: '商品B', price: 2500, stock: 8 },
c: { name: '商品C', price: 4200, stock: 0 },
}
// 1. 全商品の一覧を取得するAPI
app.get('/api/products', (c) => {
return c.json({
status: 'success',
data: products
})
})
// 2. 指定した商品(a, b, c)の詳細情報を取得するAPI
app.get('/api/products/:id', (c) => {
const id = c.req.param('id').toLowerCase() as keyof typeof products
const product = products[id]
if (!product) {
return c.json({ status: 'error', message: '商品が見つかりません' }, 404)
}
return c.json({
status: 'success',
data: { id, ...product }
})
})
export default appローカルでの動作確認
コードを変更したら、ターミナルで開発サーバーを立ち上げて動作確認します。
npm run dev起動したら、ブラウザで以下のURLにアクセスしてみてください。
下記のようなJSONデータが返ってくれば成功です。
{
"status": "success",
"data": {
"a": { "name": "商品A", "price": 1000, "stock": 15 },
"b": { "name": "商品B", "price": 2500, "stock": 8 },
"c": { "name": "商品C", "price": 4200, "stock": 0 }
}
}9.Cloudflare Workersへのデプロイ
動作確認ができたら、ターミナルで Ctrl + C を押して一度開発サーバーを止め、以下のデプロイコマンドを実行します。
npx wrangler deploy初めてデプロイする場合の流れ
- コマンドを実行すると、自動的にブラウザが開いて Cloudflare のログイン画面が表示されます。
- ログインを行い、「Allow(許可)」 をクリックしてWranglerに権限を与えます。
- ターミナルに戻ると、自動的にビルドとデプロイが開始されます。
4. ブラウザでの本番確認
デプロイが完了すると、ターミナルの最後に以下のような本番用URLが出力されます。
Deployment complete!
Uploaded 1 files (1.20 sec)
Published my-hono-app (1.50 sec)
https://my-hono-app.<あなたのサブドメイン>.workers.devこの出力されたURLの末尾にパスを付け加えて、ブラウザのアドレスバーに入力してアクセスしてみてください。
- 全商品: https://my-hono-app.<あなたのサブドメイン>.workers.dev/api/products
- 商品B: https://my-hono-app.<あなたのサブドメイン>.workers.dev/api/products/b
世界中のエッジサーバーから即座に商品情報のJSONが返ってくることが確認できます。
まとめ
Cloudflare Workers と Hono の組み合わせは、「爆速・軽量・型安全」の3拍子が揃った現代のWeb API開発における最強の選択肢の1つです。
次回以降では、Cloudflareのデータベース機能である「Cloudflare D1」と連携して、実際にCRUD操作を行うAPIの構築手順を解説したいと思います。

コメント