HonoがJSXを提供しているので使ってみた
はじめに
HonoはTypeScriptファーストのWebフレームワークとして知られていますが、JSXもサポートしているので、それについて書いていきます。
Honoとは
Honoとは何かについては、以下の記事に記載されています。
ちなみに、Honoが提供しているJSXは、Reactと同じ文法をしていますが、開発者は、あえてReactのソースは見ずに実装をしているみたいです。
セットアップ
まず、必要なパッケージをインストールします。
npm install hono @hono/jsx
次に、TypeScriptの設定を行います。tsconfig.jsonに以下の設定を追加します。
{
"compilerOptions": {
"jsx": "react-jsx",
"jsxImportSource": "hono/jsx"
}
}
もしくは、以下のようにプラグマを記載することで利用できます。
/** @jsx jsx */
/** @jsxImportSource hono/jsx */
簡単な画面を作成
最初は、以下のコードで簡単な動作確認をしていきましょう。
「/」がリクエストされた際に、HTMLをレスポンスします。
import { Hono } from 'hono'
import type { FC } from 'hono/jsx'
const app = new Hono()
const Layout: FC = (props) => {
return (
<html>
<body>{props.children}</body>
</html>
)
}
const Top: FC<{ messages: string[] }> = (props: {
messages: string[]
}) => {
return (
<Layout>
<h1>Hello Hono!</h1>
<ul>
{props.messages.map((message) => {
return <li>{message}!!</li>
})}
</ul>
</Layout>
)
}
app.get('/', (c) => {
const messages = ['Good Morning', 'Good Evening', 'Good Night']
return c.html(<Top messages={messages} />)
})
export default app
「npm run dev」を実行し、http://localhost:8787 をブラウザで開いてみましょう。
以下のような画面が表示されるはずです。
HonoとNext.jsを比べると
Next.jsはフロントからきているフレームワークなので、基本的なバックエンドの機能が弱い部分があります。例えば、ロギングがまともにできない点であったり、ミドルウェアの機能が使いづらい(Node.jsの機能が全て使えない等)などの弱さがあります。(Honoは普通にできる。)
これに対して、Honoは、バックエンドからきているフレームワークなので、Next.jsの弱い部分であるバックエンドの機能については、一通り揃っているのではないかと思いますが、一方でReactを使ってUIを構築していくとなると、Next.jsはReactのフレームワークとしての機能が揃っているため、そちらも捨て難いなと思います。
なので現状は、要件によって、フロントエンドとバックエンドのどちらに重きをおくかで、技術選択としては、変わってくるのではないかなと思います。
まとめ
Honoはサーバーサイドフレームワークとして誕生しましたが、こういったJSXもサポートしているということで、これからさらにシェアが広がっていく技術になっていくのではないかと思います。
Discussion