Open9

新しい CDN Edge Worker, Deno Deploy について

3/29 に突如リリースされた Deno Deploy についてまとめる

Deno Deploy とは

Deno Deloy は Node オリジナル作者であり、 Deno 作者の Ryan Dahl が作った会社のサービス

https://deno.com/

Announcing the Deno Company | Deno Blog

面白いのは、 Vercel の Guillermo Rauch が出資してる

In order to vigorously pursue these ideas, we have raised 4.9 million dollars of seed capital. Our investors are Dan Scholnick from Four Rivers Ventures, Guillermo from Rauch Capital, Lee Jacobs from Long Journey Ventures, the Mozilla Corporation, Shasta Ventures, and our long-time collaborator Ben Noordhuis.

使ってみる

めちゃくちゃ簡単だが、スクリーンショットを取り忘れたので概要だけ。

https://deno.com/deploy から GitHub でログイン。

New Project を選択して、GitHub リポジトリを選択

連携用に GitHub で雑なリポジトリを作って、Hello World をコピペした

mizchi/deno-dev

addEventListener("fetch", (event) => {
  event.respondWith(
    new Response("Hello world!", {
      status: 200,
      headers: {
        server: "denosr",
        "content-type": "text/plain",
      },
    })
  );
});

こんな感じでエントリポイントを指定する

mizchi/deno-dev/hello.ts

あとは勝手にデプロイされる

https://mizchi.deno.dev/

技術的な概要

Deno Deploy | Deno Deploy Docs

Builds on the Web: use fetch, WebSocket, or URL just like in the browser
Built-in support for TypeScript and JSX: type safe code, and intuitive server side rendering without a build step
Web compatible ES modules: import dependencies just like in a browser, without the need for explicit installation
Direct GitHub integration: push to a branch, review a deployed preview, and merge to release to production
Extremely fast: deploy in less than a second, serve globally close to users
Deploy from URL: deploy code with nothing more than a URL
API compatible with Cloudflare Workers®: benefit from a large existing ecosystem

Deno がデプロイできる Edge Worker 。 Cloduflare Workers と API 互換といってるが、 Cloudflare Workers は Service Worker の模倣なので、要は Service Worker Style

パフォーマンス計測

本当にCDN Edge か疑ってたので、とりあえず ping 投げてみた

$ ping mizchi.deno.dev                                                                       725ms 
PING mizchi.deno.dev (34.120.54.55): 56 data bytes
64 bytes from 34.120.54.55: icmp_seq=0 ttl=116 time=5.325 ms
64 bytes from 34.120.54.55: icmp_seq=1 ttl=116 time=11.702 ms
64 bytes from 34.120.54.55: icmp_seq=2 ttl=116 time=5.929 ms
64 bytes from 34.120.54.55: icmp_seq=3 ttl=116 time=6.211 ms
64 bytes from 34.120.54.55: icmp_seq=4 ttl=116 time=6.074 ms
64 bytes from 34.120.54.55: icmp_seq=5 ttl=116 time=12.270 ms
^C
--- mizchi.deno.dev ping statistics ---
6 packets transmitted, 6 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 5.325/7.918/12.270/2.894 ms

だいたい 5ms で速い。これは tokyo リージョンがありそう。

ローカル開発

このCLIでローカルでサーバーを立ち上げられる

https://deno.com/deploy/docs/deployctl
# install
$ deno install --allow-read --allow-write --allow-env --allow-net --allow-run --no-check -f https://deno.land/x/deploy/deployctl.ts

# run
$ deployctl run https://deno.land/x/deploy/examples/hello.js
ログインするとコメントできます