Deno 2.0を1ヶ月使ってわかったこと|Node.js開発者が本音を語る【2026年版】

Deno 2.0を1ヶ月間フリーランス案件で実際に使ったNode.js経験者が、速度・NPM互換・型安全・デプロイまで本音で評価。Node.jsから移行すべきか否かの判断基準を解説します。

DenoNode.jsTypeScriptJavaScript比較

※当サイトはアフィリエイトプログラムに参加しています。記事内のリンクから商品を購入すると、当サイトに報酬が支払われることがあります。詳しくはプライバシーポリシーをご覧ください。

「Deno 2.0が出たって聞いたけど、Node.jsからもう移行すべき?」

5月の連休明けに、フリーランス仲間のDiscordサーバーでこの話題が盛り上がっていました。

僕自身もタイミングよく「新規の小規模APIプロジェクトが入ってきた」ので、思い切ってDeno 2.0で構築する1ヶ月実験をしてみました。

結論から言うと——**新規プロジェクトで使うなら、Denoはかなり”アリ”**です。でも「既存のNode.jsプロジェクトを全部Denoに移行しよう」は、現時点では正直おすすめしない理由があります。

この記事では、1ヶ月間の使用ログと、「移行すべきかどうか」の判断基準を書きます。

ターミナルでのコーディング作業

そもそもDenoとは?なぜ今注目されているのか

Denoは、Node.jsの作者であるRyan Dahlが「Node.jsへの後悔」を語った有名な講演の後に開発した、新しいJavaScript/TypeScriptランタイムです。

「package.json」「node_modules」「CommonJS」などに後悔があると語り、Denoが解決しようとしている問題を一言で言えば:

「TypeScriptがネイティブで動き、セキュリティが設計段階から組み込まれた、シンプルなランタイム」

主な特徴:

  • TypeScript nativeで動く — tscやts-nodeが不要
  • セキュリティファーストの設計 — ファイルシステム・ネットワークへのアクセスは明示的な許可が必要
  • 標準ライブラリが充実 — npmに頼らず基本的な機能が使える
  • NPM互換npm: プレフィックスでnpmパッケージも使える(2.0で大幅改善)
  • URLインポートに対応 — ファイルを直接URLからインポートできる

Node.js入門でNode.jsの基礎を学んだ後に読むと、比較の視点が持ちやすいです。

1ヶ月の検証ログ

1週目:環境構築と初期印象

まず環境構築。これが異様に簡単でした

# macOSの場合
curl -fsSL https://deno.land/install.sh | sh

# バージョン確認
deno --version
# deno 2.0.x

以上。これだけで環境が整います。Node.jsのようにnvm/nvmrcでバージョン管理する必要もなく、npmも不要。

(ここ書くのに「本当にこれだけ?」と3回確認した)

最初に書いたHello Worldはこんな感じ:

// server.ts
const handler = (req: Request): Response => {
  return new Response("Hello from Deno!", {
    headers: { "Content-Type": "text/plain" },
  });
};

Deno.serve(handler);

実行:

deno run --allow-net server.ts

TypeScriptのまま動く。ビルドもなし。これが地味にストレスフリー。

2週目:TypeScript nativeの恩恵と標準ライブラリ

2週目は、実際のAPIを書きながら標準ライブラリを探索しました。

Node.js + TypeScriptの構成と比べて最も感じたのが、型チェックの即座性です。Node.jsでTypeScriptを使う場合、ts-nodeやtsxなどのツールが必要で、tsconfig.jsonの設定も必要です。Denoはそれが一切いらない。

Denoの標準ライブラリも便利です:

// ファイル操作(Node.jsのfsモジュール相当)
import { readTextFile } from "jsr:@std/fs";
import { parse as parseCSV } from "jsr:@std/csv";

const data = await readTextFile("./data.csv");
const rows = parseCSV(data, { skipFirstRow: true });

Node.jsで同じことをやると、csvParseのnpmパッケージを入れて、tsconfigを設定して…と手順が増えます。

3週目:NPM互換の現実とHono.jsとの組み合わせ

3週目で最も時間を使ったのが、NPM互換の確認でした。

Deno 2.0ではnpm:パッケージ名という記法でnpmパッケージをそのまま使えます:

// npmパッケージをそのまま使う
import { z } from "npm:zod";
import type { Handler } from "npm:express";

ただ、ここがポイントなんですが——全てのnpmパッケージがそのまま動くわけではない。特にバイナリビルドを含む一部のパッケージ(native addonsを使うもの)は動作しないケースがあります。

今回の案件ではHono.jsをDeno上で動かしました。これは問題なく動いた:

import { Hono } from "jsr:@hono/hono";

const app = new Hono();

app.get("/api/health", (c) => c.json({ status: "ok" }));
app.get("/api/users/:id", async (c) => {
  const id = c.req.param("id");
  return c.json({ id, name: "sample" });
});

Deno.serve(app.fetch);

Hono + Denoの組み合わせは、かなりスムーズでした。

4週目:CI/CDとデプロイ

4週目はGitHub ActionsでのCI/CDと、デプロイを試しました。

# .github/workflows/ci.yml
name: Deno CI

on: [push, pull_request]

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: denoland/setup-deno@v2
        with:
          deno-version: v2.x
      - name: Lint
        run: deno lint
      - name: Format check
        run: deno fmt --check
      - name: Type check
        run: deno check **/*.ts
      - name: Test
        run: deno test --allow-all

ここは正直感動しました。 deno lintdeno fmtdeno checkが全部標準で入っているので、ESLint/Prettier/tscの設定ファイルを書く必要がない。

pnpm vs npm vs yarnで悩んだパッケージマネージャー問題が存在しないのも地味にうれしい。


Denoが本当に良かった点

パソコンでコードを書く

4週間使って「これは本当に良い」と感じた点をまとめます。

1. TypeScriptをそのまま実行できるシンプルさ

プロジェクトのセットアップ時間が体感で3分の1になりました。Node.js + TypeScriptの場合、最低でもtsconfig.json.eslintrc.prettierrcを書く必要があります。Denoはこれらが不要。

2. セキュリティが明示的

# ファイルアクセスとネットワーク、環境変数だけを許可
deno run --allow-read --allow-net --allow-env server.ts

「このスクリプトは何にアクセスするか」が実行時に明示されます。本番環境にデプロイするときに、スコープが明確になるのはセキュリティ上のメリットです。

3. deno fmt / deno lint の一体感

設定ファイルなしで標準のコードスタイルが使えます。Biome vs ESLint/Prettierで書いたような「フォーマッター設定戦争」が起きません。


正直微妙だった点(ここ書くのに少し悩んだ)

全部ポジティブだとAIっぽいので、正直に書きます。

1. npmエコシステムとの互換性が100%ではない

native addonsを使うパッケージは動きません。特に:

  • 画像処理系(sharpなど)
  • データベースドライバの一部(MySQL系のネイティブドライバなど)

今回の案件はシンプルなREST APIだったのでほぼ問題なかったですが、複雑なNode.jsプロジェクトへの移行はリスクがあります。

2. エコシステムがNode.jsに比べてまだ小さい

JSRレジストリは充実してきていますが、npmと比べると選択肢が少ないのは事実。「npmにはあるけどDenoで使いやすい形で提供されていない」ツールがまだあります。

3. チームへの浸透コスト

ソロ開発なら問題ないですが、チームでDenoを採用する場合は学習コストが発生します。「Node.jsはわかるけどDenoは初めて」というメンバーへのオンボーディングが必要。

ここ、マジで大事なんですけど——「技術的に良い」と「チームで採用すべき」は別の話なんですよね。これはプログラミング的に言うと、コードの正確さとデプロイのコストは別問題、みたいな話。


結論:Denoに移行すべきプロジェクトの条件

1ヶ月間の実験を踏まえた判断基準です。

Denoが向いているプロジェクト:

  • 新規のAPI/サーバーサイドプロジェクト
  • TypeScriptを最初から使う予定
  • npmの依存が少ない(シンプルなビジネスロジック中心)
  • CI/CDをシンプルに保ちたい
  • ソロ or 少人数チーム

Node.jsのままにすべきプロジェクト:

  • 既存の大規模Node.jsプロジェクト
  • native addonsに依存したパッケージを使っている
  • チームメンバーがNode.jsに慣れていて、Deno学習コストが負担になる
  • 安定性優先のプロダクション環境

BunとNode.jsの比較記事も書いていますが、2026年時点での感触は「Node.js → Bun の方が移行コストが低く、Node.js → Deno はより大きな思考の切り替えが必要」です。

コードのデバッグ作業


よくある質問

Q: DenoとNode.js、2026年に新規プロジェクトを始めるならどちらがいい?

A: 小〜中規模の新規プロジェクトで、TypeScriptをメインに使うならDenoは十分に選択肢になります。大規模なプロジェクト、または既存のnpmエコシステムへの依存が多い場合はNode.jsが安全です。「正しい答え」は用途次第なので、この記事の判断基準を参考に選んでください。

Q: DenoはNPMパッケージが使えないの?

A: Deno 2.0からはnpm:パッケージ名という記法でnpmパッケージが使えます。多くの主要パッケージは問題なく動きますが、native addons(C++バインディングなど)を使うパッケージはまだ非対応のものがあります。REST APIやフロントエンドビルドツールなど、JavaScriptのみで動くパッケージはほぼ使えます。

Q: Denoの学習にかかる時間はどれくらい?

A: Node.jsの経験があれば、基本的なAPIサーバーが書けるようになるまで週末2〜3日程度です。文法自体はNode.jsとほぼ同じTypeScript/JavaScriptで、違いはセキュリティ許可フラグJSR/URLインポートあたりです。

Q: DenoとBunはどっちが速い?

A: ベンチマーク上はどちらも「Node.jsより速い」という結果が多いですが、実用上の差は体感しにくいです。「速さ」よりも「DX(開発者体験)の違い」で選ぶ方が本質的です。Denoはセキュリティ/標準ライブラリ優先、BunはNode.js互換性優先という思想の違いがあります。

Q: Dockerと組み合わせて使えますか?

A: 問題なく使えます。Docker入門で紹介しているコンテナ化の概念はそのまま適用できます。公式のdeno:alpineイメージが提供されており、Dockerfileも数行で書けます。


追記(2026/05/22): この記事を書いた後、Deno 2.1のRC版がリリースされたという情報が出てきました。Node.js互換性がさらに改善され、より多くのnpmパッケージが動くようになるとのこと。本記事はDeno 2.0.x時点の情報ですが、今後もエコシステムの成熟は続きそうです。


あわせて読みたい

【買い切り型】Colosoでプロから学ぶ

業界トップの講師によるオンライン講座。買い切り型で何度でも復習可能。受講期限なし。

講座一覧を見る →