Denoばた会議 Monthly 第4回
2021年12月19日開催。
connpassリンク。
今月のアップデートを追う
Denoのアップデートを追っていくLT。
そのあとの雑談込みでザックリと箇条書き。
Deno v1.17
- REPLでNode.js互換モードがサポート
--no-check=remote
の導入
- esm.shがバグっているときがある
- stdのShimの当て方で起きてそう
- そういうときに重宝しそう
- 2.0のデフォルトになるかも
Import Assertionsのサポート
- これでWebAssenblyが使いやすくなる?
- 以前はAssertionsがなくてもJSONはインポートできた
- セキュリティ的な理由で取りやめになり、今回で実質復活
Deno.testのシグネチャの向上
- その他のオプションを指定できるようになった
- テスト名が第1引数、テスト関数が第2引数という書き方のときに不便だった
- シグネチャが4パターンもあってオーバーライドがすごいことに
- 0から触る人は少しとっつきづらいかも
Deno.refTimer
とDeno.unrefTimer
が実装
- プロセスがブロックされずにCallが終了する
- Nodeにも入っていて、Node互換性を考えると必要
- NodeのTimerは
Class:Timeout
というObjectを返す- その中に
Methods:unref
というのがある - テストフレームワークのAVAで使われている
- その中に
- NodeのTimerは
- 裏で何かやっていてほしいけど、プロセスが終わったらそのまま終えてほしいときに使える
--location
オプションの省略時にglobalThis.location
がundefined
に設定されるように修正
- TypeErrorが投げられていたが、
undefined
に修正された - これも実はNode互換性を考えて実装された
- リデクトタイプス(と聞こえたがわからない)でlocationの検証をするので、それで落ちちゃう
Deno.connectTlsとDeno.startTlsにALPNサポートが追加
- EdgeDBのドライバをDenoで動かすために必要だった
- HTTP/2サポートしているか判断するためにALPNが必要
--watch
で外部ファイルの監視がサポート
deno run
のみ- 将来的に他のものもサポートするんじゃないか
- スクリーンクリアも入ってる
- Denonはこの機能を入れていたのでダメージ大きそう
AbortSignal#throwIfAborted
が実装
- Abortしたら例外投げるというのが書きやすくなった
- 仕様自体はdomenicさんが実装してくれた
deno lsp
の新しいレジストリ補完プロトコルの実装
- パッケージの詳細が見られる
- インクリメンタルサーチができるようになった
- 後方互換性があるので利用者はそこまで気にしなくていい
- 自分でレジストリを作りたい人はレジストリプロトコルのドキュメントを見るといい
deno_std v0.118.0
破壊的変更
- Bartekの思いつきでdeprecatedされていたものの削除がされた
- 削除しないで放置していたものを削除しただけなので、なにか論理的背景があったわけではない
assertThrowsAsync
とassertRejects
は違うので、将来的にassertThrowsAsync
が復活するかも- 同期的にThrowsするものをRejectと扱われているみたいな意見がある
assertThrowsAsync
はThrows
とRejects
両方、assertRejects
はRejects
のみという棲み分け
TC39にJoin
- Deno社というより、lucaさんが入っているみたいな感じ
- 主にやろうとしていること
- JS以外(主にwasm)をimportする
- クローズ処理を自動でやる
- iterator helper
- 草稿段階ではTypeについてのProposalについて触っていくことも
- TypeScriptとの親和性を高めるようなES仕様が水面下で進んでいる
- 過去に大失敗したので入らないと思っていたが、違う方向から再挑戦しようという動きがある
doc.deno.land
- Deno Docをimportするとwasmが降ってくる
Denoの設定ファイルにタスクやパーミッション管理の仕組みを入れる提案がある
- エッジケースが色々あるということで反対意見もある
- マルチプルタスクや並列実行など
- ハードルが高いぶん、議論を重ねて洗練されたものが出てくるのでは
JSConf JPで、kt3kさんがDenoに関する発表資料が公開された
- Deno v2は来年5月13日に出るかも
Oak v10.0.0
Context.params
の型推論が強化
app.fetchEventHandler()
が削除
- fetchイベントは非推奨だがなくならない
- CloudFlareでもなくなる
- Service Workerから離れる
- いろんなサービスで統一された記法にはならなくなる
リクエストボディのサイズが10Mibまでに制限
- 制限を無効化するにはlimitに0やInfinityを設定する必要性がある
graffiti
- Electornのように、DenoまたはNode.jsを使用してデスクトップアプリなどを開発するためのプラットフォーム
- Scope of the projectで現在の進捗がわかる
アフタートーク
deno/stdのメジャーバージョンはいつ1になるのか
- まだこなさそう
- 2.0のやることまとめでBartekからstdを1にする提案をしたが、ryanがすごい渋い顔をした
- まだ早いと思うよ、という話でなくなった
- ryan自身が結構BEAKING CHENGEを投げてくる
- ryanがfsのmod.tsを一気に消す提案を出した
- copyがunstableなのでfs全体がunstableになってしまっているため
- copyだけ消せばいいのでは? という話になり、copyが削除という運びに
- ryanがfsのmod.tsを一気に消す提案を出した
- 外部コントリビューター的には結構安定しているイメージで、ryanとの間に齟齬がある
Working Groupは次いつやるのか
- 他のことで忙しくなってしまって、今のところできる予定がない
Web Streams at the Edge
- ちゃんとストリーミングしたいときはこれを使えばいい感じになる
Remix
- Denoで動かすdeno-remixというサンプルがある
- 事前ビルドが必要な特性がある
- SSGしたものをreadFileで読む形式
- Next.jsの成果物をDeno Deployでホストという幅が広がる可能性
- アセットの管理はかなり改善する