Nub: Rust搭載のNode.js向けオールインワン・ツールキット
Nub: Rust搭載のNode.js向けオールインワン・ツールキット
Nubは、Rustで記述された高速なオールインワン・ツールキットであり、Node.jsランタイムを置き換えるのではなく、標準のNode.jsランタイムを拡張するものです。BunやDenoと同様の開発者体験(DX)を提供することを目指しており、組み込みのTypeScriptサポート、高性能なパッケージマネージャー、統合されたバージョン管理を提供しつつ、既存のNode.jsエコシステムとの完全な互換性を維持し、ベンダー固有のAPIへのロックインを回避します。
高性能なツール群とベンチマーク
Nubは、Node.jsプロセスの起動に伴う遅延を排除するため、いくつかの一般的なJavaScriptベースのツールをRustバイナリに置き換えています。これにより、開発ライフサイクル全体で大幅なパフォーマンス向上が実現します。
スクリプトおよびパッケージの実行
Nubのスクリプトランナー(nub run)とパッケージランナー(nubx)は、npm run、pnpm run、npx、およびpnpm dlxのドロップイン・リプレースメントとして設計されています。
- スクリプト・ディスパッチ:
nub runは、pnpm runより約24倍、npm runより約22倍高速です。ウォーム状態でのディスパッチ時間は、npmの329.9msに対し、nub runは14.7ms、pnpmは442.7msです。 - パッケージ実行:
nubxは、二重のNode.js起動のペナルティを排除することで、ローカルバイナリをnpxよりも約19倍高速に実行します。
パッケージ管理
nub installは、Aubeエンジンを搭載しており、pnpmと互換性のあるフラグを備えた置き換えツールです。222個の依存関係を持つプロジェクトのウォームなフローズン・インストールのベンチマークでは、Nubは他のマネージャーを凌駕しました:
| Tool | Time | Relative Performance |
|---|---|---|
| Nub | 1122 ms | — |
| Bun | 1444 ms | 29% slower |
| pnpm | 2847 ms | 2.5× slower |
| npm | 4163 ms | 3.7× slower |
TypeScriptファーストなNode.jsランタイム
Nubを使用すると、開発者は.ts、.tsx、.js、および.jsxファイルを、個別のビルドステップなしで直接実行できます。起動速度はtsxよりも2.9倍高速です。
技術的実装
Nubは、現代的なNode.js拡張インターフェースを活用して拡張機能を提供します:
- トランスパイル: 事前トランスパイルのために
oxcライブラリを組み込んでいます。 - フック: カスタムのトランスパイルと解決のために、
module.registerHooks()および--import/--requireプリロードを使用します。 - ネイティブ・アドオン: RustベースのロジックをNode.jsプロセスに統合するために、N-APIネイティブ・アドオンを利用します。
言語およびAPIサポート
Nubは、現代的なJavaScriptおよびTypeScriptの機能に対して包括的なサポートを提供します:
- TypeScriptサポート:
enum、namespace、拡張子なしのインポート、およびtsconfig.json#pathsの解決をフルサポートしています。 - モダンAPI: Nubは、古いNode.jsバージョンにおいて
Temporal、URLPattern、およびRegExp.escapeなどのAPIを自動的にポリフィルし、node:sqlite、vm.Module、およびWebSocketなどの実験的なNode.js機能をアンフラグ(unflags)します。 - 環境変数管理:
.env*の自動読み込みが組み込みとして提供されており、Next.jsやViteとの同等性を提供します。
統合されたNode.jsエコシステム管理
Nubは、断片化されたいくつかのツールを単一のバイナリに集約し、プロジェクトの依存関係とNode.jsランタイム自体の両方を管理します。
Node.jsバージョン管理
Nubは、nvmやfnmと同様のバージョンマネージャーとして機能します。nub node installを介して手動でバージョンをプロビジョニングしたり、.node-version、.nvmrc、package.json#engines、またはpackage.json#devEnginesから必要なNode.jsバージョンを自動的に推論して、その場でインストールしたりすることができます。
パッケージマネージャーの互換性
Nubは「compat-mode」で動作することができ、ロックファイルやpackage.jsonの設定に基づいて、既存のパッケージマネージャー(npm、pnpm、Bun、またはYarn)を検出します。このモードでは、既存のツールの特定の構成ファイル(例:pnpm-lock.yamlまたはbunfig.toml)や環境変数を尊重します。
パッケージ・メタ管理
Nubは、nub pm shimを通じて、Corepackの機能をRustネイティブな実装で提供し、npm、yarn、およびpnpmのグローバル・シム(shim)を登録することで、特定のプロジェクトにおいて正しいバージョンのパッケージマネージャーが使用されることを保証します。