栗ご飯のイラスト

新しいパッケージマネージャーの vlt を使ってみる

vlt は npm と互換性のあるパッケージマネージャーです。`npm` と同じように、パッケージのインストールや script の実行ができます。また、npm registry 互換のサーバーレジストリである vsr も同時に提供されています。

vlt は npm と互換性のあるパッケージマネージャーです。npm と同じように、パッケージのインストールや script の実行ができます。また、npm registry 互換のサーバーレジストリである vsr も同時に提供されています。

vlt と vsr が開発されたモチベーションとして、npm の registry に問題があり、これを解決するためであると述べられています。詳細は以下のブログを確認してください。

この記事ではクライアント側の vlt について紹介します。vlt は npm vsr を使用せずに npm registry からパッケージをインストールできます。

vlt をインストールする

以下のコマンドを実行することで、vlt をインストールできます。現在 vlt は Node.js の v20 と v22 でサポートされています。

npm install -g vlt

以下のコマンドで正常にインストールされたか確認してみましょう。

vlt --version
0.0.0-0.1730830331789

vlt でパッケージをインストールする

vlt は npm と同じように、install コマンドを使ってパッケージをインストールできます。デフォルトでは public npm registry からパッケージをインストールするため、npm で公開されているパッケージをそのまま利用できます。

パッケージをインストールする前にプロジェクトルートに package.json ファイルが存在している必要があります。

echo "{}" > package.json

package.json ファイルが作成されたら、以下のコマンドで lodash パッケージをインストールしてみましょう。

vlt install lodash

インストールが完了すると、package.json ファイルの dependencies フィールドに lodash が追加され、vlk-lock.json ファイルが作成されます。

{
  "dependencies": {
    "lodash": "^4.17.21"
  }
}

--save-dev もしくは -D オプションを付けることで、devDependencies フィールドにパッケージを追加することもできます。

vlt install --save-dev @types/lodash

vlt でスクリプトを実行する

それではインストールした lodash パッケージを使ったスクリプトを実行してみましょう。mains.js ファイルを作成し、以下のコードを記述します。

const { sum } = require("lodash");
 
const array = [1, 2, 3, 4, 5];
 
console.log(sum(array));

続いて package.json ファイルに scripts フィールドを追加し、start スクリプトを定義します。

{
  "scripts": {
    "start": "node main.js"
  }
}

vlt run <script> コマンドを使って package.json ファイルに定義されたスクリプトを実行できます。

vlt run start

スクリプトを実行すると、コンソールに以下のような出力が表示されるはずです。

15
{
  command: 'node main.js',
  args: [],
  cwd: '/vlt-example',
  stdout: null,
  stderr: null,
  status: 0,
  signal: null,
  pre: undefined
}
{
  "command": "node main.js",
  "args": [],
  "cwd": "/vlt-example",
  "stdout": null,
  "stderr": null,
  "status": 0,
  "signal": null
}

ローカルにインストールされていないパッケージを利用する

vlx コマンドを使うと、npx と同じようにローカルにインストールされていないパッケージを利用できます。

vlx serve

パッケージの依存関係を表示する

vlt query コマンドを使用すると、様々な方式でパッケージの依存関係を表示できます。デフォルトでは human-readable な形式で表示されます。

 vlt query
file·.
├─┬ [email protected]
│ └─┬ [email protected]
│   └── [email protected]
├── [email protected]
├─┬ [email protected]
│ ├── [email protected]
│ ├── [email protected]
│ ├─┬ [email protected]
│ │ ├─┬ [email protected]
│ │ │ └── [email protected]
│ │ └── [email protected]
│ ├── [email protected]

サブコマンドを使用することで、特定のパッケージのみを表示することも可能です。例えば以下のコマンドでは、react パッケージの依存関係のみを表示します。

vlt query '#react'
file·.
└── [email protected]

以下のコマンドは cookie という名前から始まるパッケージをクエリします。

vlt query '[name^="cookie"]'
file·.
└─┬ [email protected]
  ├── [email protected]
  └── [email protected]

build コマンドが依存するプロジェクトの依存関係をすべて表示することもできます。

vlt query ':project > *:attr(scripts, [build])'

結果のフォーマットを変更する

--view オプションを使用することで、結果のフォーマットを変更できます。humanjsonmermaidgui のいずれかを指定でき、デフォルトは human です。

mermaid オプションで実行すると、以下のように Mermaid の形式で出力されます。

vlt query --view=mermaid
flowchart TD
file%C2%B7.("root:file·.")
file%C2%B7.("root:file·.") -->|"react#64;^18.3.1 (prod)"| %C2%B7%C2%B7react%4018.3.1("npm:react#64;18.3.1")
%C2%B7%C2%B7react%4018.3.1("npm:react#64;18.3.1")
%C2%B7%C2%B7react%4018.3.1("npm:react#64;18.3.1") -->|"loose-envify#64;^1.1.0 (prod)"| %C2%B7%C2%B7loose-envify%401.4.0("npm:loose-envify#64;1.4.0")

この出力を Mermaid Live Editor に貼り付けることで、依存関係をグラフィカルに表示できます。

gui オプションを使用すると、http://localhost:7017 を起動して、ブラウザで結果を表示できます。

vlt query ':project > :is(*[name="express"])' --view=gui

vlt の config を設定する

vlt のコマンドを実行する際にはいくつかの設定を指定できます。例えば --no-color オプションを使うことで、カラー出力を無効にできます。

vlt run start --no-color

このような設定はプロダクトのルートに vlt.json ファイルが存在する場合、その値を参照します。

vlt config set コマンドにより、vlt.json ファイルに設定を書き込むことができます。

vlt config set no-color=true

コマンドを実行すると、vlt.json ファイルが作成され、以下のような内容が書き込まれます。

{
  "color": false
}

vlt.json ファイルに設定を書き込むことで、vlt のコマンドを実行する際に設定を指定する必要がなくなります。

まとめ

参考

記事の理解度チェック

以下の問題に答えて、記事の理解を深めましょう。

vlt install コマンドを実行した際に生成される lock ファイルの名前は次のうちどれか?

  • package-lock.json

    もう一度考えてみましょう

  • vlk-lock.json

    正解!

  • vlt.json

    もう一度考えてみましょう

  • vlt.lock

    もう一度考えてみましょう

vlt でパッケージをローカルにインストールせずに実行するためのコマンドは次のうちどれか?

  • vlt exec <pkg>

    もう一度考えてみましょう

  • vlt run <pkg>

    もう一度考えてみましょう

  • vlx <pkg>

    正解!

  • vlt <pkg>

    もう一度考えてみましょう


Contributors

> GitHub で修正を提案する
この記事をシェアする
はてなブックマークに追加

関連記事