Honoを使ってみた


きっかけはAPI鯖を建てる時

今まではExpressでどりゃぁぁぁっと書いておうちサーバーで動かしていたのですが、サーバーレスにハマっている私はCloudflare WorkersでAPIサーバーを作る事にしました。

ただ、ExpressをWorkersで動かすのはちょっと面倒みたいで、どうやって作ろうかと調べているときに目に入ったのがHonoです。Expressと似たような書き方ができるフレームワークらしく、何よりもUltra fast web frameworkを謳うほど速いのだとか。

使ってみるしかないじゃん!

超簡単につくれる(当たり前)

ターミナルから

npm create hono@latest

を実行するだけでプロジェクトが作れちゃいます。当たり前な機能だけど超簡単に作成できるのは嬉しい。

こんな感じ:

このgifは5分で作られました

テンプレートの選択肢が多いのもうれしいポイント。好きな物を選んで、何も調整せずにデプロイできます。

コードが超シンプル!

import { Hono } from 'hono';

const app = new Hono()
app.get('/', (c) => c.text('Hello Sekai!'))

export default app

たったこれだけで/を開くとHello Sekai!が表示されるようになりました。

app.get('/:id', async (c) => {
	const id = c.req.param('id')
	return c.json({
		'id': id
	})
})

/適当な文字列を受け取って使う事もできます。

マジで速い

依存ゼロだったりというのもあって構造上爆速になるのは当たり前なんですが、体感できるほど速いです。

ルーターのみでベンチマークを回した結果があって、これを見るとどれだけすごいかが分かります。

hono x 708,671 ops/sec ±2.58% (58 runs sampled)
itty-router x 159,610 ops/sec ±2.86% (87 runs sampled)
sunder x 322,846 ops/sec ±2.24% (86 runs sampled)
worktop x 223,625 ops/sec ±2.01% (95 runs sampled)
Fastest is hono
✨  Done in 57.83s.

引用: Hono[炎]っていうイケてる名前のフレームワークを作っている

sunderが322,846 ops/secを叩き出しているのに対し、honoは708,671 ops/sec。倍以上の差をつけています。

欲しいものが全部そろってる

例えばbasic認証。

app.use(
  '/auth/*',
  Middleware.basicAuth({
    username: 'admin',
    password: 'password',
  })
)

なんとこれだけで出来ちゃう。すごい。

CORSなんかも

app.use('/api/*', cors())

細かいオプションをいじる必要がなければこれで終わります。

HonoのExamplesを見ると、色々分かってきます。Honoだけでブログなんかも作れちゃう!

製作者のyusukebeさんのページなんかは、Honoで書かれています。

感想

他のフレームワークよりもシンプルに書ける上に、必要な機能がほとんど揃っているのが魅力的!

  • Workersなどで簡単にAPIサーバーを作りたい
  • モダンなフレームワークを使ってみたい
  • 爆速・軽量なフレームワークが欲しい

等… 誰にでもおすすめできる、そんなフレームワークでした。

おわり!