最近注目を集めているツール zx について、@spring_raining が @T28_tatsuya に聞いてみました。
google/zx について
- https://github.com/google/zx
- @T28_tatsuya による zx についての解説 https://t28.dev/write-script-using-zx/
- JavaScriptを使ってShell scriptのようにスクリプトを書くことができるライブラリ
- zxが実行できるファイル形式
- JavaScript (.js, .mjs)
- JavaScriptの場合、拡張子でcommonjsで書くかesmoduleで書くか選べる
- esmoduleであればtop-level awaitが使える
- TypeScript (.ts)
- Markdown (.md)
- 標準入力
- JavaScript (.js, .mjs)
- Shellコマンドの実行以外にも、スクリプトを書く上で便利なライブラリをglobalで参照出来るようにしてくれている
- argv: minimist を使った引数、オプションの受け取り
- question: 対話型プログラムを作るための nodeのreadlineのwrapper
- fetch: node-fetchを使用
- polyfill:
__dirname
など
実際の活用例について
- Markdown ファイルの js の code block 内のスクリプトを zx に実行させる形式で書いている
- 見出しのレベルで上から概要、スクリプトのパートに分けて、使い方や参考情報も JavaScript で書いたスクリプトも 1 つの Markdown ファイルに収めるようにしている
- Markdown を実行するという構成をとった理由
zxのソースを見てみる
- めちゃくちゃシンプル
- Markdown 対応はテキスト処理でゴリ押し
- TypeScript 対応は
npx -p typescript tsc
で丸投げ - js 拡張子以外は、一旦 mjs ファイルに書き出して実行しているので、top-level await が使える
今後の zx に対する期待
- 実行環境のポータブル化
- Deno compile (シングルバイナリ作成機能) のようなもの
Deno 1.7 Release Notes https://deno.com/blog/v1.7
- あるいは zx が Deno に対応すればこの機能を利用できるようになる?
- Deno compile (シングルバイナリ作成機能) のようなもの
- イケてるスクリプトを書くための機能追加
- question() で入力値のバリデーションが出来たり、処理中の標準出力を簡単におしゃれにしたり…
- でも、必要な機能は十分備えている認識だから、今ぐらいシンプルでもいいかも
Refs
- LINE 新卒採用 2022
- キャリア採用はこちらから
- BGM&SE
- 魔王魂/騒音のない世界/OtoLogic