Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Deno のこれまでとこれから / Deno JSConf JP 2021

Deno のこれまでとこれから / Deno JSConf JP 2021

Deno のこれまでの歩みと、これからのロードマップについて JSConf JP 2021 で発表しました。

Avatar for Yoshiya Hinosawa

Yoshiya Hinosawa

November 27, 2021

More Decks by Yoshiya Hinosawa

Other Decks in Programming

Transcript

  1. 話す人 日野澤歓也 twitter @kt3k GREE (2012 - 2013) Recruit (2015

    - 2019) Deno Land (2021 -) 2018 年から Deno にコントリビュート を開始。2020 年作者に誘われ Deno Land に転職。現在はフルタイムで Deno と Deno Deploy を開 発中。 Deno @ JSConf JP 2021 - 3 / 58
  2. 「Node.js について後悔している10 の事」 Node.js の作者 Ryan Dahl が Node.js の現状のデ

    ザインについて、今の視点からみて後悔している7 つの事を発表 それを克服する新しい処理系として Deno プロジェ クトを提案 Deno @ JSConf JP 2021 - 8 / 58
  3. 7 つの後悔 後悔1: Promise を使わなかった 後悔2: Security Sandbox を使わなかった 後悔3:

    GYP を使い続けてしまった 後悔4: package.json 後悔5: node_modules 後悔6: モジュール解決時の拡張子省略 後悔7: index.js Node.js の「あたりまえ」を否定 Deno @ JSConf JP 2021 - 9 / 58
  4. 対案としての Deno 、そのゴール 1. セキュリティ 2. ES Module 3. TypeScript

    ビルトイン 4. 単体の実行ファイルで動く 5. モダンな開発環境を使う 6. 可能な限り Web 互換 などの目標が掲げられた Deno @ JSConf JP 2021 - 10 / 58
  5. Web 互換性 Deno に実装されている Web API の例 http client -

    fetch API バイナリ処理 - TypedArray API (Uint8Array, etc) ストリーミング処理 - Web Stream API URL parse - URL API PubSub - EventTarget API Deno @ JSConf JP 2021 - 18 / 58
  6. Web 互換性 Deno に実装されている Web API の例 暗号 - Web

    Crypto API GPU - WebGPU http server - Request, Response API データ保存 - Web Storage API Deno @ JSConf JP 2021 - 19 / 58
  7. Web 互換性 - 最近の進捗 - WPT 2021 年1 月 Web

    Platform テストを CI に導入 Web Platform Test = ブラウザが共通で通している Web API のテストスイート コミット毎に Web 互換性をチェックするように Deno @ JSConf JP 2021 - 20 / 58
  8. Web 互換性 - 最近の進捗 - MDN 2021 年8 月 MDN

    への掲載が始まる Deno @ JSConf JP 2021 - 21 / 58
  9. TypeScript サポート TypeScript をそのまま実行できる。 // sample.ts const res = await

    fetch("https://example.com") console.log(res.body.text); $ deno run sample.ts Check file:///Users/kt3k/sample.ts error: TS2531 [ERROR]: Object is possibly 'null'. console.log(res.body.text); ~~~~~~~~ ↑ 実行時エラーではなく型エラー Deno @ JSConf JP 2021 - 23 / 58
  10. TypeScript サポート - 最近の進捗 2020 年8 月 deno lsp コマンドの導入

    VSCode とシームレスな連携 & Deno 固有な型情報 の補完が出来るように Deno @ JSConf JP 2021 - 24 / 58
  11. サンドボックスセキュリティ 前提の話 Deno は内部的に V8 エンジンを使っている。 ブラウザ上で JavaScript を安全に実行するため、 V8

    エンジンの実行環境は厳格にサンドボックス化 されている。 => V8 の外に影響を及ぼせないようになっている Deno @ JSConf JP 2021 - 27 / 58
  12. サンドボックスセキュリティ ・ ・ ・ Net Timer FS User’s script opcall_async

    opcall_sync Rust V8 Sandbox V8 Deno Check permissions Deno @ JSConf JP 2021 - 28 / 58
  13. サンドボックスセキュリティ V8 Sandbox から出て runtime の機能を使う際に opcallSync / opcallAsync という関数を必ず通るデ

    ザインになっている その際に使おうとしてる機能に即したパーミッショ ンを持っているかどうかをチェックする Deno @ JSConf JP 2021 - 29 / 58
  14. サンドボックスセキュリティ 7 種類のパーミッションがあり、コマンドライン引 数で渡す --allow-read ファイル読み取り --allow-write ファイル書き込み --allow-net ネットワーク

    --allow-env 環境変数読み取り --allow-run プロセス実行 --allow-ffi ネイティブ拡張の使用を許可 --allow-hrtime 高精度タイマーの使用を許可 Deno @ JSConf JP 2021 - 30 / 58
  15. Node.js 互換性をなぜやるか Deno は自体は良く出来ているが、Node.js と違い すぎるため使えないという意見が多い 実際 Deno の新規インストール数は、横ばい気味 Node.js

    互換性を導入すればユーザー数が増える可 能性がある Node.js と互換性がないのは意図的なデザインであ ったはず・・・ Deno @ JSConf JP 2021 - 44 / 58
  16. Node.js 互換性をなぜやるか Deno は自体は良く出来ているが、Node.js と違い すぎるため使えないという意見が多い 実際 Deno の新規インストール数は、横ばい気味 Node.js

    互換性を導入すればユーザー数が増える可 能性がある Node.js と互換性がないのは意図的なデザインであ ったはず・・・ Node.js 互換性を巡って社内・コミュニティ内でも混 乱状態に Deno @ JSConf JP 2021 - 45 / 58
  17. Chicken and Egg problem ユーザーが増えればソフトが増える ソフトが増えればユーザーが増える どっちが先に増える? => そのままではどちらも急には増えない =>

    この状況に陥ったまま消えたプラットフォームは多 い => まさに Deno が今直面している状況 ( と Deno チー ムは考えました) Deno @ JSConf JP 2021 - 52 / 58
  18. Chicken and Egg problem この問題を解決する方法が、前プラットフォームと の互換性をとること 例. Windows 3.x Windows

    1.0, 2.0 は流行らなかった 3.0 で DOS platform との互換性をとったため、 使えるソフトが一気に増えて流行った 例. Windows 95 Windows 3.x 系との互換性に異常に拘って実装 結果最初から使えるソフトが多かった Deno @ JSConf JP 2021 - 53 / 58
  19. Chicken and Egg problem Node.js 互換性で Chicken and Egg problem

    を解 決できるのではないか? Deno @ JSConf JP 2021 - 54 / 58
  20. まとめ Deno は " 改良版" Node.js を目指すプロジェクト Deno はこれまで Web

    互換性、セキュリティ、 TypeScript サポートに力を入れてきて、一定の成果 をあげた Deno はこれから Node.js 互換性に力を入れる Deno @ JSConf JP 2021 - 57 / 58