Denoばた会議 Monthly 第9回
2022年5月22日開催。
connpassリンク。
今月のアップデートを追う
Denoのアップデートを追っていくLT。
そのあとの雑談込みでザックリと箇条書き。
Deno v1.22
deno lsp
でリントがデフォルトで有効化deno test
でテストレポートの出力が改善 (Uncaught errorの出力など)Deno.resolveDns()
でNSやSOAレコードなどの問い合わせがサポートperformance.timeOrigin
やperformance.toJSON
,navigator.userAgent
などのAPIがサポート
リモートモジュールの型チェックがデフォルトで無効化
deno run
やdeno test
などの各コマンドでリモートモジュールの型チェックがデフォルトで無効化- もしリモートモジュールの型チェックが必要な際は、
--check=all
オプションまたはdeno check --remote
コマンドを使用する必要がある - 次のv1.23のリリースでdeno runやdeno cacheコマンドの型チェックがローカルを含めてデフォルトで無効化される予定
- CIで
deno run
やdeno cache
などのコマンドを実行して型チェックをされている場合は、今のうちにdeno check
などに移行しておくと安全
- CIで
- わかりやすい表
- どういうときにリモート型エラーが起きるか
- 古いDenoモジュールが新しいバージョンの仕様追加で食い違ったとき
- Webサイト作るときにDOM型定義を利用するとき
- リモート型エラーになったときは
--no-check
で回避する - ユーザーインタビューでもそういう利用が多かった
- デフォルトの型チェックはあっても意味がないのでは? という論調が強くなった
- なんでローカルも外すのか
deno check
に分業されたので、型チェックはそっちでやってねという感じになってきた- エディタで型エラーが見えている
- エディタとCIの二段構えで確認すれば充分では?
- runの副作用で型チェックすると速度が遅くなる
- runは速さにフォーカスしたほうがいいのでは? という意見
- 外すかどうかは議論中なので、まだ確定ではない
- 次のバージョンリリースまでに大きな反対がなければ入る
- 出た当初から熱量高く反対意見もあったので、出ない可能性もある
設定ファイルの自動探索の無効化
--no-config
オプションがサポートdeno.json(c)
の自動的な探索を無効化できる- 今まで自動読み込みを防ぐ手段がなく、不要な型チェックエラーが起きていた
deno.json
にDOM型定義を追加してフロント向けの開発をしているときにCLIを叩くと、勝手にdeno.json
を読んで型エラーが起きるという不都合が解決される
Worker内でデフォルトでDeno APIが有効化
- 今までは、
deno
オプションのnamespace
をtrue
にする必要があった --unstable
も必要なくなる- Web Workerはブラウザ互換で動くべきという主張があって、今までオプションで対応していた
- でもやっぱDenoネームスペースあったほうが便利だな、ってなったので有効化になった
- Web Workerは別スレッドで実行されるので、マルチコアな開発をする人に便利
- denops.vimはWorkerを多用してるらしい
Deno.emit()
の削除
- 破壊的変更
- Deno公式で
denoland/deno_emit
という代替モジュールが公開されているDeno.emit()
の機能はまだカバーしきれていない- だんだんとカバーしていく
Deno.emit()
を使用されている場合は、そちらへ移行できる- 消したモチベーション
Deno.emit()
の利用が広がっている- しかし、本来考慮している範囲を超えている
- Denoのトランスパイルを外部公開する意図だった
- そのため、フロント側は範疇外だった
- それによるバグは公式が想定しておらず、対処しきれない
- Ryanさんは昔から消そうとしてた
- 今回も議題に出して、せめて代替ツール作ってから消そうとKitsonさんが提案
- 代替ツール作ったらって言って消せないパターンがあるしそれではいつまで経っても消せない、とRyanさんが削除を押し通した
Deno.bundle()
も同じような状況なので、依存しすぎはよくないかも
サブプロセスAPIのアップデート
- 破壊的変更
AbortSignal
のサポートChildStatus.signal
が数値から文字列へ変更AbortSignal
で止めるというのはNode.jsでも入ってて流行りな感があるDeno.spawnChild
が出すstatus.signal
は内部的には数値だったDeno.addSignalListener()
のほうは文字列- 一貫してないという指摘があり、文字列に統一された
Response.json()がサポート
application/json
形式のレスポンスを簡易的に作成できる- ヘッダーのカスタマイズもできる
- 新しいWebの仕様
- Web標準のResponseオブジェクトに
.json()
が生えた - Deno本体実装にある『Webの仕様を追いました』パターン
- Lucaさんが仕様自体を提案して、Chromeにも提案した
- LucaさんがChromeにもDenoにも実装した
deno_std v0.139.0
encoding/jsonc
- JSONCパーサの実装
- ayame113さんが実装
- 404の膨大なファイル追加
- JSONTestSuiteに対応している
- JSONCは仕様が決まってない
- コメントはオプショナルになっている
- JSON5というJSONの形式があり、仕様があるものの複雑
Denoの動向
deno.json(c)でのパーミッションの宣言
- PRが作成されている
- どういうのを許可するか
- すでにあるパーミッションを
permissions
オブジェクトに記述していく deno.json
に書けるパーミッションは一つだけだけど、それでいいのか?tasks
のコマンドをオブジェクト形式にして、そこに書くという考えもある(Velociraptorっぽい感じ)
- すでにあるパーミッションを
WASMモジュールのimport
- PRが作成されている
- PRの中身は仕様に沿ったものらしい
- 今まではfetchで呼び出す、文字列で持つなど効率が悪かった
- バイナリのWASMをそのまま呼び出せるので、WASMの使いやすさがだいぶ上がる
SQLiteバインディング
- 正式に入るかどうかはまだわからない
- PRが作成されている
- Web SQLという消えた仕様を思い出す
- SQLiteブームが昨今ある
- LiteStream
- Cloudflare D1
- その流れで作られた感じがある
- divyさんという17歳の期待の新人インターンさんが実装してる
- インターンで入られたcrowlKatsさんも20歳くらいなので、Deno社の平均年齢が一気に下がった
deno_stdへのdeno-sqliteの追加
- PRが作成されている
- こちらも正式に入るかは不明
- SQLiteと一緒にRedisも入れる案があり、進行していた
- MongoDBメンテしてる人からやめたほうがいいんじゃない? って意見がきた
- CTOからも反対意見がきて、内部的にRyanさんも同意見
- CEOとCTOから反対意見が出ているので実装難しいかも
- V言語のドライバーだとSQLiteなどがある
- Go言語だと特定のソフトウェアに依存しないSQLへの対応がある
- Denoは今のところ特定のソフトウェアに依存したものはなさそう
WinterCGの立ち上げ
- 正式名称はWeb-interoperable Runtimes Community Group(Web相互運用可能なランタイムコミュニティグループ )
- DenoやNode.js、Cloudflare Workersなどの非ブラウザ上で動作する各種JavaScriptランタイムの相互運用性の向上を目的としたコミュニティグループ
- 議論の内容やドキュメントなどはGitHub上で公開されている
- DenoのLucaさんとCloudflare(かつNodeコントリビューター)のJamesさんの二人で話をしていて、それがWGになった
- ある程度公式的な力があるWG
- fetchは答えなのか、という疑問に回答できるかもしれない
denoland/deno_blog
- これでDeno Deployで動作するブログが作れるよう
- Ryanさんのブログはこれに移行した
- なんでこれを作ったのか
- 4つの実用系のものを作るプロジェクトが社内である
- ブログやチャット、ショップやカレンダーが進行中
- アプリとして使えるものを作っている
- 第2四半期のときに急に発表して急にエンジニアが4チームに分けられて急にアサインされたらしい
- Deno本体かDeployかに分かれてフルタイムでやっていて、そこに実用プロジェクトが加わった感じ
- kt3kさんはカレンダー担当だけど実質的に実装が1人なので、少し遅れてる
- ショップのチャットに動きがないので出ないかも
RemixがDenoを公式でサポート
- Remix v1.5.0でDenoの公式サポートが発表
- 依存関係周りがリリースノートに細かく書かれているので、興味ある人は読んでみるといいかも
Aleph.jsのアップデート
- v1.0.0-alpha.42でVue.jsサポートが強化(作例)
- Vue3でも出た
<script setup>
も書ける
- Vue3でも出た
- Yewの使用例が追加(作例)
- サーバーの挙動をAleph.jsが細かく設定できる
- htmlマクロでJSXみたいに書ける
Deno Newsが再開
- メールやRSSフィードなどで購読できるよう
- bartekさんが今までメンテしてたけど忙しくなって更新が途絶えていた
- マーケティング担当のAndyさんが引き継いでいる
- 毎週更新される
質問や共有コーナー
- vite 導入した時の拡張みたいにテキストファイルを importで読めるようにならないか
- 今のところ検討はされていない
- 別のツールで対応するしかなさそう
- DenoでIMEのユーザー辞書ファイル生成モジュールを作っているという共有
- bIdというサードパーティモジュール
- Google日本語入力やMicrosoft IMEなど、複数のIMEの書式に合わせたユーザー辞書を統一的に作成することを目的としている
- 日本国内のIMEユーザー辞書ファイルの他、海外のものにも対応したいので、要望出してくれると嬉しい
- 翻訳ページが非推奨扱いになったのか気になっている
- フランス語版が404になった
- 他の翻訳版でもバージョンに追いきれていない
- 公式では対応しきれない
- 頻繁に更新しているCentral Kurdishや简体中文だけ残す案もあったが、却下になった
- サードパーティとして翻訳してくれるのは問題ないけど、公式からリンクが消えるという話
performance.timeOrigin
がv1.22で導入されて高精度タイムスタンプが取れるようになったとリリースノートにあるが、高精度タイムスタンプの取得には実行時オプションが必要で、そこの整合性はどうなっているのか- パーミッションがなければ丸め、あれば高精度なものを返す
- deno replは全権限を持っているので高精度になる
- 趣味でAPIの認証部分をDenoで書いている話
- リポジトリは作っておらず、テストタイピング
- 技術記事として公開している
- サイズとしては結構小さめにできた