(この記事は Node.js Advent Calendar 2025 の記事にする予定です)
はじめに
リリースされた当初から情報は見ていたり、その後も情報を追いかけていた Hono。
●Hono - Web framework built on Web Standards
https://hono.dev/
気にはなりつつも未着手な状態をずっと続けていたのですが、今回、軽く触ってみました。
Node.js でシンプルな GET/POSTリクエストを扱ってみます。
サクッと試す
サクッと nodeコマンドを使ったお試しをやってみます。
公式のトップページなどに掲載されているサンプル
上で掲載していた公式ページトップや、以下の公式ドキュメントトップに、短いコードサンプルが書いてあります。
●Hono - Web framework built on Web Standards
https://hono.dev/docs/
具体的には以下のものですが、これは、Cloudflare Workers や他のランタイム向けのもののようです(内容が、Hono のアプリオブジェクトを作って、それをエクスポートしているのみの処理)。
import { Hono } from 'hono'
const app = new Hono()
app.get('/', (c) => c.text('Hono!'))
export default app
Node.js を使ったお試し: npm create を使った手順
上記の公式ドキュメントで、npm を使った導入を見ると、以下のコマンドが書いてあります。
npm create hono@latest
これを使って進めていきます。
シンプルな GETリクエストの処理
上記のコマンドを使うと、以下のような対話形式で選択肢を選んでいく形で、セットアップが進みます。
自分は、各選択肢について以下を選びました。
コマンドを実行したフォルダを見てみると、以下のような構成になっていました。
そして index.ts の内容を見てみると、以下のように hono の npmパッケージと @hono/node-server のパッケージが使われたコードが準備されていました。
import { serve } from '@hono/node-server'
import { Hono } from 'hono'
const app = new Hono()
app.get('/', (c) => {
return c.text('Hello Hono!')
})
serve({
fetch: app.fetch,
port: 3000
}, (info) => {
console.log(`Server is running on http://localhost:${info.port}`)
})
これを実行するために、my-appフォルダに移動して、以下のコマンドでサーバーを立ち上げます。
npm run dev
上記を実行した直後の状態は、以下のとおりです。
あとは、ブラウザで http://localhost:3000 にアクセスすれば、以下のように「Hello Hono!」というテキストが表示されます。
とりあえず、GETリクエストを扱う処理の動作を確認できました。
シンプルな POSTリクエストの処理
次はシンプルな POSTリクエストを扱う内容を試してみます。
公式のドキュメントを見つつ、POSTリクエストに対して JSON を返す処理を追加してみました。
import { serve } from "@hono/node-server";
import { Hono } from "hono";
const app = new Hono();
app.get("/", (c) => {
return c.text("Hello Hono!");
});
app.post("/api/data", (c) => {
return c.json({ message: "Success", status: "ok" });
});
serve(
{
fetch: app.fetch,
port: 3000,
},
(info) => {
console.log(`Server is running on http://localhost:${info.port}`);
}
);
動作確認を行ってみます。そのためにサーバーを立ち上げてから、curlコマンドを使って POSTリクエストを送ってみます。
以下は curlコマンドで curl -X POST http://localhost:3000/api/data という処理を行ってみた後、出力を見やすくするための処理を加えた curl -X POST http://localhost:3000/api/data | jq という内容を試した時の様子です。
どちらの処理でも、意図した JSON の内容を得られたことが分かりました。
なお、GETリクエスト用の処理を残しているので、先ほどのように http://localhost:3000/ へブラウザでアクセスすると、「Hello Hono!」というテキストが表示されます。
Node.js を使ったお試し: パッケージを自前でインストール
最後に、npmコマンドでパッケージのインストールを行うやり方も試してみました。
先ほど使ったサンプルのコードが動くように、以下のコマンドでパッケージ 2つ(「hono」と「@hono/node-server」)をインストールします。
npm i hono @hono/node-server
そして、先ほどのコードと同じ内容を .mjsファイルで用意してみました。
import { serve } from "@hono/node-server";
import { Hono } from "hono";
const app = new Hono();
app.get("/", (c) => {
return c.text("Hello Hono!");
});
app.post("/api/data", (c) => {
return c.json({ message: "Success", status: "ok" });
});
serve(
{
fetch: app.fetch,
port: 3000,
},
(info) => {
console.log(`Server is running on http://localhost:${info.port}`);
}
);
あとは nodeコマンドで上記の処理を実行して、動作確認を行います。
ブラウザで http://localhost:3000/ でのアクセスを試し、curlコマンドで以下の処理を試してみます。
curl -X POST http://localhost:3000/api/data | jq
どちらも、意図通りのレスポンスが得られることを確認できました。
おわりに
とりあえず、Hono を使ってシンプルな GET/POSTリクエストを扱うお試しができました。自分の場合、サクッとプロトタイプを作る際に、シンプルな実装でプロトタイプのパーツとなる部分で準備できそうで、良い感じに使えそうです。
今回のお試しは以上です。







