0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

今さらながら Hono に入門してみる(シンプルな GET/POST)【Node.js】

Last updated at Posted at 2025-11-06

(この記事は Node.js Advent Calendar 2025 の記事にする予定です)

はじめに

リリースされた当初から情報は見ていたり、その後も情報を追いかけていた Hono。

●Hono - Web framework built on Web Standards
 https://hono.dev/

2025-11-06_12-33-17.jpg

気にはなりつつも未着手な状態をずっと続けていたのですが、今回、軽く触ってみました。

Node.js でシンプルな GET/POSTリクエストを扱ってみます。

サクッと試す

サクッと nodeコマンドを使ったお試しをやってみます。

公式のトップページなどに掲載されているサンプル

上で掲載していた公式ページトップや、以下の公式ドキュメントトップに、短いコードサンプルが書いてあります。

●Hono - Web framework built on Web Standards
 https://hono.dev/docs/

2025-11-06_12-33-45.jpg

具体的には以下のものですが、これは、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リクエストの処理

上記のコマンドを使うと、以下のような対話形式で選択肢を選んでいく形で、セットアップが進みます。

2025-11-06_12-38-05.jpg

自分は、各選択肢について以下を選びました。

2025-11-06_12-49-03.jpg

コマンドを実行したフォルダを見てみると、以下のような構成になっていました。

2025-11-06_12-50-01.jpg

そして 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

上記を実行した直後の状態は、以下のとおりです。

2025-11-06_12-56-26.jpg

あとは、ブラウザで http://localhost:3000 にアクセスすれば、以下のように「Hello Hono!」というテキストが表示されます。

2025-11-06_12-55-18.jpg

とりあえず、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 という内容を試した時の様子です。

2025-11-06_13-02-16.jpg

どちらの処理でも、意図した JSON の内容を得られたことが分かりました。

なお、GETリクエスト用の処理を残しているので、先ほどのように http://localhost:3000/ へブラウザでアクセスすると、「Hello Hono!」というテキストが表示されます。

Node.js を使ったお試し: パッケージを自前でインストール

最後に、npmコマンドでパッケージのインストールを行うやり方も試してみました。

先ほど使ったサンプルのコードが動くように、以下のコマンドでパッケージ 2つ(「hono」と「@hono/node-server」)をインストールします。

npm i hono @hono/node-server

そして、先ほどのコードと同じ内容を .mjsファイルで用意してみました。

app.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リクエストを扱うお試しができました。自分の場合、サクッとプロトタイプを作る際に、シンプルな実装でプロトタイプのパーツとなる部分で準備できそうで、良い感じに使えそうです。

今回のお試しは以上です。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?