npm代替を目指すパッケージマネージャvltを触ってみた
こんばんは、情報システム室の夏目です。
今月頭、npmに変わる新しいJavaScriptのパッケージマネージャvltのv1.0のリリースがありました。
今回はこのvltを触ってみました。
vltとは
vlt technologyが開発しているnpm互換のパッケージマネージャです。
npm互換であるため、既存のツールなどでもそのまま使用することができます。
また、インストールもnpmよりも高速で行います。
vltというパッケージマネージャとvltレジストリというサービスの二段構えになっています。
vltレジストリ
vltはデフォルトでnpmレジストリのミラーであるvltレジストリを参照します (vltレジストリもnpmレジストリ互換であるためnpmと同様に扱える)。
vltレジストリではユーザーに近いエッジロケーションからパッケージを配布するためnpmレジストリよりも高速でダウンロードできます。
vltレジストリ以外のレジストリを使用することもできます。
また、vtlレジストリではマルウェアを含まない安全なJavaScriptレジストリの提供を目指しており、OSVなどの脆弱性データベースなどを参照して不正なmanifestやマルウェアを排除するようになっています。
vltレジストリはプライベートレジストリの機能もあり、無料プランであれば2GBまで使用可能です。
使ってみる
vltでvltレジストリを使用するにはアカウントを作成し。
アカウントを作成する
https://www.vlt.io にアクセスします。

右上の SignUp をクリックします。

GithubやGoogleの認証を使用するか、メールとパスワードで認証をするかを選びます。
今回はメールとパスワードで進めるので、入力してから Continue をクリックします。

Verifyのためにメールが届くので、メールを確認してVerify用の数字をコピペします。

アカウントの作成画面になるので、必要項目を入力します。
また、プランを選択できるので今回は Free を選択します。
その後、 Create をクリックします。

アカウントが作成され、ダッシュボードが表示されます。
vlt インストールする
$ npm install -g vlt
vltのインストールはこれだけです。
次にセットアップをします。
$ vlt setup
Sign up or log in at https://www.vlt.io before continuing.
vlt.io account or organization slug: cm-natsume-yuta
Authenticate with your vlt.io account now? (Y/n)
Each registry is authenticated separately, so the browser opens once per registry.
First, let's authenticate your public npm registry mirror ("npm")...
Opening a web browser to: https://www.vlt.io/auth/cli-login/AaATt3X4cfi32RonAFy9nA
Now let's authenticate your private registry ("main")...
Opening a web browser to: https://www.vlt.io/auth/cli-login/AaATt44ScF6ey6q8mJUdog
Add another registry alias? (y/N)
Configured 2 registry aliases for "cm-natsume-yuta" in user config:
npm -> https://registry.vlt.io/cm-natsume-yuta/npm/
main -> https://registry.vlt.io/cm-natsume-yuta/main/
You can now install packages, e.g.:
vlt install <pkg>
vlt.io で認証を通し、vltレジストリを使用可能にしました。
(ブラウザで認証を行います)
これでvltを使えるようになりました。
vltを使ってみる
npmと互換性があるということなので、今回はViteでReactのプロジェクトを作ってみます。
$ vlt create vite@latest
About to install: create-vite@latest
from: https://registry.vlt.io/cm-natsume-yuta/npm/create-vite/-/create-vite-9.1.2.tgz
into: ~/Library/Application Support/vlt/vlx/create-vite-66bc37d0
Is this ok? (y) y
│
◇ Project name:
│ trial-vlt
│
◇ Select a framework:
│ React
│
◇ Select a variant:
│ TypeScript + React Compiler
│
◇ Which linter to use?
│ Oxlint
│
◇ Install with npm and start now?
│ No
│
◇ Scaffolding project in /Users/natsume.yuta/spaces/tmp/013/trial-vlt...
│
└ Done. Now run:
cd trial-vlt
npm install
npm run dev
vltでもnpmと同様にプロジェクトの作成ができました。
次に、依存ライブラリのインストールを行ってみます。
$ cd trial-vlt
$ ll
.rw-r--r--@ 361 natsume.yuta 2026-08-18 16:17 index.html
.rw-r--r--@ 681 natsume.yuta 2026-08-18 16:17 package.json
drwxr-xr-x@ - natsume.yuta 2026-08-18 16:17 public
.rw-r--r--@ 1.3k natsume.yuta 2026-08-18 16:17 README.md
drwxr-xr-x@ - natsume.yuta 2026-08-18 16:17 src
.rw-r--r--@ 655 natsume.yuta 2026-08-18 16:17 tsconfig.app.json
.rw-r--r--@ 119 natsume.yuta 2026-08-18 16:17 tsconfig.json
.rw-r--r--@ 558 natsume.yuta 2026-08-18 16:17 tsconfig.node.json
.rw-r--r--@ 286 natsume.yuta 2026-08-18 16:17 vite.config.ts
$ vlt install
resolving dependencies ✓ > extracting files ✓
72 cache hits
113 requests
Done in 12095ms
📦 1 packages have install scripts defined & were not fully built
🔎 Run `vlt query :scripts` to list them
🔨 Run `vlt build` to run all required scripts to build installed packages.
$ ll
.rw-r--r--@ 361 natsume.yuta 2026-08-18 16:17 index.html
drwxr-xr-x@ - natsume.yuta 2026-08-18 16:20 node_modules
.rw-r--r--@ 681 natsume.yuta 2026-08-18 16:17 package.json
drwxr-xr-x@ - natsume.yuta 2026-08-18 16:17 public
.rw-r--r--@ 1.3k natsume.yuta 2026-08-18 16:17 README.md
drwxr-xr-x@ - natsume.yuta 2026-08-18 16:17 src
.rw-r--r--@ 655 natsume.yuta 2026-08-18 16:17 tsconfig.app.json
.rw-r--r--@ 119 natsume.yuta 2026-08-18 16:17 tsconfig.json
.rw-r--r--@ 558 natsume.yuta 2026-08-18 16:17 tsconfig.node.json
.rw-r--r--@ 286 natsume.yuta 2026-08-18 16:17 vite.config.ts
.rw-r--r--@ 54k natsume.yuta 2026-08-18 16:20 vlt-lock.json
依存ライブラリのインストールができました。
体感的にはnpmでインストールするときよりも高速に感じます。
vltではロックファイルは vlt-lock.json であるようです。
vltレジストリを使わずにインストールしてみる
一端インストールしたものと、ローカルのキャッシュを削除してみます。
$ rm -rf node_modules
$ rm vlt-lock.json
$ vlt cache delete-all
削除したので、vltレジストリを使わずにインストールしてみます。
# 自分の環境のnpmは `npm.flatt.tech` というレジストリを使用しているのでそちらを使う
$ vlt install --registry=https://npm.flatt.tech/
resolving dependencies ✓ > extracting files ✓
185 requests
Done in 6657ms
📦 1 packages have install scripts defined & were not fully built
🔎 Run `vlt query :scripts` to list them
🔨 Run `vlt build` to run all required scripts to build installed packages.
vltレジストリを使ったときで約12秒, npm.flatt.tech を使ったときで約6秒でした。
vltレジストリを使わずとも、npmの代わりにvltを使うだけでも高速化できそうです。
インストールの速さを計測してみる
vltリポジトリを使わずとも高速化できているようなので、ちょっと計測をしてみます。
- 計測を行うのは
install(ロックファイルの生成も行う) とci(ロックファイルからインストールを行う) コマンドの二つ - インストールを行う前にローカルのキャッシュを消す
- レジストリは
npm.flatt.techを使用する - 100回実行して計測する
timeを使って計測する
上記条件で実行してみます。
またそれぞれにおいてシェルスクリプトを書いていますが、実際に計測に使用したものではありません。
実際の計測ではPythonでループを組んでsubprocessでコマンド実行させて計測を行いました。
ここに記載しているのは、あくまで実行した内容を再現するシェルスクリプトです。
npm install
#!/usr/bin/env bash
rm -rf node_modules
rm -f package-lock.json
npm cache clean --force
time npm install
| (秒) | 最大 | 最小 | 平均 | 中央 |
|---|---|---|---|---|
| real | 30.98 |
8.949 |
14.59186 |
13.2525 |
| user | 4.83 |
3.234 |
3.76756 |
3.6675 |
| sys | 2.04 |
1.359 |
1.57868 |
1.5345 |
npm ci
#!/usr/bin/env bash
rm -rf node_modules
npm cache clean --force
time npm ci
| (秒) | 最大 | 最小 | 平均 | 中央 |
|---|---|---|---|---|
| real | 4.263 |
1.696 |
2.2996 |
2.066 |
| user | 1.327 |
0.773 |
0.9555 |
0.944 |
| sys | 1.077 |
0.746 |
0.8300 |
0.817 |
vlt install --registry=https://npm.flatt.tech/
#!/usr/bin/env bash
rm -rf node_modules
rm -f vlt-lock.json
vlt cache delete-all
time vlt install --registry=https://npm.flatt.tech/
| (秒) | 最大 | 最小 | 平均 | 中央 |
|---|---|---|---|---|
| real | 5.459 |
1.298 |
2.10001 |
1.98 |
| user | 1.801 |
0.704 |
0.88893 |
0.89 |
| sys | 1.045 |
0.706 |
0.76334 |
0.76 |
vlt ci --registry=https://npm.flatt.tech/
#!/usr/bin/env bash
rm -rf node_modules
vlt cache delete-all
time vlt ci --registry=https://npm.flatt.tech/
| (秒) | 最大 | 最小 | 平均 | 中央 |
|---|---|---|---|---|
| real | 7.09 |
0.825 |
2.12396 |
2.02 |
| user | 1.27 |
0.433 |
0.94349 |
0.98 |
| sys | 1.04 |
0.607 |
0.83277 |
0.86 |
計測結果をまとめる
4つの計測結果を real の値でまとめると次のようになります
| (秒) | 最大 | 最小 | 平均 | 中央 |
|---|---|---|---|---|
npm install |
30.98 |
8.949 |
14.5919 |
13.253 |
npm ci |
4.26 |
1.696 |
2.2996 |
2.066 |
vlt install |
5.46 |
1.298 |
2.1000 |
1.975 |
vlt ci |
7.09 |
0.825 |
2.1240 |
2.019 |
ロックファイルの生成を伴う install は明確に早くなっています。
ci ではそこまで差がないようです。
まとめ
以上、vltを触ってみた話でした。
何かのお役に立てれば幸いです。
引用
- npm代替を目指すセキュリティファーストなパッケージマネージャ「vlt」バージョン1.0に到達。npmのミラーレジストリ、プライベートレジストリも提供開始 - Publickey




