Cloudflare Workersを色々試してみた記録&感想
無料で使えるAPIサーバーで高速でなるべく利用枠が多いサーバーを探していて、Cloudflare Workersが結構使えそうだったので、公式サンプルとかを試してみました。
公開日: 2020.4.7
やってみたこと
公式サンプル
まずは、hello worldと返すだけの簡単なアプリを試しました。
Node.jsサーバーとの違いイメージするには良いサンプルでした。
その他、公式のサンプルは下記にあります。
このサンプルを見る限り、現状ではCloudflare Workers自体をサーバーとして使うというより、外部サーバーとのやり取りに介入する系が多いですね。
GraphQLサーバー
最近はAPIはGraphQLで作っているので、Node.jsサーバーの代用になるかなと思って試してみました。
https://github.com/signalnerve/workers-graphql-server/tree/master/src
このレポジトリのプログラムは、別に立てたGraphQLのゲートウェイ役で、有料プランで使えるキャッシュをかますことで高速化させるというもの。
このままだと、あくまで親のAPIが必要なので、Node.js APIサーバーの代用にはならないし、そもそも外部サーバーと通信している時点でエッジで稼働させるメリットがかなり半減してしまいます。キャッシュを使えば高速化はできますが、、、
ただし、元になっているのがApolloというOSSで、ここを改変して使えば色々できそう。
ただ、Cloudflare Workersが実行できるJavascriptはできることが限られているっぽい(ブラウザレベル?)ので、DynamoDBとかMongoDBとか、外部のAPI付きNoSQLと組み合わせて使うか、ローカルデータを読む感じになるかなと。
ルーター
サーバーとして使うとなると、URIリクエストを処理しないといけないので、Cloudflare公式のルーターを使ってみました。
cloudflare / worker-template-router
const Router = require('./router')
でルーター本体を読んでおけば、結構Expressに近い感覚で使えますね。
これをベースに、Cloudfare Workersで使えるプラグインと組み合わせれば、意外とAPIサーバーっぽく動かせそうです。
開発ツール系
公式CLIツール・wrangler
ビルド・デプロイなどをしてくれるCloudflareの公式ツール。
npm i @cloudflare/wrangler -g
でインストールして使います。
設定方法とかは、こちらから。
無料で使えるエッジコンピューティングサーバー・Cloudflare Workersで簡易APIを立ててみる
ローカル実行ツール・cloudflare-worker-local
ローカルでアプリを実行するのは、
wrangler dev
でいけます。ファイルの更新検知にも対応しているのでこれがベストでしょう。
最初、wrangler devがあるのに気づかなくて他のツールを探していたので一応そちらも載せておきます。
Cloudflareの公式ブログで紹介されていたcloudworkerというツールが開発終了になっていたので、代用としてcloudflare-worker-localというツールを使ってみました。
依存関係が内容なアプリは、そのままindex.jsなどを指定すれば動きますが、プラグインなどの依存ファイルがあるアプリをローカルで動かす場合は、アプリを一回worker化する必要があって、
wrangler build
で一度worker化してから、
cloudflare-worker-local worker/script.js localhost:3000 4000
でローカルサーバーを立ち上げる感じになっています。
動作は確認できるんだけど、改変するたびにworkerをビルドするのが結構手間です。
wrangler devを素直に使うのが良いでしょう。
--
Cloudflare Workersを色々試してみた記録を並べてみました。
情報が英語圏でも結構少ないので、数時間をかかってしまいましたが、感想としては「まだまだこれからなのかなぁ」という感じです。制限が結構あるので使える機能に限りがあるのと、情報が少ないのが辛いところですね。
ただ、Cloudflare Workers自体は、一つのWorkerで複数ドメインに連携できたり、うまく使えればAPIの管理が劇的にスピードアップできそうなので、これからも色々試してみたいと思います。