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

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でスクリプトを書いてしまうことが多いです。


参考記事