Hono คืออะไร ทำไมถึงน่าลองใช้
ถ้าคุณเคยเขียน API ด้วย Node.js มาก่อน ชื่อที่นึกถึงอันดับแรกคงเป็น Express แต่ช่วงไม่กี่ปีมานี้มีเฟรมเวิร์กหน้าใหม่ที่คนพูดถึงกันเยอะมากชื่อ Hono (อ่านว่า “โฮะโนะ” มาจากคำว่า 炎 ในภาษาญี่ปุ่น แปลว่า “เปลวไฟ”)
Hono เป็นเว็บเฟรมเวิร์กสำหรับสร้าง API และเว็บแอป จุดขายคือ เล็ก เร็ว และรันได้แทบทุกที่
Hono ต่างจาก Express ยังไง
เราเรียนกันบน Node.js เหมือนที่ Express ใช้ ดังนั้นเรื่อง “รันบนอะไร” ยังไม่ใช่ประเด็นตอนนี้ สิ่งที่คนเขียน Express อยู่แล้วจะรู้สึกได้ทันทีเมื่อย้ายมา Hono คือ:
| Express | Hono | |
|---|---|---|
| TypeScript | ต้องลง @types/express เพิ่ม และ path parameter เป็น any | มีมาให้ในตัว c.req.param('id') รู้เลยว่าเป็น string |
| เขียน handler | แก้ค่าใส่ res เช่น res.json(...) | return ค่าออกไปตรง ๆ เข้ากับ async/await |
| Middleware ที่ใช้บ่อย | หาแพ็กเกจเองทีละตัว (cors, helmet, jsonwebtoken …) | มีในกล่อง (CORS, JWT, logger, validator, cache …) |
| ขนาด | พึ่งพาแพ็กเกจย่อยหลายตัว | เล็กมาก ไม่มี dependency (hono/tiny ราว 14 kB) |
| ความเร็ว routing | ปานกลาง | เร็ว ใช้ router ที่ออกแบบมาให้จับคู่เส้นทางไว |
เทียบโค้ดเส้นทางเดียวกัน:
// Express
const express = require('express')
const app = express()
app.get('/users/:id', (req, res) => {
res.json({ id: req.params.id }) // req.params.id เป็น any
})
app.listen(3000)// Hono
import { serve } from '@hono/node-server'
import { Hono } from 'hono'
const app = new Hono()
app.get('/users/:id', (c) => {
return c.json({ id: c.req.param('id') }) // c.req.param('id') เป็น string
})
serve(app, () => console.log('รันที่ :3000'))อีกเรื่องที่เป็นของแถมระยะยาว: Hono เขียนด้วย Web Standards (Request, Response) ความรู้ที่ได้จากซีรีส์นี้เลยเอาไปใช้ต่อได้ทั้งบน Cloudflare Workers, Bun, Deno หรือแม้แต่ในเบราว์เซอร์ วันไหนอยากย้ายไปรันที่ edge ก็ยกโค้ดส่วน route ไปได้เลย เปลี่ยนแค่บรรทัดเปิดเซิร์ฟเวอร์
จะบอกว่า Hono ดีกว่า Express ทุกด้านก็ไม่ถูก Express มีมานาน ระบบนิเวศ ปลั๊กอิน และคำตอบใน Stack Overflow ยังเยอะกว่ามาก ถ้าโปรเจกต์ต้องพึ่ง middleware เฉพาะทางของ Express เป็นหลัก ก็ควรชั่งน้ำหนักก่อน แต่สำหรับงานสร้าง API ทั่วไปในปี 2026 Hono เป็นตัวเลือกที่เขียนสนุกและดูแลง่ายกว่าชัดเจน
ลองสัมผัส Hono สัก 1 นาที
ยังไม่ต้องเข้าใจทุกบรรทัดตอนนี้ บทหน้าเราจะติดตั้งและอธิบายละเอียด ตรงนี้แค่อยากให้เห็นหน้าตาโค้ด
ในบทเรียนซีรีส์นี้เราจะรันโค้ดบน Node.js และจัดการแพ็กเกจด้วย pnpm สร้างโฟลเดอร์เปล่าแล้วสั่ง
pnpm init
pnpm add hono @hono/node-server
pnpm add -D tsxhonoคือตัวเฟรมเวิร์ก@hono/node-serverคือตัวเชื่อมให้ Hono รันเป็นเซิร์ฟเวอร์บน Node.js ได้tsxเอาไว้รันไฟล์ TypeScript ตรง ๆ ตอนพัฒนา ไม่ต้อง compile ก่อน
(ถ้า pnpm ขึ้นข้อความ Ignored build scripts: esbuild ไม่ต้องตกใจ เป็นระบบความปลอดภัยของ pnpm รุ่นใหม่ ปล่อยไว้ได้ tsx ยังทำงานปกติ)
สร้างไฟล์ index.ts
import { serve } from '@hono/node-server'
import { Hono } from 'hono'
const app = new Hono()
app.get('/', (c) => c.text('เริ่มเล่นไฟกับ Hono 🔥'))
app.get('/api/hello', (c) => {
return c.json({ message: 'สวัสดีจาก Hono' })
})
serve(app, (info) => {
console.log(`เซิร์ฟเวอร์รันที่ http://localhost:${info.port}`)
})รันด้วย
pnpm tsx index.tsเทอร์มินัลจะขึ้นว่า
เซิร์ฟเวอร์รันที่ http://localhost:3000เปิดอีกหน้าต่างหนึ่งแล้วลองยิงเข้าไป
curl http://localhost:3000ผลลัพธ์:
เริ่มเล่นไฟกับ Hono 🔥ลองเส้นทางที่คืน JSON บ้าง
curl http://localhost:3000/api/helloผลลัพธ์:
{"message":"สวัสดีจาก Hono"}แค่นี้ก็ได้ API ที่ใช้งานได้จริงแล้ว สังเกตว่าโค้ดฝั่ง Hono สั้นและอ่านรู้เรื่องทันที — app.get() บอกว่า “ถ้ามีคนเรียก GET มาที่เส้นทางนี้ ให้ทำอะไร” ส่วน c คือกล่องข้อมูลของคำขอนั้น เอาไว้อ่านค่าที่เข้ามาและสร้างคำตอบกลับไป โค้ดส่วนนี้เขียนครั้งเดียวใช้ได้ทุก runtime ที่จะเปลี่ยนไปตาม runtime มีแค่บรรทัด serve() ตอนท้าย
เรื่องที่คนมักพลาด
- คิดว่า Hono ใช้ได้แค่กับ Cloudflare ไม่จริง Hono เกิดในชุมชน Cloudflare Workers ก็จริง แต่ตอนนี้รันบน Bun, Deno, Node.js หรือที่ไหนก็ได้ที่รองรับ Web Standards
- คิดว่า Hono มาแทน Node.js คนละชั้นกัน Node.js / Bun / Deno คือ *runtime* (ตัวที่รันโค้ด) ส่วน Hono คือ *เฟรมเวิร์ก* ที่รันอยู่บน runtime อีกที เหมือน Express ที่รันบน Node
- เอา middleware ของ Express มาใส่ Hono ตรง ๆ ใช้ไม่ได้ เพราะ Express middleware อิงกับ
req/resแบบ Node ส่วนของ Hono อิงกับ Context (c) แต่ไม่ต้องห่วง ของที่ใช้บ่อยอย่าง CORS หรือ logger ทาง Hono มีเวอร์ชันของตัวเองมาให้แล้ว - ต้องเก่ง TypeScript ก่อนถึงจะเริ่มได้ เขียนเป็น JavaScript ล้วนก็ได้ แต่พอใช้ TypeScript คุณจะได้ตัวช่วยเตือนพิมพ์ผิดและเดา path parameter ให้ฟรี ซึ่งเป็นจุดแข็งที่สุดอย่างหนึ่งของ Hono
สรุป
- Hono เป็นเว็บเฟรมเวิร์ก JavaScript/TypeScript ที่เน้น เล็ก เร็ว และเขียนสั้น
- เทียบกับ Express: TypeScript มาในตัว, handler
returnค่าตรง ๆ, middleware สำคัญมีให้ในกล่อง - เขียน API หนึ่งเส้นทางใช้โค้ดแค่ไม่กี่บรรทัด ผ่าน
app.get()และออบเจกต์c - Hono ไม่ได้มาแทน runtime แต่รันอยู่บน runtime เหมือนที่ Express รันบน Node — และเพราะสร้างบน Web Standards ความรู้เลยย้ายไป Workers/Bun/Deno ได้
บทถัดไปเราจะติดตั้งเครื่องมือให้ครบ แล้วสร้างโปรเจกต์ Hono แรกทีละขั้น พร้อมทำความเข้าใจว่าเวลารันเซิร์ฟเวอร์ขึ้นมา มันเกิดอะไรขึ้นบ้าง