commander でサブコマンドを持つコマンドを ruby で作成する
commander を使ってサブコマンドを持つコマンドを ruby で作成したときのメモ。 なぜか、commander の日本語のページはあまりない。
インストール
gem install commander
テンプレートの作成
commander init test.rb
とすると test.rb が作成される。「Machine name of program」にはコマンド名を書く。 test.rb の中身は
#!/usr/bin/env ruby
require 'rubygems'
require 'commander/import'
program :version, '0.0.1'
program :description, 'test program'
command :sample-subcommand do |c|
c.syntax = 'machine_name sample-subcommand [options]'
c.summary = ''
c.description = ''
c.example 'description', 'command example'
c.option '--some-switch', 'Some switch that does something'
c.action do |args, options|
# Do something or c.when_called Machine_name::Commands::Sample-subcommand
end
end
のようになる。サブコマンドにハイフンを入れると少し修正が必要。
command :sample-subcommand do |c|
を
command "sample-subcommand" do |c|
のように変更すれば動く。 また、README にあるように空白が入るサブコマンドも設定できる。
command :"gem install" do |c|
コマンドのオプションの設定
c.action do |args, options|
# Do something or c.when_called Machine_name::Commands::Sample-subcommand
end
の args に指定したオプションではないコマンドライン引数が入る。 オプション –some-swich を指定すると
options.some_switch
が true になる。オプション -b で文字列を取得するには
c.option '-b STR', String, 'Example of string'
のように optparse と同じような方法で設定できる。指定された値へのアクセスは
options.b
のようにする。
コマンドのオプションのデフォルト値
c.option '--sample-default STR', String, 'Example of default value'
というようなオプションのデフォルト値は
c.action do |args, options|
options.default(:sample_default => "Default value")
# Do something or c.when_called Machine_name::Commands::Sample-subcommand
end
のように指定する。options.default に渡すハッシュのキーはシンボルでないといけなかった(文字列ではうまくいかない)。
コマンドのグローバルオプション
すべてのサブコマンドで有効なオプションを指定するには global_option を使う。
global_option('--verbose') { $verbose = true }