Deno 2.0がついにリリース
2024年10月、Deno 2.0が正式リリースされました。Node.jsとの互換性を大幅に強化し、実用性が飛躍的に向上しています。Ryan Dahl氏が「Node.jsの反省点を活かして作った」Denoが、ついに本格的な選択肢になりました。
Denoとは: Node.jsの作者Ryan Dahl氏が開発したJavaScript/TypeScriptランタイム。セキュリティ、TypeScriptネイティブサポート、モダンなWeb標準APIが特徴です。
主要な新機能
1. npm完全互換
npmパッケージをそのまま使用できるようになりました。npm:スキーマを使って直接インポートできます。
// npmパッケージを直接インポート
import express from "npm:express@4";
import { z } from "npm:zod";
const app = express();
app.get("/", (req, res) => {
res.json({ message: "Hello from Deno!" });
});
app.listen(3000);
ほとんどのnpmパッケージが動作し、Node.jsからの移行が容易になりました。
2. package.jsonサポート
package.jsonがあれば、従来通りのnpm installやnode_modulesも使用可能に。
# 既存のNode.jsプロジェクトをDenoで実行
deno run --allow-net --allow-read app.js
# package.jsonのscriptsも実行可能
deno task start
3. LTS(Long Term Support)の導入
企業での採用を見据えて、LTSバージョンが導入されました。安定版の長期サポートにより、本番環境での利用が現実的になりました。
4. ワークスペースと複数プロジェクト管理
モノレポ構成をサポート。deno.jsonでワークスペースを定義できます。
// deno.json
{
"workspace": ["./packages/api", "./packages/web", "./packages/shared"]
}
5. JSRによるパッケージ公開
JSR(JavaScript Registry)が登場。TypeScriptをそのまま公開でき、npmとDenoの両方で使えるパッケージを配布できます。
// JSRからのインポート
import { assertEquals } from "jsr:@std/assert";
// 公開は簡単
// deno publish
セキュリティモデル
Denoの大きな特徴であるセキュリティモデルも進化しています。
# 必要な権限のみを明示的に許可
deno run --allow-net=api.example.com --allow-read=./data app.ts
# 全権限を許可(開発時のみ推奨)
deno run -A app.ts
| 権限フラグ | 説明 |
|---|---|
--allow-net | ネットワークアクセス |
--allow-read | ファイル読み取り |
--allow-write | ファイル書き込み |
--allow-env | 環境変数アクセス |
--allow-run | サブプロセス実行 |
開発ツールの充実
Deno 2.0では開発体験も大幅に改善されています。
組み込みツール
# フォーマッター
deno fmt
# リンター
deno lint
# テストランナー
deno test
# ベンチマーク
deno bench
# ドキュメント生成
deno doc
# バンドラー
deno compile # 単一実行ファイルを生成
TypeScriptネイティブ
設定不要でTypeScriptがそのまま動作。tsconfig.jsonの設定に悩む必要がありません。
// app.ts - そのまま実行可能
interface User {
id: number;
name: string;
}
const user: User = { id: 1, name: "田中" };
console.log(user);
Node.jsとの比較
| 機能 | Deno 2.0 | Node.js |
|---|---|---|
| TypeScript | ネイティブサポート | 要トランスパイラ |
| セキュリティ | 明示的な権限制御 | 全権限デフォルト |
| パッケージ管理 | URL/npm/jsr | npm |
| 設定ファイル | 最小限 | 多数必要 |
| Web標準API | fetch等標準サポート | v18以降で追加 |
| エコシステム | 急成長中 | 巨大・成熟 |
フレームワーク対応状況
主要なフレームワークのDeno対応状況です。
- Fresh: Deno公式のフルスタックフレームワーク(Islands Architecture)
- Hono: 高速なWebフレームワーク(Deno完全対応)
- Oak: Express風のミドルウェアフレームワーク
- Express: npm互換で動作
- Next.js: 部分的にサポート
// Honoの例
import { Hono } from "npm:hono";
const app = new Hono();
app.get("/", (c) => c.json({ message: "Hello Hono!" }));
Deno.serve(app.fetch);
まとめ
Deno 2.0は、Node.js互換性の大幅強化により実用的な選択肢になりました。セキュリティ、TypeScriptネイティブ、モダンなAPIなど、多くの利点を持っています。新規プロジェクトや、セキュリティを重視する案件では、積極的に検討する価値があります。
← 一覧に戻る