+ - 0:00:00
Notes for current slide
Notes for next slide

Deno Deploy の話

toranoana.deno #0 @kt3k - 1 / 25

話す人

ひのさわ twitter @kt3k

Deno Land Inc. (2021年1月 ~)

  • Deno Deploy の
    フロントエンド周り開発
  • Deno 自体の開発
    (主に標準モジュール)
toranoana.deno #0 @kt3k - 2 / 25

Deno Deploy
というサービスについて

toranoana.deno #0 @kt3k - 3 / 25

Deno Deploy とは

  • 2021年5月に Deno の会社 Deno Land Inc. より
    ベータリリースされた Web サービス
  • サーバーレス関数を提供するプラットフォーム
    • AWS Lambda、Google Cloud Functions、Cloudflare Workers などと競合するサービス
toranoana.deno #0 @kt3k - 4 / 25

Deno Deploy とは

  • Deno Deploy と紐付けた github レポジトリに push すると自動的にそのブランチがデプロイされる (URL 直指定でデプロイするオプションもあり)
toranoana.deno #0 @kt3k - 5 / 25

Deno Deploy の特徴

  • デプロイされたサーバーレス関数は (プロジェクト名).deno.dev というドメインからアクセスできるようになる
  • メインブランチ以外のブランチへの push も本番相当環境にデプロイされて (プロジェクト名-hash値).deno.dev というドメインでホストされる
    • PR の確認環境が自動で出来る
toranoana.deno #0 @kt3k - 6 / 25

Deno Deploy の特徴

  • アップロードされたサーバーレス関数は世界25リージョンに自動的に分散ホストされる (cf. Anycast)

toranoana.deno #0 @kt3k - 7 / 25

Deno Deploy の特徴

  • ベータ期間中は無料。正式リリース後もある程度の無料枠がある予定。

https://deno.com/deploy

toranoana.deno #0 @kt3k - 8 / 25

Deno と Deno Deploy の関係

toranoana.deno #0 @kt3k - 9 / 25

Deno の Architecture

  • Deno は deno_core + Ops という構成をしている
  • Ops を差し替える事で別の API を持った JavaScript runtime を作れるようになっている
toranoana.deno #0 @kt3k - 10 / 25

Deno と Deno Deploy の関係

Deno =
deno_core
+ ops for Deno
+ tools
Deno Deploy =
deno_core
+ ops for Deno Deploy
+ builtin server

大雑把にいうと deno_core の ops 部分を差し替えたものが Deno Deploy

toranoana.deno #0 @kt3k - 11 / 25

Deno と Deno Deploy の関係

共通すること

  • モジュール解決 (URL import)
  • TS サポート
  • Web API ex. fetch, WebSocket, etc
toranoana.deno #0 @kt3k - 12 / 25

Deno と Deno Deploy の関係

違うこと

  • OS の機能を直接使うような API は Deno Deploy にはない。 例. ファイル操作, サブプロセス起動 etc
toranoana.deno #0 @kt3k - 13 / 25

サンプルコード

toranoana.deno #0 @kt3k - 14 / 25

サンプルコード

addEventListener("fetch", (e) => {
e.respondWith(
new Response("Hello, world!", {
status: 200,
}),
);
});
toranoana.deno #0 @kt3k - 15 / 25

サンプルコード sift

import {
serve
} from "https://deno.land/x/sift@0.3.5/mod.ts";
serve({
"/": () => new Response("hello world"),
"/blog/:slug": (request, params) => {
const post = `Hello, you visited ${params.slug}!`;
return new Response(post);
},
// 上記のルートに合わなかった場合のルート
404: () => new Response("not found"),
});
  • 簡単なルーターを持ったライブラリの sift
toranoana.deno #0 @kt3k - 16 / 25

サンプルコード sift

import {
h, json, jsx, serve
} from "https://deno.land/x/sift/mod.ts";
const App = () => (
<div>
<h1>Hello world!</h1>
</div>
);
serve({
"/": () => jsx(<App />),
"/api": () => json({ message: "Hello world" }),
});
  • JSX をレンダリングする機能もあり
toranoana.deno #0 @kt3k - 17 / 25

サンプルコード oak

import {
Application
} from "https://deno.land/x/oak/mod.ts";
const app = new Application();
app.use((ctx) => {
ctx.response.body = "Hello world!";
});
addEventListener("fetch", app.fetchEventHandler());
  • Oak を使って普通の Express, Koa スタイルの開発も可能
toranoana.deno #0 @kt3k - 18 / 25

他のサービスとの比較

toranoana.deno #0 @kt3k - 19 / 25

vs AWS Lambda

vs AWS Lambda@Edge

vs Cloudflare Workers

toranoana.deno #0 @kt3k - 20 / 25

vs AWS Lambda

  • Lambda は他の AWS の種々のサービスと組み合わせて使うものなので、単純な比較は出来ない。
  • API Gateway + Lambda という使い方と Deno Deploy で比較するとかなり似てる
  • Lambda が1リージョンに限定されるのに対して、Deno Deploy はグローバルに分散ホストされる点が大きく違う
toranoana.deno #0 @kt3k - 21 / 25

vs AWS Lambda@Edge

  • Lambda@Edge は Deno Deploy と同じく 20+リージョンに自動分散ホストされる
  • が、Lambda@Edge はあくまで CloudFront ありきのサービスなので、Lambda@Edge だけでアプリケーションを作る事には適さない。
  • Deno Deploy は Heroku のように、単体で完結したアプリケーションのプラットフォームになることを志向したサービス。
toranoana.deno #0 @kt3k - 22 / 25

vs Cloudflare Workers

  • 一番 Deno Deploy に似ているサービスで、本当の意味での競合と言えるサービス
  • リージョン数も全世界200+箇所に自動デプロイされる (Deno Deploy は25リージョン)
  • import の解決はされない、TS はサポートされていない (ので、自前でビルドが必要) など、開発体験の面で機能差分がある。
toranoana.deno #0 @kt3k - 23 / 25

Deno Deploy が気になった人は
是非使ってみてください

https://deno.com/deploy

toranoana.deno #0 @kt3k - 24 / 25

ご清聴ありがとうございました。

https://deno.com/deploy

toranoana.deno #0 @kt3k - 25 / 25

話す人

ひのさわ twitter @kt3k

Deno Land Inc. (2021年1月 ~)

  • Deno Deploy の
    フロントエンド周り開発
  • Deno 自体の開発
    (主に標準モジュール)
toranoana.deno #0 @kt3k - 2 / 25
Paused

Help

Keyboard shortcuts

, , Pg Up, k Go to previous slide
, , Pg Dn, Space, j Go to next slide
Home Go to first slide
End Go to last slide
Number + Return Go to specific slide
b / m / f Toggle blackout / mirrored / fullscreen mode
c Clone slideshow
p Toggle presenter mode
t Restart the presentation timer
?, h Toggle this help
Esc Back to slideshow