
2026/05/22 20:23
# Deno バージョン 2.8 リリースのお知らせ JavaScript/TypeScript のランタイム「Deno」がバージョン 2.8 をリリースしました。今回のアップデートには、**主要な不具合の修正**と、開発効率を高めるための **新しい機能** が含まれています。 ## 📅 主な変更点 ### 1. ライブラリ管理システムの移行 * **旧 `Deno` のデフォルト動作変更**: 以前は `Deno` コマンド自体がパッケージマネージャーのように振る舞っていましたが、現在はより明確な役割分担になっています。 * **`deno add/upgrade/remove` の標準化**: これらのコマンドは現在、**`deno.land/x`** に登録されたライブラリを管理する唯一の正規手段です。 * `deno add foo/bar`: 新しいモジュールを追加。 * `deno upgrade all`: 依存関係を最新に更新。 * `deno remove foo/bar`: 不要なモジュールを削除。 ### 2. プログラムの起動オプション(Short Options) * コマンドラインでの設定が簡素化されました。 * **`--no-config` の省略**: 以前は `--no-config` というフラグが必要でしたが、現在は単に **`deno run foo.js`** と指定するだけで、デフォルトの環境下で動作します(明示的にコンフィグを無効化する場合は別オプションが必要)。 ```bash # これ以前の形式 deno run --no-config server.ts # 新しい簡易な形式 deno run server.ts ``` ### 3. エラーハンドリングの改善 * **エラーメッセージの明確化**: 構文エラーや型エラーが発生した際、どのファイルの何行目かをより正確に表示するようになります。 * これにより、**デバッグプロセスが大幅に高速化**されます。 ```typescript // エラー発生時に詳細なログが出力されるようになります function foo(x: number) { if (typeof x !== 'number') throw new Error("x is not a number"); } // 引数を渡す際、タイプヒント付きで正確な位置情報が表示されます ``` ### 4. その他修正と改善 * **セキュリティ脆弱性のパッチ**: 最新のセキュリティ基準に準拠した修正が含まれています。 * **パフォーマンスの微調整**: メモリ使用量を削減し、起動時間を若干短縮しました。
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
Deno 2.8 は、パフォーマンスと互換性の面で飛躍的な進歩を示し、以前 Node.js のテストのうち約 42% のみ合格していたという制限を解消し、新たな合格率が 76.4% に達しました。このバージョンでは V8 スレッドプールの最適化を通じて速度を大幅に優先しており、コールドな npm インストールが約 3.66 倍高速化するとともに、
node:http のスループットが 2 倍になりました。本更新は業界標準を採用することでエコシステムをつなぎ合わせ、未接頭辞の名前を npm: デフォルトとして扱い、pnpm の catalog: プロトコルを統合して正確なモノレポジトリのバージョン固定を実現しています。開発者は deno audit fix(自動アップグレード)、deno pack(バンドリング)、deno bump-version といった新しいツールによる workflows の簡素化に加え、Chrome DevTools インспекションおよび CPU プロファイリングを統合した改良されたデバッグ機能を得ます。極めて重要なのは、このリリースがインポート遅延(Import Defer)による非同期初期化や、ランタイムのカスタマイズのための Node 調の loader.registerHooks() を含む高度なモジュール読み込み機能を実装した点です。さらに、Deno は標準で TypeScript 6.0.3 と lib.node から来的なアンビエントタイプを含むようになり、.npmrc の拡張機能(相互 TLS 認証など)をサポートし、OpenTelemetry エクスプローターや帯域幅を約 87% 削減するデルト更新による深い観測可能性を提供します。この包括的な更新により、組み込みモジュール node:http、Web API OffscreenCanvas など安定したものの利用が可能となり、メモリフットプリントが低減され、Deno は現代の開発において堅牢な選択肢となっています。本文
Deno 2.8 リリースノート
Deno 2.8 が登場しました。これまでにない大きなマイナーバージョンアップであり、新しいサブコマンド、Node.js 互換性の劇的な向上、およびパフォーマンスの大幅な改善が特徴です。ぜひ皆さんにご紹介します。
インストール方法
アップグレード
すでに Deno がインストールされている場合は、以下のコマンドでアップデートを実行してください。
curl -fsSL https://deno.land/install.sh | sh
新規インストール
Deno をまだインストールしていない場合は、以下の中から選択してください。
- macOS (Homebrew):
brew install deno - Windows:
winget install denoland.deno - Linux: ご使用のディストリビューションのパッケージ管理ドキュメントを確認してください。
- 詳細は インストール方法の詳細 を参照。
新しいサブコマンド
Deno 2.8 では、開発効率を高めるための専用ツールが多数追加されました。
deno audit fix
(脆弱性の自動修正)
deno audit fix依存ツリーにある npm パッケージの脆弱性を報告し、影響を受けるパッケージを自動的にパッチ適用済みバージョンへアップグレードします (#32909, #34273)。
- メジャーバージョンのアップグレードが必要ない場合、完全に自動で修正可能です。
フラグと同様の動作を簡潔に行えます。deno audit --fix
実行例:
$ deno audit fix ╭─────────────────────────────────────────────┐ │ body-parser は URL エンコーディングが有効な場合に DoS に脆弱です │ ╰─────────────────────────────────────────────┘ ... (他の脆弱性の報告) 自動的に固定できた脆弱性: 1 つ body-parser 1.19.0 -> 1.20.3
deno bump-version
deno bump-version
または deno.json
の version フィールドを安全に更新します。package.json
- 基本的な増分:
,patch
,minor
,major
を指定可能です。prerelease - ワークスペース対応: 同一の増分をすべてのメンバーパッケージに適用し、
制約とインポートマップを同期します。jsr:version - Conventional Commits 自動検出: 増分引数が指定されていない場合、コミット履歴からバンプを自動で導出します。
- 範囲指定:
や--dry-run
を使い、比較範囲を指定できます。- start / --base
実行例:
$ deno bump-version patch $ deno bump-version --base=main
deno ci
deno ciCI スクリプトや Dockerfile の設定を簡素化する専用コマンドです。「ロックファイルに従って正確にインストールする」ことを保証します。
が存在しない場合、エラーを発生させます。deno.lock- 既存の
を自動的に削除します。node_modules - インストールを
フラグで実行し、設定ファイルと完全な一致を確認します。--frozen
これにより、CI ステップや Dockerfile にフラグを考える手間がなくなり、「再現性のあるインストール」を担保できます。
deno pack
deno pack単独の
npm pack よりも機能豊富なコマンドです。1 回の呼び出しで Deno または JSR プロジェクトを npm 公開用のタールアーカイブ に構築します (#32139)。
- 生成されるタールアーカイブには、
設定、条件付きエクスポート、抽出されたランタイム依存関係が含まれます。type: module - TypeScript を JavaScript に変換し、
宣言ファイルを抽出します。.d.ts
とREADME
ファイルを自動的に含めます。LICENSE- スコープ置換:
→jsr:@std/path
など、npm エコシステムで動作するように仕様が書き換えられます。@jsr/std__path
実行例:
$ deno pack $ deno pack --dry-run $ deno pack --set-version 2.0.0 $ deno pack --output my-package.tgz
deno transpile
deno transpileTypeScript、JSX、TSX から型を除去し、単純な JavaScript を出力します。バンドルや設定は一切不要でエミットステップのみです。
- オプション:
,--outdir
,--source-map separate|inline
に対応。--declaration - Node 標準ライブラリをサポートしないランタイムへコンパイルする場合に役立ちます。
deno why
deno why指定されたパッケージが、依存ツリー内での位置や理由を可視化します (#32908)。
- npm および JSR 混在対応: 両方のレジストリを使用しているプロジェクトでも透過的依存関係を追跡し、エントリポイントまで辿ります。
やpnpm why
と同等の機能をネイティブで提供します。npm explain
deno import defer
(TC39 準拠)
deno import deferTC39 import defer 提案をサポートします。モジュールをパースは行うが、実行を遅延し、エクスポートへの最初のアクセス時に評価する仕組みです。
- 起動時間の削減: 高価な初期化処理を行うモジュールのロードを遅延できます。
- 動的インポート対応:
を使用して、実際に利用するブランチのみを評価できます。import.defer()
/.ts
ファイルでも動作し、LSP と互換性があります。.tsx
例:
// deferred.ts (実行はここから開始) export const value = 42; // main.ts の import を通じて触れるまで評価されない
デフォルトの変更点
Deno がデフォルトで npm を使用
Deno 2.8 では、CLI で
npm: プレフィックスを使用することを必須要件から撤廃しました (#33246)。
- デフォルト動作: コマンドラインでパッケージ名を指定する際、未プレフィックス化された名前はデフォルトで npm パッケージとして扱われます。
$ deno add express # 自動的に npm:express を追加
プレフィックスは引き続き動作しますが、TypeScript のインポート仕様に従うため必須です。npm:- JSR パッケージは
プレフィックスを維持するため、レジストリが明確に区別されます。jsr:
TypeScript 6.0.3 への更新
バンドルされた TypeScript コンパイラは 6.0.3 に更新されました (#32944)。TypeScript チームの移行リリースとして、breaking changes や廃止事項が含まれる場合があります。
lib.node
がデフォルトで含まれる
lib.node
および LSP は、今や deno check
を型チェックにデフォルトで含みます (#33823)。lib.node
- 以前は
にdeno.json
を追加するか、"node"
を記述する必要がありました。/// <reference types="node" /> - 今や NodeJS.*、Buffer、process などのアンビエントタイプを自動的に解決可能です。
- 注意点: ブラウザ用コードにおいて
などを使用するとエラーになるため、ブラウザターゲットの場合はNodeJS.Timeout
などのルールの有効化が必要です。no-process-global
デバッグ機能の向上
Chrome DevTools が今や Deno のネットワークトラフィックを検証できます。
を指定して実行し、Chromium で chrome://inspect から接続すると、すべての--inspect-wait
、fetch()
クライアントリクエスト、WebSockets (Deno.upgradeWebSocket()) を表示可能です。node:http- リクエストとレスポンスのヘッダー、ステータスコード、本體などを詳細に確認できます。
OpenTelemetry の強化
内蔵 OpenTelemetry 統合に gRPC エクスポーター と 権限監査ログ を追加しました (#32501)。
- 権限チェックの結果を OTel ログイベントとして直接エクスポートし、予期せぬファイルやネットワークアクセスを検知できます。
$ OTEL_DENO=true DENO_AUDIT_PERMISSIONS=otel deno run -A main.ts
CPU プロファイリング
Node の
--cpu-prof フラグに対応する内蔵プロファイラーを追加しました (#31909)。
- 標準出力:
を生成します(Chrome DevTools で開く)。.cpuprofile - Flamegraph:
オプションで、自己完結型インタラクティブ SVG を出力可能。--cpu-prof-flamegraph - Markdown レポート:
オプションで、人間が読みやすいレポートを出力可能。--cpu-prof-md
パフォーマンスの向上
Deno 2.8 はパッケージマネージャー、Node.js 互換性、HTTP サービングなどあらゆる面で劇的なスピードアップを果たしました (#34235)。Linux 環境での主要な改善点は以下の通りです。
| メトリック | 改善率 | 詳細 |
|---|---|---|
| Cold npm install | 3.66 倍高速 | Fresh で測定 |
| node:http throughput | 2.21 倍高速 | 8,339 req/s → 18,431 req/s |
| Base64 エンコード/デコード | 3.07 倍高速 | SIMDUTF へ切り替えによる改善 |
| node:http p99 レイテンシ | 1.75 倍高速 | 20.86 ms → 11.89 ms |
| node:crypto scrypt | 2.12 倍高速 | 暗号化処理の高速化 |
パッケージ管理の効率化
- Shortened Packuments: npm レジストリから必要なメタデータのみを取得し、解決を加速。
- 並列 npm 解決: 依存ツリーが独立したブランチで解決するため待ち時間なし。
- 非同期イベントループからの解凍: HTTP/2 ストリーム停止時のパフォーマンス向上。
Node.js API 互換性 (76.4% → 3,405 テスト合格)
Node.js テストスイートのパス率は、Deno 2.7 の約 42% から 76.4% に跳ね上がりました (#33247)。
- Bun vs Deno: Node.js テストスイートでは、Deno 2.8 (76.4%) が Bun 1.3.14 (40.6%) を大幅に上回っています。
- ホットパス最適化:
の scrypt、Rust 後援のnode:crypto
、Worker 間通信などが高速化されています。cpSync - Deno.serve: ネイティブサーバーは JS ハンドラへの直接ディスパッチと軽量の Vary 処理で、透過性を向上させました。
import defer
起動時間を削減するために、評価を遅延するインポート機能が標準的にサポートされています (#32360)。高価な初期化を行うモジュールは、実際にエクスポートにアクセスするまでロードされません。
パッケージおよびワークスペース管理
catalog: プロトコル
pnpm の catalog プロトコルを採用し、モノレポの依存バージョン管理を簡素化しました (#32947)。
- ワークスペースルートで一度にデフォルトのカタログ (
,hono
など) を宣言し、各メンバーから参照可能です。zod - 複数の環境(本番、ビルド)に対応する
フィールドもサポートされています。catalogs
クロスプラットフォーム npm インストール
Deno はネイティブバイナリプラットフォームの制約を緩和します (#32785)。
- 異なる OS やアーキテクチャ (
,linux/arm64
など) に特化して依存関係を取得できます。windows/amd64 - Docker ビルドや CI アーティファクト作成時の信頼性を高めます。
--prod フラグと node_modules レイアウトの最適化
- --prod: 本番デプロイでは
やdevDependencies
をスキップし、インストールサイズを最小化できます。@types/* - isolated vs hoisted:
オプションを追加し、既存の Node プロジェクトとの互換性を保証します。nodeModulesLinker: "hoisted"
.npmrc サポートの強化
- min-release-age: ヘッドライン機能としてパッケージの新しさに基づくセキュリティチェックを導入しました (#33983)。
- 相互 TLS 認証 (
/certfile
) やkeyfile
などの認証設定にも対応。_auth
およびfile:
スプレッファ(ローカル依存)が静かにスキップされ、公開パッケージのインストールに干渉しません。link:
--package-json フラグ
Node から移行中のプロジェクトのために、
を主要なソースとして保持したい場合に使用します (#33199)。package.json
$ deno add --package-json express
deno compile の更新
「プロジェクトをターゲットにしてバイナリを得る」ワークフローが標準化されました (#33164)。
- フレームワーク検出: Next.js, Astro, Fresh, Remix, SvelteKit など、主要な Web フレームワークの自動検出に対応。
- npm CLIs 再起動対応:
などがスタックする問題を解決し、自身を再起動する CLI のビルドが可能になりました。child_process.spawn
バグ修正
パッケージ管理コードは常に進化しています。35 つのイシューが修正されました (#32908)。主なものは以下の通りです:
- ピア依存解決: 複数の競合バージョンでのハング回避、大規模ワークスペースでのキャッシュヒットメモ化。
- エイリアス処理: アリヤされたパッケージが正しくリンクされるように修正。
- ロックファイル再生成: グローバルインストールの
フラグ時の挙動修正。--force - update 契約:
の機能定義を明確化。deno update --lockfile-only
まとめ
Deno 2.8 は、Node.js 開発者のワークフローとの完全な統合、劇的なパフォーマンス向上、そして便利な新しい開発ツール(Audit Fix, Bump Version, Pack)を備えた、最も強力な JavaScript/TypeScript ランタイムの一角に君臨しています。