Denoばた会議 Monthly 第19回
2023年5月12日開催。
connpassリンク。
今月のアップデートを追う
Denoのアップデートを追っていくLT。
そのあとの雑談込みでザックリと箇条書き。
Deno v1.33
静的解析可能なdynamic importで--allow-net
/--allow-read
が不要に
- 動的にURLが組まれているものは引き続き必要
Deno.serve
について
- h2c(HTTP/2での平文通信のこと)が実装されている
- Flashが削除され、hyper v1.0のRC版をベースにバックエンドがリライトされている
- 次のマイナーリリース(v1.34)で安定化される計画のよう
- HTTP/2の改善が進んでいる
- 安定化されれば
Deno.serve
で立てるのが定番になりそう
- 安定化されれば
deno.json(c)
のフラット化
- 以前は
lint.files.exclude
だったものがlint.exclude
になった - 他の
fmt
なども同じようにフラット化した - 古い形式は非推奨化されている
- 実行すると警告が出るはず
- 各オプションの中身を1つ上に書けるようになった
- 今までがネストしすぎていたので、よくあるツールの構成になってきた
- ESLintのフラット化というニュースがあった
- 全体的にフラット化するのが流行り?
Deno.run
の非推奨化
- 今後は
Deno.Command
の使用が推奨されている - 1.28頃に追加された
- Deno v2では消えるはずなので、早めの対応を
deno_stdのアップデート
非推奨化されたファイルの削除
- encoding配下の言語っぽいのがトップレベルに移動した
- こっちもある意味フラット化
- 元からDenoにはフラットを推奨する文化があったような気がする
- 移動しているだけで機能は変わらないので、パス変更で終わり
- 変更前の形式だとおかしいという派閥が盛り上がってしまい、そういう派閥も納得しつつ利用も損なわない結論にするのが大変だった
- Goは変更前の形式
encoding/csv
が始まりencoding/csv
はGoからの移植なので、形式もGoを踏襲していたencoding/yaml
やencoding/toml
がそれに続いた
削除されたファイル | 移行先 |
---|---|
std/encoding/front_matter/* |
std/front_matter/mod.ts |
std/encoding/jsonc.ts |
std/jsonc/mod.ts |
std/encoding/toml.ts |
std/toml/mod.ts |
std/encoding/yaml.ts |
std/yaml/mod.ts |
std/encoding/csv.ts |
std/csv/mod.ts |
std/encoding/csv/* |
std/csv/mod.ts |
std/encoding/json/stream.ts |
std/json/mod.ts |
std/fs
のexists
の非推奨化が解除
- 去年の4月頃からありすえさんが非推奨化しないほうがいいという議論をしていた
- 削除派と復活派の意見の食い違いが多く、議論が長引いた
- TOCTOUを私は気にしないというユーザーが多かった
- 私のユースケースではこれが必要だ、という声があった
- 食い違いが起きて議論の収拾がつかなかった
- とにかく要望されているから復活という特殊な流れで解除された
if
の条件としてexists
を使うやり方がよくあるが、これだとTOCTOUというデバックが難しい問題が出やすい- なんらかの別プロセスで該当ファイルが削除されたら処理が終わってしまう
try/catch
をしないことが多いので、意図しないパスに飛んでいく可能性が高い- Node.jsメインメンテナのBenさんから非推奨理由の話が出た
- Node.jsの経験から
exists
はTOCTOUが起きる方法でしか使われたことがないというのが根拠
- Node.jsの経験から
- 個人的には非推奨のほうがいい
- Node.jsでも同じ議論が起きた
- 同じように、非推奨化から非推奨解除という流れ
- Denoは同じ道を辿らないぞ、と思っていたが同じ道を辿った
fs.exists
はずっと非推奨がついてるfs.existsSync
は非推奨もついてない- これが落とし所だったのだろう
- 標準ライブラリをやってるとこういう議論が起きるので大変
その他の話題
Deno v2.0について
- 今年の夏頃にリリースが計画されているよう
- 2.0がかなり後ろ倒しになってる
- 本人含めて誰もわかってない
- いったんは夏としている
- そこに向けてロードマップが敷けているかというと微妙
- 最初に2.0を言い出したときは4月リリースだったが、5月となり夏となった
- Node Congress 2023のRyanさんの登壇で語られた
- Forced Optimizationというタイトル
- Denoは使いやすさやパフォーマンスについて最適化することにフォーカスしている
- Denoの方針に上乗せで、Denoの基本方針について説明している形
- 非同期のI/Oを入れてサーバーを建てられるというのがNode.jsの目標
- Denoはよりクラウドに適合したものを作りたいという
- 詳細は動画を観てください
Deno KV
- Deno v1.32で実装されたDeno KVが正式発表された
- Webページはhashrockさんが頑張って作った
- すごい苦労した
- ファーストビューの右に何を置くかを延々と議論してた
- 結局はシンプルめに
- よく見ると点滅しているので、注目してみてください
- 左の文言も書き直しまくってた
- JavaScript的ににわかりやすい設計になっていると思う
- Deno CLIに同じ形式のKVが生えているのでローカル開発もやりやすい
- Deno Deployに入っているKVを売り出したい
- ネイティブでデータストアがセットアップなしで使えると強い
- オープンソースというよりはDeno社として推したいという感じ
- Deployの分散データストアにはFoundationDBが使われている
- iPhoneユーザーなら使わされるiCloudの背後で使われているので、超大規模でも実績あるDBと言える
- KVなんだけどトランザクションがある
- checkに渡すObjectの中にタイムスタンプ(バージョン)があり、それがおかしい場合は処理が失敗する(楽観ロック)
- 整合をカスタマイズできる
- 強整合は最新のものをくれる
- 結果整合はちょっと遅れてもいいから返答をくれという場合
- 一番近くにあるDeno KVの同期が遅れている可能性があり、最新じゃない可能性がある
- 強整合でしか情報を登録してすぐに反映するときが使えない
- 明確にそこで差別化している
- 整合性の設定を切り替えると何%程度速度が変わるのか
- 結果整合で50ミリ秒、強整合で220ミリ秒
- ayame113さんの記事でも解説されている
- かなり合ってる
- D1はRDSなので、D1並の使い勝手はないはず
- D1よりDeno KVはレイテンシが早い
質問共有コーナー
Deno Deployのセキュリティ周りのところの情報ってどこか開示されてたりとかするでしょうか?
- 公式サイトにリソースアクセスについて書かれているが、DDoS攻撃などへの対策情報が見つからない
- 見つからないので、手前にCloudflareのWAFを置けないか調べている
- Deno DeployがGCP上に載っているのであれば、GCPのWAFが効いているのでは
- アプリ内でその手の機能を毎度作り込むのは手間なので、専門性の高いところは任せたいと思っている
- WAF的なことができないかという質問?
- IPとかみて勝手にシャットダウンしてくれるやつ
- 今の所ないような気がする
- ちょっと社内で聞いてみます
- Cloudflareはインターネットトラフィックの20%程度を捌いているらしいので、世の中でこういう攻撃が起こっているというはだいたいわかるらしい
- GCP上にDeno Deployがあるはずなので、GCPのWAFが使えれば良さそう
- ただWAFは高かった記憶
- Cloudflare Workersの価格帯で利益を出すのは相当難しいので、そこにWAFも加えるとなると厳しいのでは
- Cloudflare WorkersはWeb攻撃情報を手に入れるための利益度外視サービスな感じがしている
- DenoでWAFをやるとして、そこに追加費用が受け入れられるのであれば辻褄は合う
Cloudflareにyusukebeさんが入られた
- syumaiさんとyusukebeさんと中華料理屋に行ってたら教えてもらった
- Honoは業務として継続する
- 最初はCloudflare Workers向けのフレームワークだった
- 今はDenoやBunでも使える
- 比較に使うのに便利なので、ベンチマークとして活用されている
- Developer Advocateというロールで働く
- 他の業務がそこまで決まっているわけではない
- オーストラリアに引っ越す人がいて、同じタイムゾーンで働ける人がほしいという裏事情がある
- その人とタッグを組んで何かを作るのかも(Glenさん、WorkersやD1をやってる人)
- CloudflareなのでDenoとは競合になる
- CloudflareはFreshを持つDenoやNext.jsを持つVercelなどの競合と違って自前のフレームワークを持っていない
- そういう知見がある人がほしかったのかも?
- UltraのルータにHonoが使われている
- いくつかルータがある
- 巨大な正規表現を出すRegExpRouterが一番良かった
- RegExpRouterの高速化によりv3でStaticRouterが消えた
- v3リリース時点でのRegExpRouterは平均478.63ナノ秒でベンチマーク内だと最速
- HonoはNodeでも動くけど、それだとFastly Compute@Edgeに勝ててなかった
- バイト数が少ないルータもTwitterで公開してた
- ルートが少ないとチューニングがあまり意味をなさないから、有効かも
- Cloudflare Workersはデプロイ容量が1Mらしい
- v3のベンチマークにある
@medley/router
とは何者?- 最終コミットが4年前のルータライブラリ
- よく見つけたな、という感じ
- yusukebeさんはPerlさん界隈の人らしい
- Perlで掲示板作ったりCGI作ったりしてた
- Javaはエンタープライズすぎ、PHPはダサい言語でPerlはイケてる言語というのが共通見解の時代があった
- Perl界隈っていろんな言語に散り散りになってる
- yusukebeさんはJS界隈にきて、Honoの開発を始めた
ノルウェーに行く話
- 年3回会社メンバーと集まるoffsiteという会
- 6月末に行く
- インドの方は今回も来られない
- インド本国の方はビザが全然取れない
- 前回はインドに優しいビザ出してくれるセントルシアだった
- 計算違いがあって、インドの方は経由地のイギリスのビザが取れずに参加断念
- タイとインドネシアでも問題なかったんだけど、なんかセントルシアにしてた
- 次の候補地を探している最中
- 東京説もある
- パスポートダッシュボードを見る限りインドからは赤になってる
- 現地の人曰く、日本は比較的に行きやすいらしい
- とらのあなでリアルイベントできそうでは……?
toranoana.deno #12が5/17に開催されます!
- Edge DBのTursoをDenoで触る話だったり、Discord Botの話だったり
- ぜひお越しください
参考資料
上記をまとめる際に眺め、かつ箇条書きの中に含められなかった資料です。
名前だけ掠ってて関係ない資料もあるかと思いますが、まとめる作業の可視化として残しています。
読まなくて大丈夫です。
- HTTP/2? h2? h2c? って何? - 隙あらば寝る
- HTTP/2: ちょっと詳細: プロトコルネゴシエーション編 - Qiita
- RFC 7540 - Hypertext Transfer Protocol Version 2 (HTTP/2)
- Time of check to time of use - Wikipedia
- Flat Config導入完了! 新しいESLintの設定フォーマットを使ってみた
- The Official YAML Web Site
- TOML: 日本語 v1.0.0-rc.2
- fs.exists does not follow node conventions · Issue #8369 · nodejs/node-v0.x-archive
- fs: deprecate exists() and existsSync() by cjihrig · Pull Request #8418 · nodejs/node-v0.x-archive
- gripe: deprecating fs.exists/existsSync · Issue #1592 · nodejs/node
- sindresorhus/path-exists: Check if a path exists
- Tailwind CSS Jumbotron - Flowbite
- ヒーローイメージ(ヒーロー画像)とは 意味/解説 - シマウマ用語集
- yusukebe/pico: Ultra-tiny router for Cloudflare Workers and Deno
- Deno Deploy Subhosting
- Cloudflare Radar 2022 Year In Review
- Cisco Annual Internet Report(2018~2023 年)ホワイトペーパー - Cisco
- 総務省|令和元年版 情報通信白書|データトラフィックの拡大