Slide 1

Slide 1 text

OpenNext + Hono on Cloudflare Workers で イマドキWeb個人開発スタックを実現する rokuosan (id:rokuokun)

Slide 2

Slide 2 text

About me (5.0s) ● id:rokuokun / rokuosan / ろくお ● 若者です ● 趣味 ○ Kotlin, Go ○ ではない→ Perl, TypeScript ● https://x.com/rokuosan_dev

Slide 3

Slide 3 text

このLTの内容 ● 二番煎じです ● 大体これと同じことをやります ○ mizchi さんの 「遂に Cloudflare + Next.js(OpenNext) + Prisma 6.7.0(No Rust) が動く時代が来た」 ○ https://zenn.dev/mizchi/articles/cloudflare-opennext-prisma-no-rust ○ 違いは DB 周りと Hono を載せる部分 ● 個人開発向けです

Slide 4

Slide 4 text

すでに記事あります ● 気になった人は読んでみてください ● https://blog.km3.dev/entry/20250527/1748280176

Slide 5

Slide 5 text

知っておくべきこと ● Cloudflare Workers ○ Cloudflare の Edge Computing ● OpenNext ○ Next.js の脱 Vercel をするために頑張っているプロジェクト ○ AWS 、 Cloudflare 、 Netlify をサポート(2025/05/29現在) ● Hono ○ ナウなヤングにバカウケのフレームワーク

Slide 6

Slide 6 text

OpenNext on Cloudflare Workers のセットアップ

Slide 7

Slide 7 text

超簡単 1 ステップ ● これで OpenNext on Cloudflare Workers が出来上がる ● 今日はこれだけ覚えて帰ってください。

Slide 8

Slide 8 text

さっきデプロイしたやつ ● https://kyototechtalk-8.km3.workers.dev/ ● 大迫力の Next.js のランディングページが見えるはず

Slide 9

Slide 9 text

お手軽2ステップ ● npm create cloudflare で Next.js 向けテンプレートをつくる ○ npm create cloudflare@latest -- --framework=next --platform=workers ○ Next.js on Cloudflare Workers が出来上がる ● OpenNext に差し替える ○ npm install @opennextjs/cloudflare@latest ○ next.config.ts にいい感じのコードを追加する

Slide 10

Slide 10 text

(ちなみに)OpenNext に差し替えるには ● 公式ドキュメント通りに進めるだけ ○ https://opennext.js.org/cloudflare/get-started ● next.config.ts に2行加える(伏線) ● package.json の scripts に↓を書いておく

Slide 11

Slide 11 text

やっておくと良いこと ● キャッシュ設定 ○ Workers では next.config.ts 上での Cache-Control ヘッダ設定ができない ○ public/_headers に以下の内容を書いておく(デフォルトのNext.jsと同じ設定)

Slide 12

Slide 12 text

App Router に Hono を入れる

Slide 13

Slide 13 text

Catch-all Route に Hono をおく ● src/app/api/[[...route]]/route.ts に↓を書く

Slide 14

Slide 14 text

Cloudflare D1 と接続する

Slide 15

Slide 15 text

Cloudflare D1 と繋げるには ● Hono では Bindings に書く ○ OpenNext ではこれをすると型情報が変わるのでビルド不可能 ● じゃあどうするか ○ getCloudflareContext() という謎関数を呼ぶ ○ ↑ ローカルはどうやって?

Slide 16

Slide 16 text

Cloudflare D1 と繋げるには ● Hono では Bindings に書く ○ OpenNext ではこれをすると型情報が変わるのでビルド不可能 ● じゃあどうするか ○ getCloudflareContext() という謎関数を呼ぶ ○ ↑ ローカルはどうやって? ○ ↓これでローカルに SQLite を立ててくれる(伏線回収)

Slide 17

Slide 17 text

Cloudflare D1 with Drizzle ORM ● マイグレーション ○ 作成は npx drizzle-kit generate ○ 実行は npx wrangler d1 migrations apply

Slide 18

Slide 18 text

Cloudflare D1 with Drizzle ORM getCloudflareContext()からのDBを Drizzle で扱えるように Middleware で切り替える

Slide 19

Slide 19 text

Hono のうまみを享受する

Slide 20

Slide 20 text

Hono Client を使う ● hc でクライアント作成 ● client.でAPI呼び出し ● おまけで型情報がついてくる

Slide 21

Slide 21 text

Hono Client を使う(SSR) ● SSRも当然できるぞ!

Slide 22

Slide 22 text

この構成のいいところ

Slide 23

Slide 23 text

メリット ● Next.js の資産を大体使える ● Next.js でバックエンド処理を書かなくていい ○ いちいちディレクトリ切って route.ts とか書かなくていい ● バックエンドとフロントエンドでアーキテクチャを変更できる ○ Next.js の制約から離れてある程度自由に書くことができる ○ やりたければクリーンアーキテクチャぽくもかける ● 安い

Slide 24

Slide 24 text

デメリット ● OpenNext の開発サイドが疲れるリスク ○ 依存が増えると言えることではある ● 常にアップストリームに追従しているとは限らない ○ とはいえ、更新されてすぐにバージョン上げることはない ● 実は無料枠だとすぐに超えそう ○ 3MiB 上限だけど、この時点で大体 2.4 MiB ある(そんな)

Slide 25

Slide 25 text

おわり

Slide 26

Slide 26 text

さっき作ったリポジトリ ● https://github.com/rokuosan/kyototechtalk-8

Slide 27

Slide 27 text

OpenNext + Hono on Cloudflare Workers で イマドキWeb個人開発スタックを実現する rokuosan (id:rokuokun)