コマンドラインで指定されたパラメータに名前でアクセスする為の、シンプルなNode.jsのモジュール hash-argをnpmで公開したので御紹介します。
npm便利ですね。若干敷居が高い気がしていましたが、まずはいろんなモジュールを検索して使うところから始めるといいですね。

'hash-arg'はコマンドラインパラメータに名前でアクセスするためのシンプルなnpmモジュールです。
ソースはGitHibに置いています。
はじめに
このモジュールは、コマンドラインオプションの処理をするものではありません。
単純に、コマンドライン引数、または配列の各要素に、前から順に名前を付けてハッシュ(JavaScriptのobject)を返すモジュールです。 追加の機能として、各パラメータの型指定と、省略時の既定値の指定ができますが、基本的には単純なものです。
Node.jsのコマンドラインパラメータは、process.argv[2] 以降に文字列として格納されています([0]と[1]は"node"と、スクリプト名)から、本モジュールにパラメータの定義(名前、型、既定値)だけを与えた場合は、process.argv[2]以降の要素を処理対象とします。
別の配列を与えた場合は、すべての要素を処理します。
オプションが含まれる場合
コマンドライン引数に'-'で始まるようなオプションを含ませたい場合は、先にnode-getoptのようなオプションのパーサーで処理しておいて、そのモジュールが(おそらく)提供している、「オプションではない引数の配列」を、当モジュールで処理させます。
少しだけ気楽になるモジュールです(多分)
オプションではない引数が配列に入っている場合、その要素数をチェックして、必要なパラメータが足りていなかったりすると、エラーにしたり、省略時の既定値を設定したりしますよね。これって、少し邪魔くさい。
本来ザクザク書きたいのはそういうところじゃないはずです。 どの位置に何が指定されていたのか?という情報は、その後、使わない情報ですし。
あと、最初のパラメータなのにprocess.argv[2]とか書いちゃうあの妙な違和感(笑)もどうにかできます。
使い方:単純に'process.argv'を使用する場合
唯一のメソッドgetの第一引数にパラメータ名の定義を与えて呼び出せば、process-argvから値を取り出し、オブジェクトの指定されたキーに値を格納して返します。
(第二引数は省略可能なパラメータの配列です)
simple.js
args = require("hash-arg").get(
"inputFilePath outputFilePath");
console.log(JSON.stringify(args, null, " "));
実行例:
$ node test/simple.js input.json output.json
{
"inputFilePath": "input.json",
"outputFilePath": "output.json"
}
使い方:node-getoptのようなコマンドラインパーサーと共に使用
省略可能な第二引数に、たとえば、node-getoptモジュールの argv プロパティを与えればOK。
with-node-argv.js
getopt = require("node-getopt").create([
['s', '', 'short option'],
['l', 'long', 'long option'],
['S', 'short-with-arg=ARG', 'option with argument']
]).parseSystem();
args = require("hash-arg").get([
"inputFilePath",
{
"name":"outputFilePath",
"default": "out.json"
}
], getopt.argv);
console.log(JSON.stringify(args, null, " "));
実行例:
$ node test/with-node-getopt.js -S DUMMY input.json -sl output.json
{
"inputFilePath": "input.json",
"outputFilePath": "output.json"
}
GET メソッド
呼び出し形式
HashArg.get(<argument-def> [, <argv-source-array>]);
argument-def
パラメータの定義を行う。
単一の文字列、または、文字列配列、または、パラメータ定義オブジェクトの配列を指定できる。
1) 文字列の場合
パラメータのキー名称をスペースで区切った文字列
例)
"inputFilePath outputFilePath"
2) Array of string
各要素がパラメーター名である文字列の配列。
例)
["inputFilePath", "outputFilePath"]
3) Array of definition object
このフォーマットでは、省略時のデフォルト値を指定できます。
デフォルト値が指定されていない場合は、nullが使用されます。
[ {"name":"inputFilePath"}, { "name" : "outputFilePath", "default" : "out.json" } ]
argv-source-array (省略可能)
コマンドラインパラメータを保持する文字列配列。
省略時はprocess.argvが使われます。
※ 注意:v0.0.2以前では、getの第二引数に、process.argvを与えると誤動作します。
定義より多くパラメータが指定されたら
v0.0.3以上では、パラメータ定義の数よりもコマンドラインで指定されたパラメーターが多い場合、未定義のパラメータが、返されるオブジェクトの空文字のキーに配列として保存されます(v0.0.2以前ではそれらは失われていました)。
args = require("hash-arg").get("inputFilePath outputFilePath");
console.log(JSON.stringify(args, null, " "));
実行例:
$ node test/with-node-getopt.js input.json output.json foo bar
{
"inputFilePath": "input.json",
"outputFilePath": "output.json",
"": ["foo", "bar"]
}
ライセンス
MIT
その他
単に利用するだけなら、npm install hash-argでOKですよ。