Open11

Cloudflare Workers with Hono on bun を試す

watsuyo_2watsuyo_2

自動で、~/.zshrc に 以下の 2 行を追加してくれる

# bun
export BUN_INSTALL="$HOME/.bun"
export PATH="$BUN_INSTALL/bin:$PATH"

bun の help が確認できる

$ source ~/.zshrc
$ bun -h
watsuyo_2watsuyo_2

後ほど行う 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
watsuyo_2watsuyo_2

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]
watsuyo_2watsuyo_2

package.json に wrangler の記述を追加。

"scripts": {
    "start": "wrangler dev index.ts",
    "deploy": "wrangler deploy --minify index.ts"
  }
watsuyo_2watsuyo_2

ローカルで 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! になる。

watsuyo_2watsuyo_2

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. は完成。

watsuyo_2watsuyo_2

次に、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"
watsuyo_2watsuyo_2

ターミナル上のコマンドラインで Cloudflare Workers へデプロイするには、Cloudflare の認証が必要。

$ bunx wrangler login
 ⛅️ wrangler 3.8.0
------------------
Attempting to login via OAuth...

Successfully logged in.
watsuyo_2watsuyo_2

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 にアクセスできることも確認。