こちらのイベントに参加した
内容は JavaScriptの3つの有名なRuntime(Node.js、Deno、Bun)の違いについて @furukawa さんが説明するというもの
Node.js が古いという認識はなく、現場ではまだまだ採用するRuntimeだと思うが、 DenoやBun との違いを聞かれた時に自分の中で明確にできていればと思い参加した
ありがたいことに資料が公開されている
最初は「Runtimeとは何か?」の説明で、自分も雰囲気で使っていた「Runtime」という言葉が実際「定義は曖昧である」と古川さんの口から聞けてちょっと安心した
JavaScriptでは言語のコア仕様とサーバ用途で利用する機能群を構成したものをJavaScript ランタイムと呼んでいるとのこと(それがNode.jsであり、Denoであり、Bun)
具体的には、JavaScript エンジン、Runtime、およびその他の機能で構成される
- JavaScript エンジン: JavaScript コードを解釈し、実行する役割を担う
- Runtime ファイルシステムへのアクセス、ネットワーク操作、DOM操作など、様々な機能を提供
Node.js、Deno、Bun の比較と相互関係
Node.js、Deno、Bun は、いずれも JavaScript を実行するための環境だが、それぞれ特徴や利点、相互関係に違いがある
Node.js
特徴
- JavaScript をサーバーサイドで実行するために開発された
- npm を通じて膨大なパッケージを利用でき、大規模なコミュニティとエコシステムを持つ点が強み
利点
- 長年の利用実績と豊富なライブラリにより、多くの開発者にとって馴染みやすく、Web アプリケーション開発など幅広い用途で利用されている
体制
相互関係
- Deno は Node.js の作者が開発しており、Node.js の抱える問題点を解決することを目指している
- Bun は Node.js との高い互換性を持ちつつ、より高いパフォーマンスを目指している
Deno
特徴
- セキュリティとパフォーマンスに重点を置いて開発
- TypeScript のネイティブサポート、組み込みのセキュリティサンドボックス、依存関係の管理などを特徴としている
利点
- Node.js に比べてセキュリティ面やパフォーマンス面で優れており、モダンな JavaScript 開発に適している
- Deno Fresh などのフレームワークも登場し、開発体験の向上も期待されている
体制
- リーダー:Ryan Dahl氏
- OSS開発者とDeno Compnayでの会社開発のハイブリッド
- コミュニティとコアチームと商用支援(Deno Deploy)チームの三位一体
相互関係
- Node.js の問題点であるセキュリティやモジュールシステムの複雑さを改善することを目指している
- JSR (JavaScript Registry) を採用し、npm とは異なるパッケージ管理システムを採用している
Bun
特徴:
- パフォーマンスを重視して開発
- JavaScriptCore エンジンを採用し、Zig プログラミング言語で開発されているため、高速な実行速度を実現している
利点
- Node.js や Deno と比較して非常に高速に動作し、特に I/O やネットワーク処理が高速であるとされている
体制
- リーダー:Jarred Summer氏
- Bunをfull timeで開発し、ホスティング環境などを作ってJS開発体験を向上させる名目でOvenという会社も立ち上げている
- OSS Contiributors + oven社のハイブリット体制
- マネタイズは不明
相互関係
- Node.js との互換性を重視しており、既存の npm パッケージを利用できるように努めている
- Web API の標準化を目指す WinterCG に参加表明はしていないが、Web API Inerop はできる範囲で進めている
まとめ
スライドのまとめに書いてあることだが
- Node.js は成熟したエコシステムと豊富なライブラリが強み
- Deno はセキュリティとモダンな開発体験を提供
- Bun は圧倒的なパフォーマンスを誇る
である
ただ、パフォーマンスを重視するからといってBunというわけでもなく、使いたい既存npmが使えるかどうかなど、使う場合は慎重に検討する必要がある
個人開発とかでは使ってみたい