Cloudflare初心者だけどHonoを触ってみたい!
はじめに
こんにちは!
犬専用の音楽アプリ オトとりっぷでエンジニアしています、足立です!
この記事では、Cloudflare初心者がHonoのExampleを動かしていきます。
Honoってどんな感じ?と気になってらっしゃる方の参考になれば幸いです。
Honoとは
Honoとは、エッジで動く、イケてるフレームワーク
のようです!
使い方も簡単で、
import { Hono } from 'hono'
const app = new Hono()
app.get('/', (c) => c.text('Hono!!'))
export default app
とExpressっぽく書くだけで、超高速に動くアプリを簡単に作成できます。
HonoのExampleレポジトリ
ExampleはこちらのGithubレポジトリに公開されています。
中身は、basic
という基本的な機能紹介から、blog
というCloudflareでブログを作るための例、jsx-ssr
というHonoでJSXを使用する例など多種多様掲載されています。
インストール & デプロイ
では、さっそく公式Exampleのbasicを動かしていきます。
$ git clone https://github.com/honojs/examples.git
$ cd examples/basic
$ yarn install # 必要なライブラリのインストール
$ yarn dev # 開発サーバの起動
最初に開発サーバを起動すると、Cloudflare Workers用のCLIツールであるWranglerのログインを聞かれるので、OKしましょう。
そしてhttp://0.0.0.0:8787
にアクセスすると、Hono!!って表示されます!簡単です。
ちなみにyarn deploy
だけで簡単にCloudflare Workersにデプロイできます。
$ yarn deploy
https://hono-example-basic.<UserID>.workers.dev/
にアクセスすると、同様にHono!!って表示されるのが確認できます。
(デプロイが簡単なのは分かったので、忘れてしまう前に削除しましょう。)
コード
コードの中身を覗いていきましょう。
ルーティング
Honoはファイルベースのルーティングではなく、以下のようにコード上で表現します。
// Routing
app.get('/', (c) => c.text('Hono!!'))
// Use Response object directly
app.get('/hello', () => new Response('This is /hello'))
Basic認証
HonoでBasic認証を実装するのも非常に簡単です。
basicAuth
という関数が提供されているので、それを以下のように使うだけです。
import { basicAuth } from 'hono/basic-auth'
app.use(
'/auth/*',
basicAuth({
username: 'hono',
password: 'acoolproject',
})
)
これだけで、auth
以下にアクセスするために認証が必要になります。
JSX
次にJSXの例を動かしてみましょう。
$ cd ../jsx-ssr
$ yarn install
$ yarn dev
basic同様にhttp://0.0.0.0:8787
にアクセスすると以下のように表示されます。
基本骨格は以下の通りJSXで記載されています!
export const Top = (props: { posts: Post[] }) => {
return (
<Layout title={'Top'}>
<main>
<h2>Posts</h2>
<ul>
{props.posts.map((post) => (
<List post={post} />
))}
</ul>
</main>
</Layout>
)
}
Next.js
なんと、Next.jsも動きます。
$ cd ../nextjs-stack
$ yarn install
$ yarn dev
Next.jsが動くなら、なんでも出来る!と思った一方で、せっかく軽量なフレームワークであるHonoに他のフレームワークを載せたら、それはなんだか違う気もしますけどね。
最後に
ここまで読んでいただきありがとうございました。
とても軽量で、そしてとても早いフレームワークであることが体験できました!
オトとりっぷでも何かに使えないか、模索したいですね。
また、犬専用の音楽アプリに興味を持っていただけたら、ぜひダウンロードしてみてください!
Discussion