Denoばた会議 Monthly 第14回
2022年10月30日開催。
connpassリンク。
今月のアップデートを追う
Denoのアップデートを追っていくLT。
そのあとの雑談込みでザックリと箇条書き。
Deno v1.27
npmパッケージで型チェックがサポート
- deno checkなどを実行した際に、対象のnpmパッケージに含まれる型定義ファイルの内容を元に、型チェックが実行される- npm:識別子はv1.25くらいに入った
- 機能として破綻なしという状態で使えるようになった
- 型定義ファイルをよしなに拾ってチェックしてくれる
- Davidさんが実装
- かなり楽しいので使っていきましょう
 
- 型定義ファイルが同梱されていないパッケージについては、@deno-typesで型定義を指定できる- DefinitelyTypedはnpmパッケージとは別の場所にあるので、合わせに行く必要がある
- ロードマップとしては自動的に取りに行く予定もある
 
Node-APIのサポート
- 現時点では、Node-APIをベースに実装されたパッケージを利用するには、--allow-ffiの指定が必要
- Node.jsのネイティブ拡張が読めるようになった
- Rustでエンジンを書いてNode-APIで変換しているPrismaに恩恵がある
ロックファイル v2
- --lock-writeによって出力されるロックファイルのフォーマットが変更された
- 次のDeno v1.28では、deno.jsonが存在する場合、ロックファイルをデフォルトで出力することが検討されているよう- 現時点ではデフォルトでlockする仕様になってない
- デフォルトでlockされるようになったら認知度はあがるかも
 
- エントリーポイントが違ったらロックファイルの中身は違うものになってくるが、どう処理しようとしているのか?
- エントリーポイントごとに別々にロックファイルを生成する?
- そうしないと上手くできなさそう
 
deno lspでInlay Hintsがサポート
- vscode_denoを最新バージョンにアップデートし、"editor.inlayHints.enabled"に"on"などを設定すると有効化される
- ソースコードに書いていない型定義をエディタ上に表示してくれる機能
- だいぶ賑やかな感じになる
- 関数の引数や戻り値などの型定義が表示されるようになる
- 鬱陶しいと思う人もいるかも
- デフォルトではオフになっている
- オプションの調整は利く
- Rustやっている人はデフォルトでONなので馴染みがあるかも
- Rustでも邪魔な人は邪魔って思ってる
- 推論結果の型が長いとき、情報としての有用性がないのに幅を取るので邪魔
- TypeScriptはそういうことは少ないと思うが、古いライブラリに無理に型定義したものは長い型定義があるかも
 
- エディタ好きな人、試して感想ください
アップグレードチェッカー
- deno runコマンド実行時にバージョンが古ければ更新案内が表示される- 1日1回、deno runで実行時に表示される
- npmも四角く囲んでやってるやつ
- 実行時の最初にチェックされる
- パフォーマンスチューニングをしている人から余計なオーバーヘッドが出るという意見もあった
- GitHub CLIは最後にチェックするようにしているので、最後にやればパフォーマンス的にも納得があるかも?
 
 
- もし不要であれば、DENO_NO_UPDATE_CHECKに1を設定すると無効化できる
deno taskの改善
- 安定性に関する警告メッセージが表示されなくなった
- 安定してきたという扱いなのかも
- deno taskはunstableだった
- --unstableフラグはAPIにしか適用しない方針なので、メッセージが出ないということは安定したんだろうという感じ
- RyanさんはShell依存の機能はいかがなものかと言い続けていた
- Ryanさんは「UNIX的な世界観をWeb的な世界観に差し替えることが、Denoのやること」と言っていた
- Bashに相当するWeb的な何かを模索していたが、見つからなかったのかもしれない
 
- 安定化したので、安心して使ってほしい
 
- 複数のコマンドを並列で実行する際の挙動が変更されている
- 今までは1つが失敗しても処理を続行していた
- これからは、1つでも失敗したら強制的に終了
- Node.jsだったらconcurrentlyとか使ってサーバー立ててテストしたりしている
- DenoはBashのコマンドで同様のことができる
 
unstable APIの安定化
- 以下のAPIが安定化
- Deno.consoleSize
- Deno.osRelease
- Deno.stdin.setRaw
- Deno.futime/- Deno.futimeSync- 最終アクセス時間を更新する
 
- Deno.loadavg- マシンのロードアベレージを取る
 
- Deno.utime/- Deno.utimeSync
 
- Nodeに合わせているわけではないが、作者がRyanなので癖が似通ってしまう
- Deno.utimeが安定化しているのは、- npm:識別子を安定化させるためにNode互換レイヤーを安定APIで実装されていないと整合性が取れないため
- Issueが立っているので詳しくはそこで
- 現状で残りは10個くらい
 
- FlashというDenoのHTTPサーバーも安定化するようになる
V8がv10.8へアップデート
- Change Array by copyのサポートが入っている- toSortedは文字列のASCIIで比較する
- toSplicedは配列から特定のものを切り取る
 
- Record型というのが検討されていて、TypeScriptとの兼ね合いをどうするのか
- Records & Tuplesの準備という意味合いもありそう
Deno.listenとDeno.listenTlsでreusePortオプションがサポート (Linuxのみ)
- Socketを繋ぐときはクライアントから
- ドメインソケットの上でHTTP通信が走る
- listenの話で、DockerはDeno.connectなので影響はない
- 複数プロセスが同じアドレスとポートでlistenする
- 接続元のポートをハッシュ化している
- お手軽並列サーバーとして使える
- Linuxカーネルv3.9で追加され、他ではサポートされていない
- Romeの作者がこの話をしていて、lucaさんが対応した
Deno.listenDatagramでreuseAddressオプションがサポート
navigator.languageとnavigator.languagesが実装
- OSの言語設定がこれで取れますよ、という話
- PRは結構長いことやってた
Deno.killとDeno.Process.killのsignal引数がオプショナルに変更 (デフォルトでSIGTERMを送信)
Deno.listenによってUnixドメインソケットを開く前にDenoの内部で行われていたソケットファイルの削除処理が廃止
deno_stdのアップデート
- std/hashが削除 (今後は- std/cryptoで代用)- だいぶ前に非推奨にしていたので削除したら、壊れるモジュールが出た
- そのときはdenodrivers/mysqlが利用していたgod_cryptoでstd/hashがバージョン指定なしで使われていることが原因だった
 
- そのときは
- 消すのはどういうリスクが発生するかわからない
 
- だいぶ前に非推奨にしていたので削除したら、壊れるモジュールが出た
- std/textprotoが削除 (今後は- TextLineStreamで代用)- Golangでお馴染みReader型なので、Stream型に合わせる関係で消える
 
- CSVStreamや- JSONParseStreamなどが削除 (今後は- CsvStreamや- JsonParseStreamなどの形式のAPIで代用)- CSVやJSONの先頭を大文字にしている
 
- 依存関係のエラーはimport mapで依存関係を無理やりバージョニングすれば対応可能
Prisma v4.5.0
- Denoの初期サポートが入った
- 公式ガイドも公開されている
- 現時点では、Prisma Data Proxy経由でのデータベース接続のみがサポート
- 実行することで、Deno用のPrismaクライアントが生成される
Nuxt 3でのDenoサポート
- Nuxt 3のサーバエンジンであるNitroでDeno presetの実装が進んでいるよう
- 実装されれば、Nuxt 3で開発されたアプリケーションをDeno Deploy上などで動かせるようになりそう
- デプロイターゲットとしてDeno Deployが選べるようになる
Deno Deployの名前を変えようとしている
- 現在の名前だと、Denoが大前提になっていてユーザー規模が限られてしまう
- どういう名前になるかは誰もわからない
質問や共有コーナー
- Deno.listenDatagramの- reuseAddressオプションがよくわかってない(UDPでreuseAddressをどうするのか)- TCPだとタイムウェイト状態のときは再アサインできないんだけど、それが抑制できる
- UDPでも同じ挙動を想定して追加されているっぽい
- 内部的にMacとLinuxで微妙に違う挙動をすることをDenoで実装している
- UDPでもアドレス使用中ですというのを避けるもの
 
- Deno DeployでCache APIが使える見通しはあるのか
- 実装は完了しているが、色々あってもう少々お待ち下さいという状態
- 1回入れたけど、不安定になりそうだったのでRevertした
- Revert後にみんなでレビューをしていたが、他の問題が発生してペンディング状態
- RyanさんもAlmost readyと言っていて、セールスポイントになる認識はしているので近いうちに出るだろう
- 優先度は2番目に高い
- 1番目が落ち着いたら再開される
 
- 大学の研究室でDenoに関する研究をしていてポスター発表を学会でするらしい
- import文を辿って解析している
- Deno本体グループも似たようなことをしていて、それをレジストリに出すということをしようとしてる
 
- deno.landのサブモジュールのページデザインが変わっているが、依存関係も載せようとしている
- データとしては持っていて、今のUIでどう表示するか検討している
- 昔のUIでは右側に表示されていたらしい
- Kitsonさんが裏でレジストリの次バージョンを練っていた
 
- KitsonさんがDenoを退社
- Twitter上で退社について書いている
- タイムゾーンが1番の原因
- オーストラリアタイムゾーンでアメリカと真逆
- オールハンズミーティングが朝3時なので出られなくなってしまった
- この状況でリーダーシップを取るのは難しくなってしまった
 
- 4.5年のうち2.5年はDenoのOSS時代を、2年はDeno社時代を経験している
- Denoの最初から関わっている
- OSS時代からいた人が退社したのは珍しい
- 趣味を仕事にしてまた趣味に戻るみたいな言及をしてる
- OSSコントリビュータとして残るのかもしれない?
 
 
- Deno社オフイベント(offsiteというイベント)
- ジョイン時期で来られなかったり、インドで働いている人はパスポート都合で来られなかったり
- RyanさんやLucaさん、BartekさんやKitsonさんもきた
 
- オンラインでやってた人と初めて会って印象違ったこととかありましたか?
- アイコンしか知らなかった人が印象違った
- crowlKatsさんが192cmあったことは衝撃的に違った
- 意外と違わないなというのがRyanさんやBartekさん
- Meetsしてるとあまり印象が違わない感じ
 
- Denoの恐竜アイコンの名前はあるんですか
- 正式名称はない
- あの恐竜をほぼ専門で描いているHashrockさんはDenoくんと呼んでいる
 
- 掲示板サービス1h.rをリリースした話
- Deno Deployで動いている
- 虎の穴開発室ブログ記事で書かれていたもの
- 『Deno Deploy起点フルサーバーレスサービスインフラ構想』に基づいている
- 書き込みは12時間で非表示になり、UpstashのqStashのバッチ処理で物理削除している
 
- Deno本体のリリースが変則的になってる
- それを踏まえて次回のDenoばた会議の開催日を決める必要がある
 
参考資料
上記をまとめる際に眺め、かつ箇条書きの中に含められなかった資料です。
名前だけ掠ってて関係ない資料もあるかと思いますが、まとめる作業の可視化として残しています。
読まなくて大丈夫です。
- Deno v1.25 | 週刊Deno
- 言語ソートと文字列検索
- Linux kernel 3.9 の新機能 SO_REUSEPORT を試してみる - nigakyのブログ
- denops-docker.vim/socket.ts at fba823799db96464b51cb45459fcf3cdc6c2c392 · skanehira/denops-docker.vim
- feat(ext/net): reusePort for TCP on Linux by lucacasonato · Pull Request #16398 · denoland/deno
- Deno.ListenTlsOptions | Runtime APIs | Deno
- Javascript Records and Tuples
- Home - FOSE2022 in 松江しんじ湖温泉