コマンドの引数を手軽に扱える commander.js モジュールを試してみる。

The complete solution for node.js command-line interfaces, inspired by Ruby's commander.

commander

今回の環境: Mac OS X Yosemite


$ uname -mrsv
Darwin 14.3.0 Darwin Kernel Version 14.3.0: Mon Mar 23 11:59:05 PDT 2015; root:xnu-2782.20.48~5/RELEASE_X86_64 x86_64

Node.js はインストール済み。


$ node --version
v0.10.29

$ npm --version
1.4.14

npm コマンドで commander モジュールをインストールする。


$ npm install commander
commander@2.8.1 node_modules/commander
└── graceful-readlink@1.0.1

サンプルコード。


$ cat foobar.js

var program = require('commander');

// コマンドライン引数の仕様
// 1文字オプションと複数文字オプションが指定可能
program
  .version('0.0.1')
  .option('-d --date <YYYYMMDD>', 'target date (default now)')
  .option('-n --number <number>', 'number of days (default 1)')
  .option('--force', 'FORCE!!!');

// 引数に渡された値を解析
program.parse(process.argv);

// -d --date オプション
if(program['date']){
  console.log('d => ' + program['date']);
}else{
  console.log('now');
}

// -n --number オプション
if(program['number']){
  console.log('n => ' + program['number']);
}else{
  console.log('n => 1');
}

// --force オプション
if(program['force']){
  console.log('force => ' + program['force']);
}else{
  console.log('force => false');
}

ヘルプは自動生成される。--help か -h オプションで表示できる。


$ node foobar.js --help

  Usage: foobar [options]

  Options:

    -h, --help            output usage information
    -V, --version         output the version number
    -d --date <YYYYMMDD>  target date (default now)
    -n --number <number>  number of days (default 1)
    --force               FORCE!!!

引数の状態によってヘルプを表示したい場合には outputHelp() や help() メソッドを使う方法もある。

バージョンは --version か -V オプションで表示できる。


$ node foobar.js --version
0.0.1

自分で定義したオプションを試してみる。


$ node foobar.js -n 2 -d 20150101 --force
d => 20150101
n => 2
force => true

$ node foobar.js -n 2 -d 20150101
d => 20150101
n => 2
force => false

$ node foobar.js -n 2
now
n => 2
force => false

$ node foobar.js
now
n => 1
force => false

簡単に処理できて便利。

tags: javascript node.js

Posted by NI-Lab. (@nilab)