最近目にすることが増えたHonoについてのメモです。
概要
- 軽量なWebアプリケーションフレームワークです。
- 開発者はCloudflareの日本人エンジニアの方です。Cloudflare上の便利に使えるWebアプリケーションフレームワークがなかったことから自作とのこと。
- Web標準のRequestとResponseを入出力とするfetch関数をエントリポイントとしているため、あらゆるJavaScriptランタイムで動作が可能です。実際にCloudflare Workersをはじめとして、AWS Lambda、Fastly、Deno、Bun、Node.jsで動作します。
様々なランタイムでの動作イメージ
HonoのエントリポイントはWeb標準のfetch関数です。各ランタイムで利用する場合は、専用のアダプターを挟んでランタイムのエントリポイントからfetch関数のインタフェースへの変換を行います。
Cloudflare Workers
Cloudflare Workersの場合、元々Workerのエントリポイントとして期待されるのがfetch関数を持つオブジェクトであるため、特別なアダプターなしでHonoを利用できます。
AWS Lambda
AWS Lambdaの場合、Lambdaのエントリポイントからfetch関数のインタフェースに変換する専用のhandlerを挟む形で利用します。
Node.js
Node.jsの場合、ランタイム自体にはHTTPS/HTTPのリスナーがないため、専用のリスナーを前段において利用します。
まとめ
どのWebアプリケーションフレームワークでもコアの部分がやっていることは下記です。
- HTTPS/HTTPのリクエストをリスンすること
- 受信したリクエストを適切な実装モジュールにルーティングすること
- 実装モジュールに対して、リクエストのコンテキスト情報と、レスポンスのための入れ物を提供すること
Honoでは、1.はコアモジュールとしては提供しません。各種ランタイムが用意するリスナー機能を利用するか、オプショナルなアダプタとして提供します。2.は独自の高速なルーティング機能の実装を提供します。3.はWeb標準のfetch関数をエントリポイントとして提供します。これらの工夫により、様々なランタイムで動作する軽量で高速なWebアプリケーションフレームワークを実現しています。