nodeを使ってCLIで動くツールを作っている人は多いでしょう。そんな時、デフォルトのnodeでは不便なことも多いです。ルートでasync/awaitが使えなかったり、コマンドを実行して、その結果を受け取るのも面倒です。 そこで使ってみたいのがzxです。Google製のコマンド実行ソフトウェアです。

zxの使い方

サンプルコードです。ルートでasync/awaitを使っています。

#!/usr/bin/env zx

await $`cat package.json | grep name`

let branch = await $`git branch --show-current`

await Promise.all([
  $`sleep 1; echo 1`,
  $`sleep 2; echo 2`,
  $`sleep 3; echo 3`,
])

let name = 'foo bar'
await $`mkdir /tmp/${name}`

実行します。実行権限を付ければ、zxを付ける必要はありません。

$ ./test.mjs 
$ cat package.json | grep name
  "name": "0510",
$ git branch --show-current
master
$ sleep 1; echo 1
$ sleep 2; echo 2
$ sleep 3; echo 3
1
2
3
$ mkdir /tmp/'foo bar'

zxが用意しているのは$`` でコマンド実行をしたり、cd/fetchなどです。questionというコマンドで、ユーザの入力を待つこともできます。コマンドを実行して、その結果を待ってから別な処理を実行することも容易でしょう。

zxはJavaScript製のオープンソース・ソフトウェア(Apache Licnese 2.0)です。

google/zx: A tool for writing better scripts