Monoでコンソールアプリケーションを作るときにargsの扱いが手間だったので作った。今のところ機能はそれだけ。dllとして書き出しているのでVB.NETやC++.NETでも使える。

shokai / ConsoleLib.NET / overview — bitbucket.org
右上からzipでダウンロードできる。mercurialを使っている人は

hg clone http://bitbucket.org/shokai/consolelibnet/ ./consolelibnet



使用例(ConsoleLibSample.exeのコード)
argsをハイフンなし、ハイフンつきなどを分けてくれる。


動かしてみる。ためしに引数を渡すと

./ConsoleLibSample.exe post -m “hello world” -o out.txt -l -s

こういう風に分割してくれる。

First: post
Switches: l s
Params:
m=hello world
output=out.txt
ARGS: post,-m,hello world,-o,out.txt,-l,-s,


使用例のコードを見ればわかるが、ParamsParserに渡せば分解してくれる。



  • 一番最初の引数。postとか、メソッド名的に使うであろうもの
    → ParamsParser.Firstでアクセスできる。一番最初がハイフンで始まる時はnullを返す。
  • -m “hello world”や-o out.txtの様にhashとして使うであろうもの
    → ParamsParser.ParamsプロパティとしてDictionary(.NETのHash)でアクセスできる。
    ParamsParser.Params[“m”]で”hello world”が取り出せる。
  • -l、-sなどハイフンありの次にハイフン無しの引数が来ない物
    → スイッチ。ParamsParser.Switchesとして、Listでアクセスできる。ParamsParser.hasSwitch(“s”)でtrue/falseで返ってくる。

頭のハイフンは何個付けても全て取り除かれる。

./ConsoleLibSample.exe post -s -l -o out.txt -m “hello world”

のように順番が変わっていても、全て同じように扱える。

-o out.txtとしたのに出力で
output=out.txtとなっているのは、Bindを使っているから。

pp.Bind(“output”, “o”);

これで、-outputでも-oでも、pp.Params[“output”]としてアクセスできる。引数の省略形を定義するのに使える。
もちろん

pp.Bind(“output”, “o”);
pp.Bind(“output”, “out”);

の様に多重にBindも可能。


VS2008で単体テストのとおり今回はテスト駆動開発した。テストコードの方が本体よりも多いが、全然生産性は高く感じる。

今回は特に正規表現を何度も使っているので、1つの関数に3つ4つテストコードが先に書かれている方が一度にチェックできる量が多い。テストは素晴らしい。