9月20日、Deno 2.0のリリース候補版が公開された。これは、Deno 1.0のリリース以来、最大のアップデートであり、Node.jsとの互換性向上や依存管理システムの改良、グローバル変数の変更など、様々な新機能と改善が含まれている。
1. グローバル変数の変更
Deno 2.0では、window
グローバル変数が削除され、代わりにglobalThis
やself
の使用が推奨されている。この変更は、Denoがブラウザと互換性を持つことを目指して導入されたwindow
が、思わぬバグを引き起こしていたためだ。これにより、ライブラリがDeno上での動作時に問題を引き起こすことが少なくなる。
// Deno v1.x
window.addEventListener("load", () => {
console.log("loaded");
});
// Deno v2.x
globalThis.addEventListener("load", () => {
console.log("loaded");
});
一方で、Node.jsのprocess
グローバルが新たに導入された。この変更により、Node.js向けに書かれたコードの多くがDeno上でそのまま動作するようになった。ただし、Denoでは明示的なインポートが推奨されており、以下のようにprocess
をインポートして使用することが推奨される。
import process from 'node:process';
console.log(process.version);
2. 依存関係管理の改善
Deno 2.0では、依存関係の管理がさらに強化され、より柔軟な追加や削除が可能になった。deno add
コマンドでは、npmやDenoの標準ライブラリから直接依存関係を追加できるようになり、jsr:
やnpm:
プレフィックスが必須となった。
たとえば、次のように依存関係を追加することができる。
deno add npm:express
deno add jsr:@std/testing/snapshot
これにより、パッケージ名の曖昧さを避け、正しい依存関係を追加できるようになった。さらに、deno remove
コマンドを使用して、不要になった依存関係を簡単に削除することもできる。
deno remove npm:express
3. パーミッションシステムの変更
Denoのパーミッションシステムも大幅に改善された。Deno 1.xでは、パーミッションエラーがPermissionDenied
として報告されていたが、Deno 2.0ではこれがNotCapable
エラーとして区別されるようになった。これにより、Deno特有のエラーとOSレベルのエラーを容易に区別できる。
たとえば、ファイルにアクセスする際のエラーメッセージが以下のように変わった。
Deno 1.x:
error: PermissionDenied: Requires read access to "./README.md"
Deno 2.0:
error: NotCapable: Requires read access to "./README.md"
4. Node.jsおよびnpmとの互換性向上
Deno 2.0では、Node.jsのCommonJSモジュールのサポートがさらに強化され、.cjs
拡張子を持つファイルを直接実行できるようになった。これにより、Node.js用に書かれた多くのライブラリやフレームワークが、Deno上でもシームレスに動作するようになった。
次のように、require
を使ったCommonJSモジュールのインポートが可能だ。
const express = require('express');
const app = express();
また、ESモジュールもrequire
を使用してインポートできるようになり、Node.jsとDenoの間でコードの互換性が一層向上した。
5. APIとCLIの変更
いくつかのAPIがDeno 2.0で廃止された。たとえば、deno bundle
サブコマンドは削除され、deno vendor
もより簡単なキャッシュ管理オプションに取って代わられた。また、Denoのいくつかの不安定なAPIは、バージョン2.0で安定化され、--unstable
フラグが不要となった。
6. deno test --doc
の導入
Deno 2.0では、新たにdeno test --doc
コマンドが追加され、JSDocやMarkdownのコードブロックを実際に実行してテストすることが可能になった。これにより、コードのドキュメントが実際のコードと同期しているかどうかを確かめることができる。
/**
* Adds two numbers.
* @param {number} a
* @param {number} b
* @returns {number} Sum of a and b.
*/
function add(a, b) {
return a + b;
}
このコードブロックをテストするには、次のコマンドを実行する。
deno test --doc
これにより、JSDocのコード例が実際に動作するかどうかが確認できる。
Deno 2.0は開発者にとって非常に重要なアップデートであり、Node.jsとの互換性が向上し、依存関係管理やパーミッションシステムなどが強化された。リリース候補版を試してフィードバックを提供することが推奨されている。
詳細は、Deno 2.0 Release Candidate を参照していただきたい。
By playing the bitlife online game, you will be in control of a life from birth to old age.