3月 152010
車輪の再発明臭がヤバイが、コマンドラインの引数のパーサを作ったのでrubygemsに登録した。はじめてgem登録した。
gemでインストールできる。
gem update --system
gem install ArgsParser
newgemコマンドでgemを作ってrubygems.orgに登録し、一応rspecでtestも書いた。
gemはrubyforge.orgで公開するのが普通だったけど、2年ぐらい前からgithubでgemが作れる様になったので新しいプロジェクトはみんなgithubに行って、2009年秋?頃にgithubでgemがビルドできなくなったからかrubygems.orgでやってねという事になったらしい。
なのでリポジトリはいつも使っているmercurialにしてbitbucket.orgで公開する事にした。
shokai / argsparser-ruby / overview — bitbucket.org
既にgemにはいくつかCのgetopt風なARGVのparserがあるけど、なんとなくインタフェースが好きじゃないので自分が欲しい物を作った。
- –help -debug等のオプションの有無を判別する
- -x 320 -y 240 等のパラメータ(key value)を取得する
- -hと-helpのように省略名称が関連づけられていれば同じ物として扱う
- -helpと—helpのようなハイフンの数の違いを無視して、全て :help でアクセスできる
- ruby math.rb add -a 10 -b 25 の”add”のような、第一引数を取り出す
- パラメータ名にコメント文を付ける(-helpで起動した時の引数の説明文に使う)
parseすると、第一引数(String)とパラメータ(Hash)が返ってくる。第一引数がない(いきなりパラメータが来た)場合は、第一引数はnilになる。
example.rb
#!/usr/bin/env ruby
require 'rubygems'
require 'ArgsParser'
# 必要なパラメータ名を登録する
parser = ArgsParser.parser
parser.bind(:help, :h, "show help") # name, shortname, comment for help
parser.bind(:frame, :f, "frame image (required)")
parser.bind(:message, :m, "message (required)")
parser.bind(:size, :s, "size (required)")
parser.comment(:min, "minimum size") # add comment for help
parser.comment(:max, "maximum size")
parser.comment(:debug, "debug mode")
# parseして、引数が足りてるか、help表示指定が無いかチェック
first, params = parser.parse(ARGV)
if parser.has_option(:help) or !parser.has_params([:frame, :message, :size])
puts parser.help
puts 'e.g. ruby example.rb -f frame.png -m "hello world" -s 320x240 -debug'
exit 1
end
if first
puts 'first arg : ' + first # 第一引数
end
if parser.has_param(:size)
puts 'size : ' + params[:size] # -sでも-sizeでも :size でアクセスできる
end
# 全ての引数を表示
p params
実行してみる
ruby example.rb hoge -f frame.png -m "hello world" -s 320x240 -debug結果
first arg : hoge
size : 320x240
{:message=>"hello world", :size=>"320x240", :debug=>true, :frame=>"frame.png"}