Commander.jsを使用してNode.jsのCLI引数を処理する
UI開発者 佐竹Node.jsのCLI引数を処理するライブラリはいろいろありますが、今回はその中の1つとしてCommander.jsをご紹介します。
動作環境はWindowsです。
例として、以下のように引数を設定してコマンドを実行します。
node main.js argument1 argument2 --optionName argument3 --boolOption
Node.jsのprocessオブジェクトでCLI引数を取得する
まずライブラリを使用しない場合から説明します。
以下はコマンドから実行されるスクリプト(main.js)です。
console.log(process.argv);
スクリプトではNode.jsの process
オブジェクトの argv
プロパティで取得したCLI引数をコンソールに出力しています。
出力結果は以下になります。
['path/to/node.exe', 'path/to/main.js', 'argument1', 'argument2', '--option', 'argument3']
main.jsで使いたい引数は argument1
と argument2
だけですが、 process.argv
では全ての値を引数として取ってきます。
そのため、もし argument1
argument2
を取ってくる場合には対象の引数の位置を確認しながら以下のようにします。
console.log(process.argv[2]); // argument1
console.log(process.argv[3]); // argument2
Commander.jsでCLI引数を取得する
次にCommander.jsを使用してCLI引数を取得する場合を説明します。
以下はコマンドから実行されるスクリプト(main.js)です。
import {program} from "commander";
program.parse(process.argv);
console.log(program.args);
スクリプトでは取得したCLI引数をCommander.jsでパースしてからコンソールに出力しています。
出力結果は以下になります。
['argument1', 'argument2']
このように argument1
argument2
だけを取得できます。
Commander.jsでオプションのCLI引数を取得する
今度はCommander.jsを使用してオプションのCLI引数を取得する場合を説明します。
オプションの定義では、オプション名を設定したり、オプションの説明を設定したりすることができます。
以下はコマンドから実行されるスクリプト(main.js)です。
import {program} from 'commander';
program
.option('-o, --optionName <optionValue>', 'オプションの説明', 'default')
.option('-b, --boolOption', 'オプションの説明', false);
program.parse();
const options = program.opts();
console.log(options.optionName);
console.log(options.boolOption);
スクリプトではオプションを定義した後に、取得したCLI引数をCommander.jsでパースしてからコンソールに出力しています。
出力結果は以下になります。
argument3
true
オプションは .option()
メソッドで定義し、 program.opts().オプション名
で取得します。
先ほどの例ではオプションの定義として、以下を設定しています。
.option('-短いオプション名, --オプション名 <値>', 'オプションの説明', 'デフォルト値');
--オプション名
の後に角括弧で<値>
をつけた場合、program.opts().オプション名
はオプションのCLI引数の値を取得します。
.option('-短いオプション名, --オプション名', 'オプションの説明', 'デフォルト値');
--オプション名
の後に角括弧の<値>
をつけなかった場合、program.opts().オプション名
はオプションが設定されているかの判定をします。
使用目的がわかるようにオプション名を命名にすると、コマンドのオプション名からCLI引数が何の値なのか推測しやすくなります。
短いオプション名、オプションの説明、デフォルト値は省略可能です。
詳細はCommander.jsのオプションの定義でご確認ください。
Node.jsでオプションのCLI引数を取得する
最後に、ライブラリを使わずにNode.jsで引数を扱うためのutil.parseArgs([config])という方法を参考までにご紹介します。
※ parseArgs
は現段階の最新バージョン(v18.13.0 LTS)では、安定指数が「実験的」となっており本番環境での使用は推奨されていないためご注意ください。
例として、以下のように引数を設定してコマンドを実行します。
node main.js --optionName argument1 --boolOption
以下はコマンドから実行されるスクリプト(main.js)です。
import {parseArgs} from 'node:util';
const {
values: {
optionName,
boolOption
}
} = parseArgs({
options: {
optionName: {
type: 'string',
short: 'n',
default: 'default'
},
boolOption: {
type: 'boolean',
short: 'b',
default: false
}
}
});
console.log(optionName);
console.log(boolOption);
スクリプトではオプションを定義した後に、取得したCLI引数をパースしてからコンソールに出力しています。
出力結果は以下になります。
argument1
true
構成の詳細はNode.jsのutil.parseArgs([config])でご確認ください。
まとめ
今回はCLI引数の処理方法としてCommander.jsを取り上げました。CLI引数が使用できると、コマンドから動的な値を送ることができるので、値に合わせて処理を分けるなどの使い回しがしやすくなります。またこのような処理がライブラリでなくても書けるようになってきていますので、今後の動向を見ながら、効率、品質、処理スピードなどを考慮してライブラリを使用する、しないなどを検討していきたいです。