コンテンツにスキップする

zx の使い方について

投稿時刻2024年12月1日 19:58

zx というツールを紹介します。
シンプルな処理などは zx でスクリプトを書くことができるので便利です。

目次

zx をインストールする

zx をインストールします。
グローバルにインストールしておくと便利です。

$ npm install --global zx

zx のスクリプトの先頭に zx の Shebang を書く

zxShebang をファイルの先頭に書いておけば、ファイルのパスを指定するだけで zx のスクリプトを実行することができます。

#!/usr/bin/env zx

下記のように nodenpx といったコマンドを書かずに済みます。
zx のスクリプトのファイルのパスを指定するだけで実行することができるようになります。

$ ./script/example.js

zx の import は明示的に書く

zx のパッケージの読み込みを明示的に書かなくても、 $cd などの関数は呼び出すことはできますが、明示的に zx のパッケージの読み込みを書くことで VS Code の入力補完が効くようになります。

import "zx/globals";

console.log の代わりに echo でコンソールに出力することもできる

たまに console.log と書くのがめんどうだなと感じますが、それを解決してくれるのが echo です。
echo という短い関数名でコンソールに出力することができます。

echo("Hello world!");

$ でコマンドを実行することができる

$ という関数を呼び出せば、コマンドを実行することができます。

const result = await $`tree -d -L 1`
echo(result);

minimist でコマンドライン引数を解析する

minimist が内蔵されていますので、コマンドライン引数も解析することができます。

const argv = minimist(process.argv.slice(2), {
	string: ["value"],
	alias: {
		v: "value",
	},
});

echo(argv?.value);

下記のようにコマンドライン引数に値を渡して、スクリプトを実行することができます。

$ ./src/example.js --v hey
$ ./src/example.js --value hey

コマンドライン引数を解析して処理をする

コマンドライン引数を解析して処理をする際のコードを書いておきます。

#!/usr/bin/env zx

import "zx/globals";

const argv = minimist(process.argv.slice(2), {
	string: ["message"],
	alias: {
		m: "message",
	},
});

if (!argv?.message) {
	process.exit();
}

echo(argv?.message);

おわりに

zxドキュメントを読むと、色々な機能があります。
個人的にはシンプルな処理であれば zx でスクリプトを書いてしまうことが多いです。


参考記事