[Ruby] ruby で ARGV をうけるコマンドっぽいものを作ってみる
memo.
Contents
ARGV をうけとってコマンドっぽく動かす
キチンと書くとどうなるのかググってみた所、下記の書籍のコードを見つけました。
Rubyアプリケーションプログラミング
posted with amazlet at 14.05.14
前田 修吾 まつもと ゆきひろ やまだ あきら 永井 秀利
オーム社
売り上げランキング: 106,912
オーム社
売り上げランキング: 106,912
以前の知識を元に、行頭にパスを付けて chmod +x
してみる。
#!/usr/bin/ruby
if ARGV.size < 2
STDERR.print "Usage: ruby#{$0} user_name password [server]\n"
exit
end
puts user_name = ARGV[0]
puts password = ARGV[1]
puts server = if ARGV[2] then ARGV[2] else 'localhost' end
% chmod +x argv_cmd.rb
実行してみる。
% ./argv_cmd.rb bob tatata iris
bob
tatata
iris
optparse をつかって -a のようなコマンドラインオプションをつかう
OptionParser を使うとよいことが分かったので、さらに調べてみる。
#!/usr/bin/ruby
require 'optparse'
parser = OptionParser.new
parser.version = '0.0.1'
parser.on('-u user', '--user') {|v| OPTS[:u] = v}
parser.on('-p password', '--password') {|v| OPTS[:p] = v}
parser.on('-s [server]', '--server') {|v| OPTS[:s] = v}
parser.parse!(ARGV)
p ARGV[0]
p OPTS
実行。
% ./argv_cmd.rb -s iris -u bob -p tatata filename
"filename"
{:s=>"iris", :u=>"bob", :p=>"tatata"}
さらにディフォルトで、--help
や --version
に対応しているとのこと。
% ./argv_cmd.rb --help
Usage: argv_cmd [options]
-u, --user user
-p, --password password
-s, --server [server]
% ./argv_cmd.rb --version
argv_cmd 0.0.1
おぉ!!
ARGV.getopts をつかう
と手軽に書けるよう。初期値もかけた。
#!/usr/bin/ruby
require 'optparse'
OPTS = ARGV.getopts('', 'user:', 'password:', 'server:localhost')
p ARGV[0]
p OPTS
実行。
% ./argv_cmd.rb -s iris -u bob -p tatata filename
"filename"
{"user"=>"bob", "password"=>"tatata", "server"=>"iris"}
% ./argv_cmd.rb --help
Usage: argv_cmd [options]
--user VAL
--password VAL
--server VAL
エラー時にヘルプを表示する
こちらを参考に、エラーを拾ったらヘルプを表示するよう処理。
OPTS = {}
OptionParser.new do |opt|
begin
opt.version = '0.0.1'
opt.on('-u VAL', '--user', 'user') {|v| OPTS[:u] = v}
opt.on('-p VAL', '--password', 'password') {|v| OPTS[:p] = v}
opt.on('-s [VAL]', '--server', 'server name') {|v| OPTS[:s] = v}
opt.on('-h','--help','show this message') {puts opt; exit}
opt.parse!(ARGV)
rescue => e
puts "ERROR: #{e}.\nSee #{opt}"
exit
end
end
ヘルプの見栄えを整える
いろいろがんばってみる。
% ./argv_cmd.rb --help
Usage: argv_cmd.rb [options] file.csv
Examples:
% argv_cmd.rb -u foo -p bar -s buzz file.csv
Specific options:
-u, --user USER user
-p, --password PASSWORD password
-s, --server SERVER server
Common options:
-h, --help show this help message and exit
-v, --version show program's version number and exit
ぽい感じになった!