Node.jsでコマンドライン引数を取得するときに便利なCommanderの紹介

Node.jsでコマンドライン引数を取得するときに Commander を利用すると便利だったので紹介。

やりたいこと

例えばあるNode.jsアプリで、以下をコマンドラインのオプションとして指定したいとする。

  • ボットを含む場合は、-ib オプションを付与する
  • 開始日を -s 2020-01-01 のように指定したい。-s オプションの指定がない場合は 1900-01-01 がデフォルで指定される
  • 終了日を -e 2020-01-01 のように指定したい。デフォルトはなし

実際のコード

var program = require('commander');

program
  .version('0.0.1')
  .option('-s, --start [date]', 'history start [2020-10-28]', '1900-01-01')
  .option('-e, --end [date]', 'history end [2020-10-28]')
  .option('-ib, --include-bot', 'include bot messages')
  .parse(process.argv);

console.log('@@@args@@@')
if (program.includeBot) console.log('include-bot')
console.log('start: %s', program.start)
if (program.end) console.log('end: %s', program.end)

option の第二引数は、以下のようにヘルプの文章として表示される。

$ node app.js -h
Usage: app [options]

Options:
  -V, --version       output the version number
  -s, --start [date]  history start [2020-10-28] (default: "1900-01-01")
  -e, --end [date]    history end [2020-10-28]
  -ib, --include-bot  include bot messages
  -h, --help          display help for command

-s のようにデフォルト値がある場合は、第三引数に指定する。