Cloudflare Workersが面白すぎる件



Cloudflareって?

そもそもCloudflareって何?って方はWeb触ってる方なら少ないと思いますが、一応知らない方のために軽く解説しておくと、ネット上のサービスを提供している会社の名前です。

どんなサービスかというと、有名なのであればCDNやWebサイトのリバースプロキシとしてのサービスが有名です。

悪名高い著作権ガン無視サイト「漫画村」なんかの画像もクラウドフレアにホスティングされていたことでスッタモンダありましたね。

というと、ダーティなイメージに聞こえてしまうかもしれませんが、本質的には全くそんなことなくて、むしろどっちかというと僕の印象としては「雑魚からはお金とならないよっ!」ってスタンスの超太っ腹企業です。

無料で各種サービス使わせてくれる枠がデカイ!

じゃWorkersって?

Workersというのはそのクラウドフレアが提供しているサーバーレスアーキテクチャです。

じゃあサーバーレスってって何よって話になってくると大変なんですが、簡単にいうと、要求があったときにだけオンデマンドで対応するサーバーみたいなもんです。

従来のサーバーはいつ要求が来るか分からないので、24時間稼働でつけっぱなしておくってイメージです。

実際にはサーバーレスといいつつホスティングしているわけですからサーバー自体は存在するんですが「誰からみて」サーバーレスかって話なんです。

構築する人がサーバーであることを意識する必要がなく、従来のサーバー型のWebホスティングと比較して拡張性が高くスケーリングしやすいのが特徴として挙げられます。

AmazonのAWSでいうところのLambdaとAPIゲートウェイの組み合わせに相当します。

CloudflareのWorkersとAmazonのLambda

似たような両サービスですがどっちとも使ってみた感想を比較していきます。

言語

利用できる言語ですが、前提としてWorkersはJavaScriptが完全なベース言語となっています。

Workers

  • JavaScript
  • TypeScript
  • C
  • Cobol
  • Rust
  • Python
  • PHP
  • Dart
  • Kotlin
  • Scala
  • Reason/OCaml
  • Perl
  • FSharp

コンパイル言語であるCやCoblはWebAssemblyを、その他のスクリプト言語は各言語で対応しているJavaScriptへの変換モジュールを使って動作を実現させるようです。

ですので、実際に走っているのはあくまでJavaScriptっていうイメージ。

Lambda

  • Java
  • Go
  • PowerShell
  • Node.js
  • C#
  • Python
  • Ruby 

Workersに対してLambdaは何かしらの言語に変換されるわけではなく、ネイティブにこれらの言語が走ります。

比較すると対応言語が少ないように感じますが、Runtime APIを通じてその他の言語も利用することが可能です。

どっちがいいのって話ですが、言語の対応って意味ではLambdaの方がいいです。

なんでかというと、Workersはあくまで各言語が「変換」されたJavaScriptが走るってのがキモで、そもそも上手く変換できないってことも多々あります。

試しにWorkersでPythonでやってみたんですが、IDEで補完効かないわドキュメント少ないわでモジュールのインポートするだけでもクッソ時間かかりました。

それだったら別に生のJavaScriptで書くわ、ってくらいには色々めんどくさかったです。

速度

ここが一番Workersがいいなと思った点だったのですが、とりあえず早いです。

Lambda+APIゲートウェイと比較すると控えめに言ってWorkers爆速です。

これ何でかっていうと、リージョンとかエッジとかそういう話ではなく、言語の項でデメリットとしてあげた「絶対にJavaScriptが走る」っていう点が関係していそうです。

Lambdaは関数実行時にそれぞれネイティブな言語が走るため「実行するための環境」を作るための予備動作的なものが発生します。

これを「コールドスタート」といいます。

一度関数が実行されると、次に実行するときには前回実行した環境が適用されるので多少遅延が緩和されますがこの状態を「ウォームスタート」というようです。

あったまってきたら早いってことです。が、しばらく実行されないと、前に実行した状態を忘れてしまう。というのがLambdaの仕様の様です。

Pythonが一番コールドスタートが軽く、Javaが一番重いっていうベンチマークをどっかでみた気がします。

多分、実行環境の生成自体も重いでしょうし、加えてコンパイルとかも上乗せになってるからでしょうね。

対してWorkersはコールドスタートが存在しない。これがデカイ。

データベース

Workersには専用のKVというシステムがあって、JavaScriptのObject的な保存ができる仕組みがあります。無償利用だと一日1000書き込みという比較的強めの制約がありますので用途によってはネックになってくるかもしれませんが。読み出しは見る限り無制限です。

Lambdaの場合はDynamoDBやRDS、S3なんかと連携してストレージしてく感じですね。

この辺の拡張性、自由度はLambdaの方が高そうです。

作りやすさ

これに関してはあくまでWebに公開する何かを作るっていう前提ですが、Workersが作りやすいです。

ベタ書きのJS一枚で動作するっていうお手軽感と、書いた瞬間に何も考えずデプロイしたらもう走るっていう速さがいい。

LambdaはWebで走らそうとしたらAPIゲートウェイの設定入ってきてちょっとめんどいですが(それでもかなり楽ですが)、そんなことすら考えなくていい仕様。

定期実行的な、バッチ処理的なことをするならあんまり変わらないかもしれませんが、ことWebにデプロイってことを考えるとWorkersが楽です。

あとはJavaScriptってのもいいですね。Webに携わってさえいれば比較的とっつきやすい人の方が大多数かと思います。

いくつかの関数の仕様がブラウザネイティブの仕様とは違うみたいですが、まぁ誤差の範囲的なあれです。

5分で作るWorkers ”Hello World”

ここからアカウント作成。

すでにサイトとか登録しててCloudflareのアカウントがあるなら管理コンソールにWorkersのタブがあると思いますのでそこからでもOK。

Workersを作成ボタンを押したら

こんな感じの簡易編集画面に行きます。

すでにHello World用のスクリプトが入ってますので、そのまま何も考えずエディタ下部にある「保存してデプロイする」ってボタンを押します。

そしたら赤枠で囲ったところにデプロイ先のURLが表示されますので、アクセスするともうデプロイされています。

はやっ!はやすぎる!

脳死でやっても5分あればデプロイできます。

Workersまとめ

Lambdaと比較して一長一短もちろんあるのですが、相当とっつきやすいサービスであることは伝わったと思います。

レストフルなAPIなんかも非常に作りやすい仕様になってるので興味ある方はチャレンジしてみてください。