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 runpnpm runnpx、および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サポート: enumnamespace、拡張子なしのインポート、およびtsconfig.json#pathsの解決をフルサポートしています。
  • モダンAPI: Nubは、古いNode.jsバージョンにおいてTemporalURLPattern、およびRegExp.escapeなどのAPIを自動的にポリフィルし、node:sqlitevm.Module、およびWebSocketなどの実験的なNode.js機能をアンフラグ(unflags)します。
  • 環境変数管理: .env*の自動読み込みが組み込みとして提供されており、Next.jsやViteとの同等性を提供します。

統合されたNode.jsエコシステム管理

Nubは、断片化されたいくつかのツールを単一のバイナリに集約し、プロジェクトの依存関係とNode.jsランタイム自体の両方を管理します。

Node.jsバージョン管理

Nubは、nvmfnmと同様のバージョンマネージャーとして機能します。nub node installを介して手動でバージョンをプロビジョニングしたり、.node-version.nvmrcpackage.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ネイティブな実装で提供し、npmyarn、およびpnpmのグローバル・シム(shim)を登録することで、特定のプロジェクトにおいて正しいバージョンのパッケージマネージャーが使用されることを保証します。

Sources