Node.js v18.3.0でutilモジュールにparseArgsというものが生えた。コマンドライン引数(のような配列)をパースできる。minimistくらいで済んでいるものは置き換えられそうだ。
例えば以下のような引数と出力のコードを考えてみる。真偽値と、文字列、2語のもの、加えてオプションではない引数が最後に付くものだ。
$ node ./test.js --boolean --string 'Test' --two-words -- 'Rest' '--of' 'Test' true Test true Rest --of Test
minimistの場合は以下のように書ける。
import minimist from "minimist";
const {
_: rest,
boolean,
string,
"two-words": twoWords
} = minimist(process.argv.slice(2), {
alias: {
b: "boolean",
s: "string"
},
boolean: [
"boolean",
"two-words"
],
string: [
"string"
]
});
console.log(boolean, string, twoWords, ...rest);
対してutil.parseArgs
では以下のように書ける。
import { parseArgs } from "node:util";
const {
positionals: rest,
values: {
boolean,
string,
"two-words": twoWords
}
} = parseArgs({
allowPositionals: true,
options: {
boolean: {
short: "b",
type: "boolean"
},
string: {
short: "s",
type: "string"
},
"two-words": {
type: "boolean"
}
}
});
console.log(boolean, string, twoWords, ...rest);
コード量はあまり変わらない。--foo-barのようなオプションの書き方もほぼ同じだ。minimistでstopEarlyや--を使っていないなら、簡単に置き換えられる。私見ではオプションごとに定義できるutil.parseArgs
の方が書きやすい。ただし、minimistでは引数が省略された時の既定の値を指定できるが、util.parseArgs
では指定できないなど、周辺のコードに影響を与える違いもある。