Denoばた会議 Monthly 第3回
2021年11月21日開催。
connpassリンク。
今月のアップデートを追う
Denoのアップデートを追っていくLT。
そのあとの雑談込みでザックリと箇条書き。
Deno Deploy Beta 3がきた
TCP接続ができるようになった
PostgreSQLなどと接続できるようになった!
埋め込みPlaygroundで手軽に例を見られる
- Forkしても環境変数の中身は引き継がれないので、別途建てる必要はある
- Cloudflare WokersがTCPを直接貼れないので、優位性を持っている
- 3日後くらいに「Cloudflare WorkersでもTCP貼れるようにする」と公式が宣言した
- WebSocketを使ってcloudflaredを噛ませれば今現在のCloudflare WokersでTCP接続できるよ、という説明もあった
- ただそれだとフルスタックじゃないな、というので対応
URL Patternが使えるようになった
APIの遷移制御が手軽に?
Playgroundがきた!
- Web上でDenoのコードを書いて試せる
- 既にあるPlaygroundでForkすると、自分のDeno Deploy上でそのコードを試せる
- コールドスタートのパフォーマンスチューニングを結構している
- Shareという機能がある(拡張子の横のよくあるシェアマーク)
- 押下すると、PlaygroundがPublicになって、URLがクリップボードにコピーされる
- GistやCodeSandboxのように使える
GitHub Orgのサポート
- Deno Deployの右上のNewボタンからNew Orgという項目が追加
- 新規メンバーを招待できる
- GitHub OrgでDeno Deployに参加しないメンバーもいるので、あくまでDeno Deploy上のGitHub Org
- 課金機能がきたときに、Orgにしか課金しないようにしたい
deployctlがアーカイブ
- Deno本体との互換性を持ったので、特殊なCLIを使う必要がなくなった
- Deno CLIを使って開発していくようになった
- fetchイベントが消えていない
- Deno CLIに入れるかDeno Deployから消すか議論中
- deployctlをCLIからdeployするツールとして復活させるという議論もある
Slackが次世代プラットフォームをDenoで開発
- Slack Frontiers 2021で公表された
- ボイラープレートがかなり多い
- サンプルコードを見る限り、Import mapsで依存関係が管理されている模様
slack deno test
という形でコマンド実行する- Import mapsを差し込む処理をslackコマンドがやってくれる?
- Import mapsを明示的に指定すれば、
deno test
でもできるかも
- β版なので、クリエイターとして登録しないと使えない
- SlackがDenoに置き換わっていくのでは? という予測も出ていた
Deno 1.16リリース
React17のJSX Transformのサポート
- jsxやtsxファイル内で
@jsxImportSource
って書くか、deno.jsonに書くことで明示的にimportしなくてもReactが利用できる
- jsxやtsxファイル内で
--location
を使わずにlocalStorageが利用できるように
- オリジン指定の優先度は、
--location
→tsconfig.json
→実行ファイル(無指定)で高い
fetch
でローカルファイルのダウンロードをサポート
allow-read
が必要file://〜
で指定できる- Deno CLI上やDeno Deploy上での互換性のため?
新しいシグナルAPI
- 既存のシグナルAPIは不評で、eventListener形式に書き直された
- これに合わせてDeno.signalは削除
- addSignalListenerというので追加されている
- addEventListenerでSIGTERMが実行されているようにすればいいのではという意見もあった
- addEventListerで登録するとWebSpecに反するので、現在の形に落ち着いた
- 二人がそれぞれ独立して同じ名前で提案してきたので、この名前に
テストケースごとのパーミッション指定が安定化
- ほとんどRun使うところがないので、これで無効化するとちゃんとテストできているのかな、という感じになる
--compat
の機能向上
- Import mapsとの統合もサポート
https:〜
やblob:〜
インポートがサポート - 以下状態で有効化される
.mjs
ファイル中で指定されたときpackage.json
で"type": "module"
が指定されたとき
- Nodeの資産とDenoの資産が両立できる
Deno.startTLs
が安定化
- deno-postgresが
--unstable
に依存しなくなった --unstable
が取り除かれるとDeno Deployに持っていかれる流れっぽい
シンボリックリンク関係のAPIのパーミッション追加
- 従来は
--allow-write
のみで実行可能だったが、--allow-read
も要求するように変更された - oldpathがあるかないか確認するために読むため
- symlinkを無闇に作っていくことでどんなファイルがあるか推測可能になる可能性があるため
- セキュリティに係る修正
LT1
@kawarimidollさんのLT
Denoでサーバー建てるメソッドがserveに
ListenAndServeが非推奨、serveが推奨に
- 最初に使われていたのはserveだが、ListenAndServeに変わっていた
- ListenAndServeはGo言語由来
- 気に入らないので、serveという簡単なものになった
- Deno Deployのサイトもserveに置き換わっている
- Denoのserve HTTPの経緯
- Deno自体に生のHTTP実装が入っているが、人間で扱うのは難しい
- サーバーからエラーじゃないものもエラーがスローされる
- 内部のhyperが厳密に処理しすぎている
- close処理をきちんと書かないといけないので、ややこしい
- Oakは生のHTTPを使っているが、drashはListenAndServe使っているので、移行が必要そう
- Oakの作者がDenoの人なので、比較的サポートが手厚い
- Oak vs. std/httpみたいな構図になるかもしれないが、好きなのを使えばOK
Deno Deploy Playgroundをiframeで埋め込むための機能がある
- embed.deno.com
今月のアップデートを追うの続き
deno_std v0.114.0
http/server
にserveListener()
追加- 利用方法は旧
serve
と同じ
- 利用方法は旧
http/server
のserve
の変更- Deno.Listener渡さなくてもよくなった
- 以下が非推奨に
- listenAndServe
- listenAndServeTls
Freshのアップデート
- middlewareサポートが追加
- pages配下に
_middleware.ts
を用意 - handler関数をexportする必要がある
- pages配下に
- Content-Security-Policy(CSP)サポート
- configの中のcspをtrueにするだけでサポートされる
- カスタマイズしたい場合は、useCSPを使う
- CSPのデフォルトが厳しめ(外部リソースがなので、カスタマイズすることが多そう
DenoのAdvent Carender
- 今年から10日分埋まればカレンダーを追加できるようになった
dnt
- Deno to Node Transform
- Denoで書いたプログラムをNode.jsで動くように特殊変換を噛ませる
- テストケースもNode.jsで動くように変えてくれる
- この趣旨で動いているところまで行っている
- deno_license_checkerもこれでnpm版が作れた
- outDirに入ってnpm publishすればnpmパッケージも出せる
- npxも使える
- 「もうDenoでいいじゃん」となったけど、Nodeユーザーもサポートしたいというときに便利
deno.comが静的サイトジェネレータからFreshに置き換わった
- コールドスタート時の大きなファイル取得がすごく遅い
- GitHubとの地理的距離で遅くなる
- 東京だと3sくらいかかる
- ブログトップもMarkdownを全件パースしてとかするので遅い
- コールドスタート時の対応が必要という話になっている
Ryanにお子さんが生まれて、しばらく離れるかも
- 2.0は延期になるかも
- 来年のQ1かQ2になりそう
- Denoの誕生日(5/13)にリリース説