Cloudflare Workers with Hono on bun を試す
$ sw_vers
ProductName: macOS
ProductVersion: 12.6.8
$ bun -v
1.0.2
まずは、bun を curl 経由でインストール
$ curl -fsSL https://bun.sh/install | bash
自動で、~/.zshrc に 以下の 2 行を追加してくれる
# bun
export BUN_INSTALL="$HOME/.bun"
export PATH="$BUN_INSTALL/bin:$PATH"
bun の help が確認できる
$ source ~/.zshrc
$ bun -h
後ほど行う bun init では、ディレクトリ直下にプロジェクトを作成するので、事前にディレクトリを作成しておく。
$ mkdir cloudflare-workers-with-hono-on-bun
$ cd cloudflare-workers-with-hono-on-bun
$ bun init
bun init helps you get started with a minimal project and tries to guess sensible defaults. Press ^C anytime to quit
package name (cloudflare-workers-with-hono-on-bun):
entry point (index.ts):
Done! A package.json file was saved in the current directory.
+ index.ts
+ .gitignore
+ tsconfig.json (for editor auto-complete)
+ README.md
To get started, run:
bun run index.ts
ローカルのコマンドライン上で bun の動作確認。
$ bun run index.ts
Hello via Bun!
ディレクトリ構成は至ってシンプル。
$ ls
README.md index.ts package.json
bun.lockb node_modules tsconfig.json
Hono をインストールする。
$ bun add hono
bun add v1.0.2 (37edd5a6)
installed hono@3.6.3
1 packages installed [218.00ms]
Cloudflare Workers の型情報と wrangler をインストールする。
$ bun add -d @cloudflare/workers-types wrangler
bun add v1.0.2 (37edd5a6)
installed @cloudflare/workers-types@4.20230914.0
installed wrangler@3.8.0 with binaries:
- wrangler
- wrangler2
107 packages installed [1.86s]
package.json に wrangler の記述を追加。
"scripts": {
"start": "wrangler dev index.ts",
"deploy": "wrangler deploy --minify index.ts"
}
ローカルで bun 経由で wrangler dev できるか試す。
$ bun run start
$ wrangler dev index.ts
⛅️ wrangler 3.8.0
------------------
wrangler dev now uses local mode by default, powered by 🔥 Miniflare and 👷 workerd.
To run an edge preview session for your Worker, use wrangler dev --remote
⎔ Starting local server...
[mf:wrn] The latest compatibility date supported by the installed Cloudflare Workers Runtime is "2023-09-04",
but you've requested "2023-09-18". Falling back to "2023-09-04"...
[mf:inf] Ready on http://0.0.0.0:8787
[mf:inf] - http://127.0.0.1:8787
[mf:inf] - http://192.168.0.156:8787
Hello via Bun!
wrangler.toml を作成し、設定を記述すれば warning は消える。
ただ、index.ts には console.log の記述しかないため、ブラウザで localhost:8787 にアクセスしても、[mf:err] Error: No response!
になる。
Hono を使って localhost:8787 にアクセスしたとき、Hello Cloudflare Workers!
と表示されるようにする。
import { Hono } from 'hono'
const app = new Hono()
app.get('/', (c) => c.text('Hello Cloudflare Workers!'))
export default app
$ bun run start
$ wrangler dev index.ts
⛅️ wrangler 3.8.0
------------------
wrangler dev now uses local mode by default, powered by 🔥 Miniflare and 👷 workerd.
To run an edge preview session for your Worker, use wrangler dev --remote
⎔ Starting local server...
[mf:wrn] The latest compatibility date supported by the installed Cloudflare Workers Runtime is "2023-09-04",
but you've requested "2023-09-18". Falling back to "2023-09-04"...
[mf:inf] Ready on http://0.0.0.0:8787
[mf:inf] - http://127.0.0.1:8787
[mf:inf] - http://192.168.0.156:8787
[mf:inf] GET / 200 OK (9ms)
ブラウザの表示と、ターミナル上の [mf:inf] GET / 200 OK
が確認できれば Hello World. は完成。
次に、Cloudflare Workers へのデプロイのために wrangler.toml を作成。
$ touch wrangler.toml
wrangler dev した時に、ターミナル上に表示された warning の通り、compatibility_date を 2023-09-18 とする。
name = "cloudflare-workers-with-hono-on-bun"
compatibility_date = "2023-09-18"
ターミナル上のコマンドラインで Cloudflare Workers へデプロイするには、Cloudflare の認証が必要。
$ bunx wrangler login
⛅️ wrangler 3.8.0
------------------
Attempting to login via OAuth...
Successfully logged in.
package.json に記述した、deploy コマンドを使って Cloudflare Workers へデプロイ!
$ bun run deploy
$ wrangler deploy --minify index.ts
⛅️ wrangler 3.8.0
------------------
Total Upload: 19.87 KiB / gzip: 7.40 KiB
Uploaded cloudflare-workers-with-hono-on-bun (2.24 sec)
Published cloudflare-workers-with-hono-on-bun (6.04 sec)
https://cloudflare-workers-with-hono-on-bun.****.workers.dev
Current Deployment ID: ********************
Cloudflare Workers のコンソール画面に worker が追加されていることを確認。
デプロイ先の URL にアクセスできることも確認。
サンプルコードと readme を追加