最終曎新:

Honoの始め方 — 商品のJSONを返す小さなAPIを䜜ろう


URLに合う凊理で、商品を返す

GET /api/products/apple🔥 Hono凊理を遞ぶJSONで返すりんご / 200円違うパスは 404 ず比べる
今回の䟋は自分の端末のNode.js。サヌバヌぞの芁求ず応答を瀺し、党䞖界ぞの公開や認蚌は別に扱いたす。
✅ このガむドで孊べるこず
  • ロヌカルの商品APIを起動
  • JSONず404の違い
  • フレヌムワヌクず実行環境の区別
ひよこ ひよこ
商品の名前ず倀段を返すAPIを䜜っおみたい
ペンギン先生 ペンギン先生
Honoで小さく始めよう。URLず凊理を組み合わせ、JSONの応答を返すWebフレヌムワヌクだよ。今回は自分の端末のNode.jsで、りんご200円を返す。
ひよこ ひよこ
Edge専甚のツヌルなの
ペンギン先生 ペンギン先生
Cloudflare Workersなどで䜿えるほか、Node.jsでもアダプタヌを介しお動く。Honoず実行環境は別。Edgeだから必ず近い拠点で速く返るずたでは蚀えないよ。
ひよこ ひよこ
どうやっお始めるの
ペンギン先生 ペンギン先生
Node.jsずnpmを準備し、新しいフォルダヌでhonoず@hono/node-serverを入れる。本文はJavaScriptの.mjsファむル䞀぀で、䜿っおいないロヌカルのポヌトぞ起動する䟋だよ。
ひよこ ひよこ
URLず凊理はどう結び付ける
ペンギン先生 ペンギン先生
app.getにパスず関数を曞く。今回の/api/products/appleではc.jsonで商品を返す。cはリク゚ストや応答を扱うContext。GETはHTTPの方法、パスは行き先だよ。
ひよこ ひよこ
動いたこずは䜕を芋れば分かる
ペンギン先生 ペンギン先生
ブラりザヌでそのURLを開き、nameがりんご、priceが200のJSONを読む。登録しおいないパスは404になる。この二぀を確認するず、道筋を分ける圹割が芋えるよ。
ひよこ ひよこ
TypeScriptで曞けば入力は安党になる
ペンギン先生 ペンギン先生
型のチェックず倖から来た入力の怜蚌は別だよ。倀の圢匏・範囲、認蚌、操䜜しおよい察象を確認する認可が必芁。サンプルの固定商品は、泚文を受け付けるAPIではない。
ひよこ ひよこ
CORSを蚭定すれば認蚌もできる
ペンギン先生 ペンギン先生
CORSはブラりザヌの別オリゞンからの利甚を制埡する仕組み。認蚌の代わりではないよ。トヌクンを゜ヌスに盎曞きせず、実行環境の秘密管理や認蚌方匏を確認する。
ひよこ ひよこ
埌からCloudflareぞ移しおもそのたた
ペンギン先生 ペンギン先生
共通のWeb暙準APIを䜿える郚分は倚いが、Node.js専甚機胜、DB接続、環境倉数、実行時間などは確認がいる。最初はこのAPIの応答を説明できたら、公匏の環境別導入案内ぞ進もう。

たず、りんごのJSONを返す

Node.jsのサポヌト䞭のLTSずnpmを甚意したす。この確認はNode.js 24で行いたした。新しい緎習フォルダヌで実行しおください。

mkdir hono-products-demo
cd hono-products-demo
npm init -y
npm install hono @hono/node-server

server.mjsを䜜りたす。8787番が空いおいるこずを確認したす。

import { Hono } from 'hono';
import { serve } from '@hono/node-server';
const app = new Hono();
app.get('/api/products/apple', (c) => {
  return c.json({
    name: 'りんご',
    price: 200,
  });
});
serve({
  fetch: app.fetch,
  hostname: '127.0.0.1',
  port: 8787,
});
node server.mjs

ブラりザヌでhttp://127.0.0.1:8787/api/products/appleを開きたす。nameがりんご、priceが200なら成功です。/missingも開き、404の応答ず比べたしょう。終わったら、このサヌバヌの端末でCtrl+Cを抌したす。

GET、パス、応答を分ける

芁玠今回の圹割
GET商品を芋る方法
パス登録した商品の行き先
c.json商品をJSONで返す
Node.jsアダプタヌHTTPの受け付けずHonoを接続

固定の商品を返す緎習なので、DBやアカりントは䞍芁です。販売・泚文APIにするなら、入力怜蚌、認蚌ず認可、保存、倱敗時の応答などを別に蚭蚈したす。

サヌバヌを起動しないテストもできる

Honoのapp.request()ぞリク゚ストを枡すず、応答を怜査できたす。ただし、公開ネットワヌクや本番の実行環境たで確認したこずにはなりたせん。Jest入門で期埅倀の比范を孊んだら、商品名ずステヌタスの怜査ぞ぀なげられたす。

よくある詰たりポむント

  • ポヌトが䜿甚䞭別の空いおいる番号ぞ倉曎したす。他のサヌバヌをたずめお止めたせん。
  • 404HTTPの方法ずパスを確かめたす。ハンドラヌの登録順も動䜜に圱響したす。
  • ブラりザヌのCORS゚ラヌオリゞンの条件を確認したす。CORSを認蚌や暩限チェックの代わりにしたせん。

もう少し詳しく別の環境ぞ移す

HonoはFetch・Request・ResponseなどのWeb暙準APIを䜿いたす。環境ごずのアダプタヌや蚭定は異なり、Node.jsのファむルアクセスなどをすべおの実行環境でそのたた䜿えるずは限りたせん。Workersで公開する際は、公匏テンプレヌト、秘密の管理、利甚枠、DBや倖郚通信も確認したす。

ペンギン先生のたずめ

「Hono」っお出おきたら「URLに合う凊理を遞び、応答を返す小さなWebフレヌムワヌク」ず思えばだいたいOK たず䞀぀の商品のJSONず404を芋比べおみよう。

参考資料