結論から言うと、2026年のNode.jsでは ts-node・dotenv・nodemon・Jest・axios・chalk といった定番パッケージの多くが「入れなくていいもの」 になりました。

TypeScriptはそのまま実行でき、.envは標準で読め、テストランナーもSQLiteも同梱されています。依存が減れば、インストールは速くなり、脆弱性の監視対象も減り、メンテが止まったパッケージに振り回されることもなくなります。

この記事では、Node.js 24(Active LTS)を基準に、標準機能だけで外部パッケージを置き換えられる10の機能を、コピペで動くコードと「いつから安定版か」の正確なバージョン情報つきで紹介します。

なお2026年7月時点のNode.jsは、26がCurrent、24がActive LTS、22がMaintenance LTSという状況です。本番は24を前提にすれば、この記事の内容はすべて使えます。

独学に限界を感じたら

プログラミング教室がおすすめ。挫折せず最短で実力を伸ばせます。

PR

1. TypeScriptをそのまま実行 —— ts-node / tsx が不要に

10選の筆頭は、なんといってもこれです。Node.jsは .ts ファイルをコンパイルなしで直接実行できるようになりました。v22.18 / v23.6 でデフォルト有効になり、v24.12(LTS)で正式にStable。v26ではフラグ自体が削除され、完全に「素の機能」になっています。

node index.ts   # これだけ。ts-node も tsx もビルドも不要
// index.ts
type User = {
  id: number;
  name: string;
};

const user: User = { id: 1, name: "Taro" };
console.log(`Hello, ${user.name}`);

仕組みは「型強制排除(type stripping)」で、型注釈を空白に置き換えてからJavaScriptとして実行します。行番号が変わらないのでスタックトレースもそのまま読めます。ただし制約が2つあります。

  • 実行できるのは「型を消すだけでJSになる」構文のみ。enum・実行時コードを持つnamespace・パラメータプロパティ・デコレータはエラー(ERR_UNSUPPORTED_TYPESCRIPT_SYNTAX)になる
  • tsconfig.json は参照されない(pathsエイリアス等は効かない)。また型チェック自体は行われないので、チェックは従来どおり tsc --noEmit で行う

TypeScript 5.8以降なら、tsconfigに "erasableSyntaxOnly": true を入れておくと、Nodeで実行できない構文を型チェックの段階で弾けます。新規プロジェクトではセットで有効化するのがおすすめです。

2. node:test —— Jest を入れる前に検討したい標準テストランナー

Node.js v20から標準のテストランナー node:test がStableです。describe/it形式もサポートし、追加インストールはゼロ。1と組み合わせればTypeScriptのテストもそのまま動きます

// math.test.ts
import { test } from "node:test";
import assert from "node:assert/strict";

const add = (a: number, b: number): number => a + b;

test("add は 2 つの数を足す", () => {
  assert.equal(add(1, 2), 3);
});
node --test           # *.test.{js,ts} 等を自動で発見して実行
node --test --watch   # ウォッチモードで回し続ける

モック(mock.fn / mock.timers)も標準で入っています。既存のJest資産を無理に捨てる必要はありませんが、新しく作る小〜中規模のプロジェクトなら、まず node:test で始めて困ってから乗り換えを検討する順番が2026年の自然な選択です。

3. --watch —— nodemon が不要に

ファイル変更を検知して自動再起動する、あの nodemon の仕事は --watch フラグに置き換えられます。v22でStableになりました。

node --watch server.ts        # 依存ファイルの変更で自動再起動
node --watch-path=./src app.ts  # 監視対象のパスを明示する場合

4. --env-file —— dotenv が不要に

.env ファイルの読み込みも標準機能になりました。v20.6で追加され、v22.21 / v24.10 でStable。コードに import "dotenv/config" を書く必要はもうありません。

node --env-file=.env app.ts

# ファイルが無くてもエラーにしたくない場合(CI と併用しやすい)
node --env-file-if-exists=.env app.ts

複数指定も可能で、後に指定したファイルが優先されます。dotenvを入れる理由は、ほぼ無くなりました。

5. fetch —— axios / node-fetch が不要に

ブラウザと同じ fetch がNode.jsでも使えます(v21でStable)。タイムアウトも AbortSignal.timeout() で1行です。

const res = await fetch("https://api.example.com/users", {
  signal: AbortSignal.timeout(5000), // 5秒でタイムアウト
});

if (!res.ok) {
  throw new Error(`HTTP ${res.status}`);
}

const users = await res.json();

インターセプターやリトライなどaxios固有の機能に依存していなければ、HTTPクライアントのためだけに依存を増やす必要はありません。

6. WebSocketクライアント —— ws(クライアント用途)が不要に

ブラウザ互換の WebSocket クライアントがv22.4でStableになり、グローバルにそのまま生えています。

const ws = new WebSocket("wss://example.com/socket");

ws.addEventListener("open", () => {
  ws.send("hello");
});

ws.addEventListener("message", (event) => {
  console.log("received:", event.data);
});

注意点はひとつ: 標準で入ったのはクライアントだけです。WebSocketサーバを立てる側は、引き続き ws などのライブラリが必要です。

7. node:sqlite —— better-sqlite3 の代わりに

SQLiteがNode.js本体に同梱されました。ネイティブアドオンのビルドも、Nodeのバージョンアップ後のリビルドも不要です。v22.13 / v23.4 からフラグなしで使え、現在はRelease Candidate(Stability 1.2)という位置づけです。

import { DatabaseSync } from "node:sqlite";

const db = new DatabaseSync("app.db");

db.exec(`
  CREATE TABLE IF NOT EXISTS posts (
    id INTEGER PRIMARY KEY,
    title TEXT NOT NULL
  ) STRICT
`);

const insert = db.prepare("INSERT INTO posts (title) VALUES (?)");
insert.run("Node.js 標準機能だけでここまでできる");

const rows = db.prepare("SELECT * FROM posts ORDER BY id").all();
console.log(rows);

better-sqlite3と同じ同期APIなので、書き味もほぼそのままです。まだStable一歩手前なので、ミッションクリティカルな本番投入は慎重に。ローカルツール・CLI・小さなアプリのストレージには今日から十分使えます。

8. fs.glob —— glob パッケージが不要に

「特定パターンのファイルを列挙する」ためだけに入れていたglobも標準になりました。v22で追加、v22.17でStableです。

import { glob } from "node:fs/promises";

for await (const file of glob("src/**/*.ts")) {
  console.log(file);
}

9. util.styleText —— chalk が不要に

CLIの色付けも標準関数で足ります。v20.12で追加、v22.17でStable。複数スタイルは配列で重ねられます。

import { styleText } from "node:util";

console.log(styleText("green", "✓ ビルド成功"));
console.log(styleText(["red", "bold"], "✗ テスト失敗"));
console.log(styleText(["bgBlue", "white"], " INFO "), "起動しました");

TTYかどうかを見て自動で色を無効化してくれるので、CIログが制御文字で汚れる事故も防げます。

10. util.parseArgs —— commander / yargs(小規模CLI)が不要に

CLIの引数パースも標準の util.parseArgs(v20以降Stable)で書けます。型付きフラグ・短縮形・位置引数まで面倒を見てくれます。

import { parseArgs } from "node:util";

const { values, positionals } = parseArgs({
  options: {
    verbose: { type: "boolean", short: "v", default: false },
    output: { type: "string" },
  },
  allowPositionals: true,
});

// node cli.ts build --verbose --output=dist
console.log(values.verbose);  // true
console.log(values.output);   // "dist"
console.log(positionals);     // ["build"]

サブコマンドが何層もあるような本格的なCLIならcommanderに分がありますが、社内ツールやスクリプト程度ならこれで十分です。

置き換え早見表

  • ts-node / tsx → node index.ts(v24.12でStable)
  • Jest / Mocha → node:test(v20でStable)
  • nodemon → node --watch(v22でStable)
  • dotenv → node --env-file(v22.21 / v24.10でStable)
  • axios / node-fetch → fetch(v21でStable)
  • ws(クライアント用途)→ WebSocket(v22.4でStable)
  • better-sqlite3 → node:sqlite(Release Candidate)
  • glob → fs.glob(v22.17でStable)
  • chalk → util.styleText(v22.17でStable)
  • commander / yargs(小規模)→ util.parseArgs(v20でStable)

まとめ:npm install の前に、まず標準機能を疑う

10個並べると、「Node.jsのボイラープレート」と呼ばれていた定番セットの大半が標準機能で置き換わったことがわかります。判断基準はシンプルで、新規プロジェクトならまず標準機能から始める。既存プロジェクトは、依存のメジャーアップデートや脆弱性対応のタイミングで置き換えを検討する。無理に一括置換する必要はありません。

言語側(ECMAScript)の新機能も同じ流れで進化しています。ランタイム側の本記事とあわせて読むと、「もうライブラリが要らない領域」の全体像がつかめるはずです。

もう知らないと損!モダンJavaScript新機能12選【2026】配列のグルーピング、集合演算、遅延イテレータ、ディープコピー——2026年のJavaScriptは標準機能だけでここまで書けます。lodashやワンライナーに頼っていた処理を置き換える、Baseline対応済みのモダン機能12選を、コピペで動くコードとともに解説します。frontendlab.magicgifted.com 脱・型初心者|TypeScript実践テク10選【2026】any を撒くのはもう卒業。satisfies・as const・判別可能ユニオン・Branded Types・using など、現場で本当に効くTypeScriptのテクニックを10個、コピペで動くコード付きで解説します。型で消耗せず、バグを型で潰すための実践ガイド【2026年版】。frontendlab.magicgifted.com