Categories
Tags
Alamofire Android AppStoreConnect AWS Bun C++ cAdvisor CFW Cloudflare Cloudflare Access Cloudflare KV Cloudflare Tunnel Cloudflare Workers D1 Deno DevContainer Discord Docker ECR ECS Edizon Emulator EmuMMC Fastlane Firestore Frida Ghidra Git GitHub GitHub Actions GitLab GPG Grafana HACGUI Heroku Homebrew Hono IDA Pro iOS IPSwitch Jailbreak Javascript JSON JWT LanPlay Linode macOS Mirakurun MongoDB NestJS NextJS Nintendo Nintendo Switch NodeJS PHP PostgreSQL Prisma Programming Prometheus Python React Realm RealmSwift Ruby Salmon Run Salmonia3+ Shogi Sideload Snap Splatoon Splatoon2 Splatoon3 SSH Stable Diffusion Starlight Swift Swift Package SwiftUI Switch TensorRT Turf War Typescript TypeScript Ubuntu Ubuntu Server VNC VPN VSCode Vue WARP Wireguard XCode Xcode yarn zsh 家電 横歩取り
596 words
3 minutes
Hono + Cloudflare Workers
Hono
普段APIを立てるときはNestJSを利用するのですが、今回はHonoを使います。
その理由はNodeJSへの依存が少ないのとCloudflare Workersに対応しているからです、ただそれだけ。
環境構築
Cloudflare Workers + Honoのテンプレートをつくっていたのでそれを利用します。
Cloudflare Workersの設定は主にwrangler.toml
に書き込まれているので、ここを設定します。
wrangler.toml
name = "hono-app"
compatibility_date = "2023-12-01"
main = "src/index.ts"
minify = true
基本的な設定はこんな感じです。
環境変数
結構詰まったのがここでした。
単にHonoを動かす場合には.env
に書き込んでおけば、
import { Hono } from 'hono'
import { cache } from 'hono/cache'
import { cors } from 'hono/cors'
import { csrf } from 'hono/csrf'
import { logger } from 'hono/logger'
const app = new Hono()
export default {
port: 32821,
fetch: app.fetch,
}
import { env } from 'hono/adapter'
app.get('', async (c) => {
const { PRIVATE_TOKEN } = env<{ PRIVATE_TOKEN: string}>(c)
return c.json({ PRIVATE_TOKEN: PRIVATE_TOKEN })
})
のような感じで取得できます。
ところがCloudflare Workersで動かした場合にはこの方法では環境変数を取得できません。
公式ドキュメントを見てみると環境変数をwrangler.toml
に書き込む方法が解説されていますが、この手順ではwrangler.toml
に機密情報が含まれる場合wrangler.toml
をgitで管理することができないというデメリットが生じてしまいます。
name = "hono-app"
compatibility_date = "2023-12-01"
main = "src/index.ts"
minify = true
[vars]
PRIVATE_TOKEN = "SECRET_VALUE"
更に、このままworkersを立ち上げると、
Your worker has access to the following bindings:
- Vars:
- PRIVATE_TOKEN: "SECRET_VALUE"
という感じで変数の中身がそのまま標準出力されます。
で、その対策として利用されるのが.*.vars
という独自の仕組みで、大体.env
と同じように使えます。
PRIVATE_TOKEN = "SECRET_VALUE"
開発環境の環境変数を突っ込みたい場合には.env.vars
に書き込むと良いです。
Using vars defined in .dev.vars
Your worker has access to the following bindings:
- Vars:
- PRIVATE_TOKEN: "(hidden)"
すると起動したときに値を隠すことができます。
これでローカルで環境変数をCloudflare Workersに渡すことができ、この値はそのままHonoが取得することができます。
Hono + Cloudflare Workers
https://fuwari.vercel.app/posts/2024/05/workers/