Denoばた会議 Monthly 第5回
2022年1月23日開催。
connpassリンク。
今月のアップデートを追う
Denoのアップデートを追っていくLT。
そのあとの雑談込みでザックリと箇条書き。
Deno v1.18
設定ファイルの自動読み込み
deno.json
やdeno.jsonc
が読み込み対象jsonc
はコメントが書けたりケツカンマ書けたりする人間に優しいJSON- TypeScriptが走り?
- GitHubは最近jsoncでも真っ赤にならなくなった
.json
だと赤くなってしまうので、.jsonc
と書く必要がある
run
やfmt
、lint
で動作する- Node.jsのpackage.jsonと同じような動き
- デフォルトのJSONファイルを読み込むという馴染み深い動き
fmt
でignoreするものが多いので--config
使っていた人は、今回で必要なくなる
lookupの仕組みは?
- 引数でファイル名を指定した場合は、そのファイルがあるディレクトリから上に見ていく
- lookupされるdeno.jsonが変わる可能性がある
- この仕組みはRyan案
- カレントディレクトリだけ見るのは違う、という意見だった
- node_modulesの仕組みと似てる
- requireがあったら自分のところから上に見ていく
- webpackはカレントディレクトリだけ見る実装になっている
Deno.test
のsub-steps APIが安定化
unstable
つけなくても問題なくなった- stepをawaitしないといけないのはちょっとトリッキー
FFI
- シンボル定義
- parameterやresultで型定義を自動生成してくれる
- deno-sdlはこれ使い倒してる
- Deno.UnsafeFnPointerも実装された
Web Cryptography APIの実装が完了
- Web Platform Testで98.1%のテストに成功
- ChromeとEdgeは94%くらい
WebSocket
- Deno独自の取り組みとして、ハンドシェイク時に送信できるヘッダを設定できるように
- WebSocketStreamとWebsocketの違い
- Streams APIベースのWebSocketStream(Promiseと相性がいい)
- イベントリスナ型のWebsocket
Denoランタイムの起動が33%、Deno内部のtscの起動が10%高速化
- Snapshotの処理を圧縮した
- zlig(zlib? 読み取れず)から新しいものに変えた
Uncaught Errorの発生時に、
Error.cause
の内容が表示されるように
- zlig(zlib? 読み取れず)から新しいものに変えた
- デバッグがしやすくなった
- エラーが多段階になっているときに原因が追いやすくなる
deno install
で--prompt
オプションがサポート
- 今までつけても無視されていた
- 通常はpromptを使わずに必要なものを列挙するが、
--net
で全部OKにしたくないときとか使えそう
Deno by exampleが公開
- 逆引き辞典のような立ち位置
- Denoに興味がある人の入門書
- HTTPサーバーのHello WorldページにはDeno Deployにデプロイするボタンもついてる
deployctl
の開発が再開
- 名前は同じだけど別物
- Deno Deployと互換の環境をローカルで提供するものが以前のもの
- DenoとDeno Deployが互換になったのでrunが必要なくなった
- 静的資材をDeno Deployに乗せるためのdeployコマンド
- フレームワークでビルドしたものをDeno Deployに載せられるように
- File System APIがDeno Deployで使える
- Deno Deploy上でreadFileって何するの?
- そのリポジトリ内のファイルを読む
- 取れるファイルを自分で制御したいときに使える
- コミットしてないファイルをDeno Deploy上で取れる
- Next.jsのSSGで吐き出したものをDeno Deploy上にホストできるようになる
- そろそろブログアナウンスも出ると思う
deno vendor
コマンドの提案
- Kitsonが提案した
- Denoキャッシュコマンドに近い
- venderというフォルダにキャッシュやimport_map.jsonを含める
- 背景としてはサードパーティモジュールGitのバージョン管理に含めたいというものがある
- ネットワーク環境が限られている
- Deno Deployにデプロイするときに常にバージョンを固定したい
- 安定したビルドをしたいというモチベーション?
- 社内では賛否両論な感じ
Denoからwindow
変数を削除する提案
- IssueをあげているのはRyan
- Nodeとブラウザ両方向きのライブラリがあって、window変数ありなしで分岐するのでおかしくなる
- Node Compatだとwindowがあることで不都合が生じる
- Node+Denoなので、分岐のときにブラウザに向いてしまう
- Web互換観点だとできるだけ外したくないが、Node互換観点だと外したい
- window変数使っているところもあるので、これをすると壊れてしまうので、デメリットはそれなりにある
- 消える可能性は無きにしもあらず
- globalThisという言語標準があるので、ユーザーはこれを使うのが安全
deno_std/testing
への改善提案
- Jestライクなアサーションの提供
- Issueには好意的反応多め
- 懸念を持っているメンバーもいるので、実現するのかはわからない
- Mochaポリフィルの追加
- Deno.testのsub-steps APIが安定化したので、それをベースにして
- 標準ではなく見た目だけが変わるものがあるのはどうなんだ? という論調の人が多そうなのでCloseされた
- bertekさんが以前同じようなIssueを上げていたが、あまり好意的ではなさそうだった
- これはやるとしてもサードパーティがやることになりそう
denoland/ga
- denoland公式サイトで入れているか入れている作業をしてるかという塩梅
- これはサーバーサイドでやったほうがパフォーマンスよかったりする?
- どうなんですかね?
- GAはスクリプトタグ埋め込み
- 開発モチベーションはよくわからない
Astrodon
- RustのTauriとFFIをベースにしたDenoデスクトップアプリフレームワーク
- TauriがDenoサポートする話が出ていた
- Denoの公式DiscussionにGUIやりたい話はある
- Denoチームもやろうとしたが、優先度が下がった結果進んでない(DenoコアチームがTauriやってないので)
- これはコアチーム関係ないサードパーティ
- deno_desktopがこれに近しいものをやろうとしてた
- まだできたばっかりみたいでTODOそんなに埋まってない
- Macサポートもまだ
- Denoに対応したGUIライブラリだとgraffitiがある
アフタートーク
Denoばた噂話
- Jamie KyleさんがRome Tools社のCTOをやめたけど、Lucaさんが誘うことを提案して社内がザワザワした
Deno Land社の資金調達
- 投資家に事業計画を説明して調達している
- 収益化の事業計画は今のところDeno Deployのみ
- Deno Deployは今後有料化していく(無料枠はある)
- スタートアップの世界は事業計画を有望だと思った人が出す取引をするものなので、今年有料化して数年後有望そうだったらまた調達という感じになる
- スタートアップは会社の仮の価格を決めている
- 仮に50億の場合、10%の株を渡すので5億受け取るという感じ
- 調達は1回では終わらず、3〜4回する
- そこまで行けば上手く行っている企業なので、上場
- 上手くいかなければ、売却など
メンバーページのijeさんだけProduct Enginerになってるけど、なに?
- 会社内で特に役割を決めているわけではない
- Deno Deployに注力する人という意味かも
esm.shってDeno Land社に関係あるの?
- ijeさん個人のもの
- 寄付受付もないので、持続するか不安がある
- 今のところDeno Land社としてメンテする計画はない
- 動かないモジュールもあって、それをどう解決するかが公式化しづらい課題
- 全部動くというのはないという可能性がある
- esm.shで書いたものがテストちゃんと通るのか? と考えるとキリがない
- DenoでメンテするならRustにすると思う
- Goなのはesbuild使いたいかららしい
- SWCに置き換えればRustでもいける
- DenoでやるとしたらNodeモジュールを読み込む仕組みを本体に作るほうがよさそう
Denoチームのなかでbunというツールが注目されている
- PostCSSやBabel、Node.jsやWebpackが一つになったようなツール
- Romeのようなもの
- ランタイムとしての機能を持っている
- Zigで書かれている
- アーリーアクセス中で、公式Discordに参加すれば使えるっぽい
- オープンソースになっているわけではない
- 内部実装がZigなので、Denoでは使えないみたい
- Zig自体がCの置き換えを狙った言語でCの呼び出しとか使えるらしいので、CのFFIを使えばRustからは使えるかもしれない
参考資料
上記をまとめる際に眺め、かつ箇条書きの中に含められなかった資料です。
名前だけ掠ってて関係ない資料もあるかと思いますが、まとめる作業の可視化として残しています。
読まなくて大丈夫です。
- tsconfig.jsonはJSONじゃないと言う話 - 焼売飯店
- Editing JSON with Visual Studio Code #JSON with Comments
- What is JSONC? Are JSONC and JSON-C different?
- Deno 1.13.0 がリリースされたので新機能や変更点の紹介 #16. [WebSocketStream] API の実験的実装
- WebSocketStream:ストリームをWebSocket APIと統合する
- Streams API - MDN
- Facebookが実験的なJavaScriptツールチェーンであるRomeを発表
- Announcing Rome Tools, Inc.
- Zig 言語を触ってみる
- Node.jsとDenoをそれぞれ検出する方法 with globalThis