htmxã«ã¤ãã¦ã¡ãã£ã¨éãã§ããããã£ãã®ã§éãã ãCloudflare Workersã®ä¸ã§Honoãåããã¦ãTSXã§HTMLãè¿ãã¤ã¤ããã®ä¸ã«htmxãã®ã£ãããã¿ãããªæ§æãð¹ððð ð¾ðððð ð©ððððððð...ã§ã使ããããªï¼
https://wild-meadow-79c7.windymelt.workers.dev/
ãªããä¸ç¬ã§ã§ããã
ãã£ããã¨
pnpm create cloudflare@latest
ãã¦Hello, Worldããã¸ã§ã¯ããä½æãã¦ãã®ã¾ã¾ãããã¤(ãã®æç¹ã§ https://wild-meadow-79c7.windymelt.workers.dev/ ãçãããããã)- ãã£ã¬ã¯ããªãã§ããã®ã§ããã«å
¥ã£ã¦
pnpm i hono
ãã tsconfig.json
ã®compilerOptions
ã®jsxã¾ãããhonoåãã«ããã- [Cloudflare Workers] HonoにJSXミドルウェアが追加されました ãè¦ãªãããã£ã
index.ts
ãindex.tsx
ã«ãªãã¼ã ãã- ã³ã¼ããããããã¨æ¸ã
/** * Welcome to Cloudflare Workers! This is your first worker. * * - Run `npm run dev` in your terminal to start a development server * - Open a browser tab at http://localhost:8787/ to see your worker in action * - Run `npm run deploy` to publish your worker * * Learn more at https://developers.cloudflare.com/workers/ */ export interface Env { } import { Hono } from 'hono' import { jsx } from 'hono/jsx' const app = new Hono() app.get('/', (c) => { return c.html( <html> <head><script src="https://unpkg.com/[email protected]"></script></head> <body> <p>Hono!</p> <button hx-get="/api" hx-target="#result"> ã¯ãªãã¯ãã¦APIãå¼ã¶ </button> <pre><code id="result">JSON here...</code></pre> </body> </html> ) }) app.get('/api', (c) => { return c.json({ ä»æ¥ã®ã©ããã¼ãã³ãã¼: 666 }) }) export default app
ããã ãã§è¯ããwrangler dev
ã§åä½ç¢ºèªã§ããã®ã§ãè¯ããããªãwrangler deploy
ãã¦10ç§ãããå¾
ã¤ã¨æ¬çªç°å¢ã«ãããã¤ããã¦ãããæHeroku使ã£ã¦ãã¨ãã®è·é¢æãæãåºããããããææ°ã®ãã¯ããã¸ã¼ã§ãã£ã¦ããã¨ããæãã§ã¤ã«ãã
htmx ææ³
hs-get
ãããã¦ããªãã®ã§ä»ã®æ©è½ã¨ãã¯å
¨ç¶ç¥ããªãç¶æ
ãªã®ã§ããããéãã§ããã®ã ããã©ããªããç´ æ´ã§è¯ããããªã¤ã¡ã¼ã¸ãç´ æ´ã ãã©ãã¶ã¯ãã¨ãªããããããã¨ãã®ã¦ã¼ã¹ã±ã¼ã¹ã¯ã«ãã¼ã§ãã¦ãæãããã¦ãããããã³ã¼ãæ¸ãã®ãã«ããªãã£ã¦ã¨ãã«è¯ãæããããã
ããã¯ã¨ã³ãã¯HTMLã®ãã©ã°ã¡ã³ããè¿ãã¦ã¯ã©ã¤ã¢ã³ãã§ãããåãããã¨ããã®ãæãããæãããã¦é¢ç½ãã
ã³ã³ãã¼ãã³ããç¶æ ãæã¡ã¯ããããããã¨ã©ããªãã®ãï¼ã¨ãã£ããã¨ã«èå³ããããhtmxã¯è¦ã¦ã®éãhtmlãDSL代ããã«ãã¦å®£è¨çã«ããã¾ãã¨ããã¢ããã¼ããªã®ã§ãããã®å±å°éª¨ããã¾ãé¸è±ããªãããã«ãã¤ã¤ããããç¨åº¦è¤éãªãã¨ãã§ããã®ããã¨ãããã¨ãæ°ã«ãªãã
å±æçã«htmxã使ããããªã®ãé¢ç½ããã¤ã³ãã§ã試ãã«ä¸é¨ä½¿ãã¨ãããã¶ã¤ãã«ã¡ãã£ã¨ãã©ã¤ãä½ã£ã¦ãããã¨ããããããã¨ãã«ã便å©ãªã®ã§ã¯ãªãããhx-target
ã¨ãã¯CSSã»ã¬ã¯ã¿ãªã®ã§ããã¶ã¤ãã¯ã ãããç¥ã£ã¦ãã¨æãã
å人çã«ãããããµãããªããã©ã¤ãã©ãªã¨ããããã¬ã¼ã ã¯ã¼ã¯ã好ããã¡ãªã®ã§ãè´å±ç®ã«è¦ã¦ããç®æããããããããªããhonoã®ææ³ã好ããªã®ã§ããµãããªãããã¬ã¼ã ã¯ã¼ã¯ã®ä¸ã«ãäºãã«å¹²æ¸ããªãå½¢ã§ãµãããªãããã¬ã¼ã ã¯ã¼ã¯ãè¼ã£ã¦ããã¨ããæãã§ãããã«ãµãããªæãæ°æã¡è¯ãã¨æãããªããªããCloudflare Workersã¨ããä»çµã¿ãããµãããªãã¦ãã¦é¢ç½ãã
ä¸æ¹ãð¹ððð ð¾ðððð ð©ððððððð...ã¯ã©ããã¦ãè¤éã«ãªã£ã¦ãã¾ãã®ã§ãå±å°éª¨ã¨ãªãææ³ãä¿ã¡ã¤ã¤è¤éããã©ãã¾ã§é£²ã¿è¾¼ããã®ãï¼ï¼ï¼ã¨ãããã¨ãããã¯ãæ°ã«ãªããå¤å°æ±ãã¦ããããããã¨ãã§ããã»ããçãæ®ããåè¿°ããããã«ãå±æçã«htmx使ãã¨ãããã¨ãå¯è½ãªã®ã§ããã®ããã³ã·ã£ã«ã¯ããããã«æãããªã«ããæå¿«ã§ã人ã ãéã¾ã£ã¦ãã¦ãåå¦åå¿ãçºçãããããªãããããé¢ç½ããã¼ã«ã ã