Jest と node:test はどちらも JavaScript / TypeScript のテストを実行するための仕組みですが、
目的・機能・設計思想が大きく異なります。
以下に、比較表+解説で整理します👇
🧭 概要比較
| 項目 | 🧪 Jest | ⚙️ Node.js 標準 node:test |
|---|---|---|
| 提供元 | Meta(Facebook)製の独立したテストフレームワーク | Node.js コアに標準搭載(v18 以降) |
| 対応環境 | Node.js / Babel / TypeScript / React など幅広い | 純粋な Node.js 実行環境 |
| インストール | npm i -D jest が必要 | Node.js 標準モジュール(追加不要) |
| 実行コマンド | npx jest | node --test |
| モジュール | import { test, expect } from '@jest/globals' | import test from 'node:test'、assert使用 |
| Mock / Spy | Jest 独自の jest.fn(), jest.mock() あり | 手動実装(モック機能は非搭載) |
| Snapshot テスト | ✅ あり | ❌ なし |
| Watchモード | ✅ あり (jest --watch) | ❌ なし |
| 並列実行 | ✅ デフォルトでスレッドプールを使用 | ✅ Worker Threads ベースでサポート |
| カバレッジ計測 | ✅ 内蔵(--coverage) | ❌ 外部ツール(例:c8)が必要 |
| TypeScript サポート | ✅ ts-jest や babel-jest 経由で可能 | ⚙️ Node の --loader tsx などを使えば可能 |
| 主な用途 | アプリケーション・React・UIコンポーネントテスト | 軽量なユニットテスト・CIスクリプト向け |
| 実行速度 | やや遅い(機能が多い) | 非常に高速(シンプル) |
🧩 コード比較
🧪 Jest 版
import { sum } from "./sum";
test("adds 1 + 2 to equal 3", () => {
expect(sum(1, 2)).toBe(3);
});
⚙️ Node.js 標準 node:test 版
import test from "node:test";
import assert from "node:assert/strict";
import { sum } from "./sum.js";
test("adds 1 + 2 to equal 3", () => {
assert.equal(sum(1, 2), 3);
});
実行コマンド:
node --test
⚡ どちらを選ぶべきか
| 用途 | 推奨 |
|---|---|
| 大規模アプリ / React / TypeScript プロジェクト | ✅ Jest |
| 小規模スクリプトや CLI / Node ライブラリ開発 | ✅ node:test |
| テストの実行速度・依存削減を優先 | node:test が有利 |
| スナップショット・モック・ウォッチが必要 | Jest 一択 |
🧠 開発者視点のまとめ
node:testは Python の unittest や Go の testing パッケージに近い
→ 標準軽量・依存ゼロでシンプルなユニットテストが書けるJestは 開発体験重視の高機能フレームワーク
→ Mock・Snapshot・Watch・並列化・TypeScript統合まで全部入り
✅ 結論
| 目的 | おすすめ |
|---|---|
| Node.js ライブラリや軽量ツールのテスト | 🟢 node:test |
| Webアプリ・React・複雑な依存関係を持つシステム | 🧪 Jest |
| テスト文化を導入したいチーム | 🧪 Jest |
| CI/CD や SDK の軽量テスト | ⚙️ node:test |
