
2026/06/24 23:14
Show HN: Nub - Node.js用のオールインワン・ツールキット(Bun風の)
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
Nub は、フルランタイムへの移行を必要とせずに現代的な機能(TypeScript 対応、Temporal などを含むポリフィル、node:sqlite や vm.Module などの実験的なフラグ解除など)を追加する、Rust で記述された高パフォーマンスのツールキットであり、標準の Node.js を強化します。Nub は卓越した速度を提供します:スクリプト実行(
nub run)は pnpm run の約 24 倍速く、パッケージ実行(nubx)は Rust バイナリディスパッチを用いてローカルバイナリを最初に解決することにより、npx/pnpm exec より最大 19 倍高速です。Nub は nub install コマンドで依存関係を管理し(Aube エンジン、pnpm 互換)、デフォルトで危険なポストアンスインストールスクリプトをブロックします。追加のセキュリティ機能には osv.dev に対する自動チェックと、パッケージの最低リリース年齢 24 時間の強制があります。Nub は .node-version、.nvmrc、または package.json#engines から自動的に Node バージョンを推測し、マニュアル制御用の Node バージョンマネージャ(nub node)を提供し、URLPattern や RegExp.escape といった現代の API をサポートし、依存関係グラフと無効化トリガー(.env*、tsconfig.json など)を追跡するためのウォッチモード(nub watch)を提供します。Nub は互換性モードを通じて npm、pnpm、Yarn、Bun とシームレスに統合でき、macOS/Linux では curl/PowerShell 経由で、Windows では PowerShell/Homebrew/npm 経由で、または глобальный npm パッケージとしてインストール可能です。GitHub Actions へのサポートは nubjs/setup-nub が提供します。これらの機能により、インフラストラクチャを変更せずにマルイシスなパッケージからのリスクを軽減しつつ、開発ワークフローを大幅に簡素化します。本文
Nub: Node.js の高速オールインワンツールキット
Node.js を置き換えるのではなく、Rustで構築された拡張機能による開発体験(DX)を提供するツールキットです。
特徴と概要
- 目的: Node.js の機能を拡張し、Bun や Deno に匹敵する高速な動作を実現します。
- 哲学: 新しいランタイムは不要です。
- ロックイン: ベンダー固有の API サージ面はなく、プラットフォーム依存性はありません。
- 統合機能: ファイル実行、依存関係管理、Node.js 自体の運用までを単一のツールで完結させます。
クイックスタート
以下のコマンドで主要なタスクを高速度に処理できます。
nub index.ts # TypeScript ファーストの Node.js ランタイム nub run dev # pnpm run の約 24 倍高速化 nubx prisma generate # npx の約 19 倍高速化 nub install # pnpm install の約 2.5 倍高速化 nub watch src/server.ts # ネイティブなウォッチモード nub pm shim # Corepack 風シャイム登録 nub node install 26 # Node.js バージョン管理 nub upgrade # ツールの自己更新
機能比較表
| アクション | デフォルトのツール | Nub コマンド |
|---|---|---|
| ファイル実行 | , など | |
| スクリプト実行 | , | |
| パッケージ実行 | , | |
| 依存関係インストール | , | |
| ウォッチモード | , | |
| バージョン管理 | , , | |
| シャイム機能 | | |
インストール方法
macOS / Linux (curl)
curl -fsSL https://nubjs.com/install.sh | bash
Windows (PowerShell)
irm https://nubjs.com/install.ps1 | iex
Homebrew (macOS / Linux)
brew install nubjs/tap/nub
npm / pnpm / yarn
npm install -g --ignore-scripts=false @nubjs/nub # 注:pnpm や yarn でもグローバルインストールに対応しています。
GitHub Actions
actions/setup-node@v4 の代わりに以下のアクションを使用してください(互換性 1:1)。
- uses: nubjs/setup-nub@v0
ファイルランナー (nub <file>
)
nub <file>ファイルを実行します。TypeScript (
.ts, .tsx) や JSX をサポートし、ビルドステップなしで動作させます。
標準 Node.js と互換性が高く、Bun/Deno の機能を追加しています。
基本コマンド
nub index.ts # 単一ファイル実行 nub --watch app.ts # 変更時に自動再起動
主な機能と拡張点
- 🦆 完全な TypeScript 対応: Enum や Namespace をサポート。
- 🧭 高度なリゾリューション: エクスポートなしインポート、
対応。tsconfig.json#paths - ⚛️ JSX / TSX 実行。
- 🎂 Decorators 対応 (
)。emitDecoratorMetadata - 🆕 現代の構文:
構文サポート(自動トランスパイル)。using - 🔐 自動
ロード (Next.js / Vite と同等)。.env* - 🗂️ バイルトインローダー: YAML, TOML, JSONC, TXT など多様なデータ形式。
- 🌐 Polyfills 対応: Temporal, Worker, URLPattern など(必要に応じて自動付与)。
- 🔥 実験的機能フラグ解除:
, WebSocket, EventSource などをネイティブに。node:sqlite - ⚡ 高速起動: tsx よりも約 2.9 倍高速。
Node.js バージョンの自動推論
プロジェクトの設定に基づき、最適な Node.js バージョンを自動的にインストールして実行します(優先順位に従う)。
(オーバーライド)NODE_EXECUTABLEpackage.json#devEngines.node-version.nvmrcpackage.json#engines
$ echo 26 > .node-version $ nub hello.ts Using Node.js 26.3.0 (resolved from .node-version) Installed in 9.8s Hello world!
モダンな API のサポート状況
| API | ステータス |
|---|---|
| Temporal | Node <26: Polyfill / ≥26: ネイティブ |
| URLPattern | Node <24: Polyfill / ≥24: ネイティブ |
| RegExp.escape | Node <24: Polyfill / ≥24: ネイティブ |
| Error.isError | Node <24: Polyfill / ≥24: ネイティブ |
| Promise.try | Node <24: Polyfill / ≥24: ネイティブ |
| Float16Array | Node <24: Polyfill / ≥24: ネイティブ |
| navigator.locks | Node <24.5: Polyfill / ≥24.5: ネイティブ |
| reportError | Polyfill |
| vm.Module | フラグなしで動作 |
| ShadowRealm | フラグなしで動作 |
| Wasm module imports | Node <24.5: フラグなし / それ以上: ネイティブ |
| WebSocket | Node 20.10: フラグなし / 22+: ネイティブ |
| EventSource | Node 20.18: フラグなし / それ以上: ネイティブ |
| node:sqlite | Node 22.5: フラグなし / 22.13: ネイティブ |
スクリプトランナー (nub run
)
nub runnpm run と pnpm run の高速化版です。JavaScript の起動を伴わない Rust バイナリのため、スクリプトディスパッチを大幅に高速化します(約 24 倍)。
nub run build nub run -r --filter "@org/*" test
パフォーマンス比較 (ベンチマーク: macOS)
| コマンド | 時間 (ms) | 相対性能 |
|---|---|---|
| 14.7 | — |
| 329.9 | 約 22 倍遅い |
| 442.7 | 約 30 倍遅い |
主な機能
- 🚀 高速化: npm/pnpm の検知ラグ(300ms+)を除去。14ms での起動。
- 🔁 ライフサイクル対応:
ハックと完全なpre/post
環境をサポート。npm_* - 🧰 引数転送: ローカルの bin ファイルを PATH に持ち、
セパレータなしで処理。-- - 🗃️ pnpm ワークスペース対応:
,-r
,--filter
,--parallel
等。--workspace-concurrency - 🎯 文法互換性: pnpm のグラフおよび変更セレクター(例:
)を完全サポート。[main]
パッケージランナー (nubx
)
nubxnpx と pnpm dlx を置き換えます。ダウンロードとレジストリフォールバック機能を保持しつつ、Node.js の起動ペナルティを排除します(約 19 倍高速)。
nubx eslint . --fix nubx -y cowsay@1.5.0 "hi" # レジストリから自動フェッチ
パフォーマンス比較 (ベンチマーク: esbuild)
| コマンド | 時間 (ms) | 相対性能 |
|---|---|---|
| 11 | — |
| 191 | 約 17 倍遅い |
| 226 | 約 19 倍遅い |
主な機能
- ⚡ 高速化: ローカル bin の直接実行により、Node.js ラッパーによるラグを回避。
- 🔎 bin ファイル解決: どのマネージャーでインストールされたかを問わず
を探ります。node_modules/.bin - 🌐 レジストリフォールバック: インストールされていないパッケージはフェッチして即座に実行し、破棄します(npx と同等)。
- 🧩 フル互換性: pnpm exec/dlx のすべてのフラグとシェルモードをサポート。
- 🪜 ディレクトリ探索チェーン:
→ ワークスペースルート → 上位ディレクトリを検索。.bin
パッケージマネージャー (nub install
)
nub installAube エンジンにより動作するパッケージマネージャーです。pnpm と互換性があり、約 2.5 倍高速。
nub install nub ci nub add -E -D --save-catalog react nub remove lodash nub update nub dedupe
パフォーマンス比較 (ウォーム・フローズンインストール)
| ツール | 時間 (ms) | 相対性能 |
|---|---|---|
| 1122 | — |
| 1444 | 約 29% 遅い |
| 2847 | 約 2.5 倍遅い |
| 4163 | 約 3.7 倍遅い |
セキュリティ強化
- 🛡️ デフォルトブロック:
スクリプトを無効化。postinstall - 🦠 脆弱性チェック: 既知の悪意のあるパッケージを検出(
)。osv.dev - 🔻 プロヴェナンス制御: Downgrade をデフォルトで拒否。
- ⏳ リリース制限: リリース後の経過時間を最小 24 時間に設定可能。
インキュメントモード (Compatibility Mode)
既存のプロジェクトで
nub install を実行すると、現在のマネージャー(npm/pnpm/yarn/bun)を検出し、その環境設定を尊重します。
| Incumbent | 読み込む設定ファイル |
|---|---|
| npm | , , ワークスペース, engines など |
| pnpm | , , catalog 等 |
| Yarn (read-only) | , 等(読み取り専用) |
| Bun | , 等 |
| Nub | 中立な設定のみ (, ) |
パッケージメタマネージャー (nub pm
)
nub pmCorepack の機能を Rust ネイティブで実装し、プロジェクト固有のパッケージマネージャーバージョンをピン留めします。
nub pm shim
動作:
- プロジェクトで使用されているパッケージマネージャーを検出。
- 必要な場合は適切なバージョンをインストール。
- シャイムエイリアスを通じてコマンドを実行(
と同等)。corepack enable
Corepack は Node.js v25 でアンバンドルされつつありますが、Nub は既存のワークフローを維持するユーザーへの利便性を提供します。
ノードバージョンマネージャー (nub node
)
nub nodeNode.js バージョンを手動または自動で管理できます。インストールされたキャッシュは自動的に利用されます。
$ nub node -h
コマンド:
: 解決されたバイナリのパスを出力which
: キャッシュにバージョンを追加install [<version>]
: キャッシュ内のバージョン一覧を表示ls
: キャッシュから削除uninstall <version>
: プロジェクトのデフォルトをピン留めpin <version>
ライセンス
MIT
⭐️ この記事が気に入ったら、リポジトリにスターしていただけると幸いです!