
DenoはNode.jsの生みの親であるRyan Dahl氏が、自らの反省点を踏まえて2018年に発表したJavaScript/TypeScript実行環境です。彼は2018年のJSConf EUでの講演「Node.jsに関する10の反省」で、モジュールシステムやセキュリティ設計の課題を率直に語り、それらをやり直すための新しいランタイムとしてDenoを位置づけました。本体はRustで書かれ、エンジンにV8を採用し、TypeScriptを標準でそのまま実行できるという思い切った設計を選んでいます。近年は2022年公開のDeno Deployや、Node.js互換レイヤーの強化により、用途の幅を急速に広げてきました。
この記事の目次
- Node.jsへの反省から生まれた思想
- セキュリティとパーミッションモデル
- TypeScript標準とモジュール解決
- Node.js互換への現実的な路線変更
- まとめ
Node.jsへの反省から生まれた思想

Ryan Dahl氏が公の場で語ったNode.jsの後悔は多岐に渡ります。package.jsonとnode_modulesによる依存解決の複雑さ、ファイルやネットワークへの無条件アクセス、GYPによるネイティブビルドの煩雑さ、Promiseに完全に乗り切れなかった初期設計など、Node.jsが2009年代の制約のなかで選ばざるを得なかった妥協が、十年を経て負債として顕在化していたのです。
Denoはそれらを白紙から見直し、URLによるモジュールインポート、デフォルトで権限なしのサンドボックス実行、標準ライブラリのファーストパーティ提供、Promise/async中心のAPI設計といった選択を一気に採り入れました。これらは個々の便利機能というより、ランタイムの根底にある世界観の刷新であり、Denoを単なるNode.jsクローンとは異質な存在として性格づけています。
セキュリティとパーミッションモデル

Denoの中核的な特徴は、明示的に許可しない限りファイル、ネットワーク、環境変数へアクセスできない点にあります。deno run script.tsだけでは外部リソースに触れず、--allow-readや--allow-netといったフラグで必要な権限だけを開放していく設計です。これはブラウザのサンドボックスに近い発想で、悪意あるnpmパッケージが任意のファイルを読み出すといった事故を構造的に防ぎやすくなります。
また、Denoはモジュールを単一の実行ファイルにバンドルするdeno compileを備え、配布バイナリを作る際にも実行時パーミッションを焼き込めます。サーバアプリやCLIツールを最小権限で配布したい場面では、この権限モデルが運用上の安心材料になり、セキュリティ要件の厳しい企業ユースでもDenoが選ばれる理由となっています。
TypeScript標準とモジュール解決

DenoはTypeScriptファイルを設定ファイルなしで直接実行できる、数少ないランタイムです。内部に組み込まれたコンパイラがトランスパイルと型チェックを担い、開発者はtsconfig.jsonの細部に悩むことなく型付きコードをそのまま動かせます。標準ライブラリもTypeScriptで書かれており、言語と処理系が一体となって設計されている印象を強く受けるでしょう。
モジュール解決はURLベースで、import { serve } from 'https://deno.land/std/http/server.ts'のように外部から直接インポートできます。これによりnode_modulesを必要としない代わりに、依存のバージョン固定にはdeno.lockやimport mapsを使う発想に切り替わります。2023年以降はJSR(JavaScript Registry)が登場し、URLインポートとパッケージレジストリの良いとこ取りを目指す動きも進んでいます。
Node.js互換への現実的な路線変更

初期のDenoはNode.jsとの非互換を厭わず、独自路線を強く打ち出していました。しかし現実には膨大なnpmパッケージ資産があり、それらを完全に切り捨ててはエコシステムが育ちにくい、という認識から2022年以降はnpm:プロトコルやnode:組み込みモジュールの段階的サポートが追加されました。結果として、ExpressやPrismaといった既存ライブラリも条件付きでDeno上で動くようになっています。
この互換路線への舵切りは、思想を曲げたのではなく、現場で使われるための実利的な判断と捉えるのが妥当です。Denoはサーバレス基盤Deno DeployやFreshフレームワークなど、エッジ寄りのユースケースで強みを発揮しており、Cloudflare WorkersやBunとの三つ巴で「次世代JavaScript実行環境」の市場を作りつつあります。Node.jsとの違いを理解した上で、Denoの世界観に合う領域を選んで採用するのが賢明です。
まとめ
DenoはNode.jsの作者自身が再設計を試みた処理系であり、TypeScript標準・URLインポート・パーミッションモデルといった尖った設計を備えています。近年はNode.js互換性も大幅に強化され、エッジコンピューティングやセキュア配布の文脈で実利を生みやすい選択肢になりました。Bunとは異なるアプローチで同じ課題に挑む存在として、思想ごと理解して使い分けたいランタイムです。
※本記事はIT用語辞典の手書きドラフトです。公開前に最新情報・出典を確認のうえ加筆修正してください。

コメント