コマンドラインで指定されたパラメータに名前でアクセスする為の、シンプルな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ですよ。