☁️

Cloudflare Workers をよく知らず適当に使って利用を中止した話

2024/06/23に公開

何となく新しいサービスを作ろうと思いまして
いつもの Next.js じゃなくて Remix でやってみようと思い立ちました。

そうすると Remix に関連して Cloudflare Workers などの情報も出てきて
エッジでいろいろうごくのめっちゃええやん!と思いまして
Remix + Cloudflare Workers + D1 で、まずやってみようと思った次第でした。

D1を組み合わせるのは難しかったから
じゃあ、そこはFirebase Firestoreにしてしまおうか。

そして、ローカルでいい感じに開発ができてデプロイしようとしたその時です。

firebase-admin requires a full Node.js runtime and is not supported on Cloudflare workers. The SDK is currently incompatible with bundling tools like webpack.
https://github.com/firebase/firebase-admin-node/issues/2069#issuecomment-1426082331

そうです Cloudflare Workers は、完全なnodeが動いているわけではありません。
なので、適当に作ったRemixはそのまま動きません...

compatibility_flags = [ "nodejs_compat" ]

というオプションである程度のnode関連のimportができるようになりますが...

// Do this:
import { Buffer } from 'node:buffer';

// Do not do this:
import { Buffer } from 'buffer';

https://developers.cloudflare.com/workers/runtime-apis/nodejs/

のように書く必要があります。

いや...無理じゃない?
自分のライブラリ内なら可能だけど、他の人が作ったライブラリの中身
全部node:つけるの無理じゃない...?

無理じゃない!例えば、Firebase Authのリクエストを自前で組んでしまえば!

https://zenn.dev/codehex/articles/ca85a1babcc046

これと同じようにFirebaseを、再実装してしまえばOKです。
ですが、手軽にやってみたかったので、ここまでとしました。

コードを引き上げて Fly.io にデプロイしなおして
今回の Cloudflare Workers お試しは終了としました。

制限はありますが、その分エッジで動くメリットはもちろん大きいので
Cloudflare Workers を利用した高性能なWebサービス作成にも
機会があればチャレンジしたいなと思った次第でした。

おしらせ

当方は、Slackにてプログラマコミュニティを運営しております。
本記事のように、コミュニティ内で提供している独自システムの開発時に発生した知見を記事からしております。
本記事に関する質問や交流なども行えますので、気軽にご参加を検討して頂けると嬉しいです。
https://note.com/yoneapp/n/nb474b4a89c1a

Discussion