Closed10
Remix メモ
前提
- JavaScript や TypeScript や React などの知識なし
- Cloudflare Workers 上でのみ動作させる
- UI などの知識もなし
モチベーション
- Cloudflare Workers で動作するフレームワークを学んでおきたい
サンプル
-
remix/examples at main · remix-run/remix
- 公式に大量のサンプルがある
ライブラリ
-
sergiodxa/remix-auth: Simple Authentication for Remix
- 認証ライブラリ
-
sergiodxa/remix-auth-github: A GitHubStrategy for Remix Auth, based on the OAuth2Strategy
- GitHub OAuth を利用した認証ライブラリ
YouTube
-
Remix - YouTube
- 公式が良い動画をたくさんだしてくれている
日本語ドキュメント
自分向けに翻訳して公開しているだけ
なぜ Remix か
- 色々なフレームワークを見ていたが Cloudflare Workers を綺麗に使ってるのが Remix だった
- ドキュメントが大変充実していた
- ここまでしっかり書いてあるドキュメントは久々に見た
- Cloudfalre Workers の KV を利用したセッションをうまく提供していた
- 組織で開発されておりメンテナンスが継続されそう
- 実際 React Router チームが開発しておりメンテナンス力はありそう
- クライアントと中間で HTML をレンダリングするという仕組みがわかりやすかった
Remix の概要
root.tsx
entry.client.tsx
entry.server.tsx
Remix の Cloudflare Workers 対応
- Cloudflare Workers が推奨している Module Worker 形式に非対応
- env を引き回せずグローバルに KV や vars が出てしまっている
- bindings.d.ts を作る必要ある
- TypeScript 4.5 から対応した mts に非対応
Route
- マッチルートとレイアウトルートがあり、挙動が異なる
- ルートモジュールという意味では共通
Root Layout Route
app/root.tsx に置くルートレイアウトルート。
Basic Routes
- app/spam/index/tsx がある場合 /spam へアクセスしたときのマッチルートは app/spam/index.tsx
- 無い場合は app/spam.tsx っがマッチルート
Layout Routes
- app/spam/index.tsx がある場合はレイアウトルートが app/spam.tsx になる。
Cloudflare Worker
-
edmundhung/remix-worker-template: 📜 All-in-one remix starter template for Cloudflare Workers
- Cloudflare Worker
- Tailwind
- Playwright
-
edmundhung/remix-guide: A platform for sharing everything about Remix
- remix-worker-template を利用したアプリ
良さそうな構成
- worker/ の中でセッション管理はしてしまう
- adapter.ts を用意する
- Remix の Wokrer 対応が甘いので、それを補完する
- Remix は ESModule の Worker に対応していない
- context/index.ts
- context/session.ts
- cookie と kv を利用した session 作る
- remix の App からは
- loader: LoaderFunciton = async ({ context }) =>
- context.session という感じで呼び出す
- adapter.ts を用意する
- worker/ の中で DO を利用しユーザ管理してしまってもいいかもしれない
Remix + Cloudflare Workers の現時点での問題点
Cloudflare Workers の ES Module に対応していない
- https://www.npmjs.com/package/@remix-run/cloudflare-workers このライブラリが依存している https://www.npmjs.com/package/@cloudflare/workers-types のバージョンが 2.2.2 と古い。3.4.0 が最新版。このライブラリが古いことで CloudFlare Workers (ES Modules Syntax) が使いづらい。
- ES Module に対応しないと Durable Objects が利用できない。
参考
- https://github.com/DenaliDeMots/remix-cloudflare-es-modules
- https://www.npmjs.com/package/@cloudflare/workers-types
- [Feature]: Cloudflare Workers ES Modules Support · Issue #764 · remix-run/remix
- ES Module Cloudflare Workers by ekosz · Pull Request #1207 · remix-run/remix
- chore: add support of worker-types v3 on cf adapter by edmundhung · Pull Request #645 · remix-run/remix
- feat: support worker package exports for cloudlfare-workers & cloudflare-pages by edmundhung · Pull Request #1977 · remix-run/remix
ビルド関連
miniflare は wrangler.toml の [build] を見てしまうので、 npm run build が production build だと、npm run dev をしても production ビルドされてしまう。
このスクラップは2022/12/22にクローズされました