概要
書籍 Build Awesome Command-Line Applications in Ruby2
章
Make Configration Easy
詳細
外部設定ファイルを利用すると、ユーザーはコマンドラインの引数やオプションを与えることなく
アプリケーションの振る舞いを制御できる。
例えばあるオプションや引数を毎回指定して利用するようなケースが考えられるなら、
その内容を設定可能にしてあれば設定ファイルに1度設定すれば次回から短いコマンドでの
実行が可能になる。
Using YAML as as Configuration File Format
外部設定ファイルのフォーマットとしてYAMLファイルを使用します。
YAMLはXMLに比べて記述内容が簡潔でシンプルなフォーマットです。
サンプル仕様
「OptionParserを利用した使いやすいCLIインターフェース(http://d.hatena.ne.jp/tbpg/20140526/1401109608)」で紹介したOptionParserを
使用した文字列を大文字か小文字に変換して出力するアプリケーションの仕様に設定ファイルを追加します。
この例では、コマンド実行時に設定ファイルがなければ自動でYAMLファイルを生成しています。
よくある例としては、initサブコマンドが用意されていて、実行すると設定ファイルや初期ディレクトリが一括で出力されるようなケースです。
例えば rspec --init など。
サンプルコード
require 'optparse' require 'pp' require 'yaml' CONFIG = 'up_down_converter.yml' if File.exists?(CONFIG) options = YAML.load(File.read(CONFIG)) else options = { upcase: false, downcase: false, } File.open(CONFIG, 'w:utf-8') { |f|f.print options.to_yaml } end opts = OptionParser.new do |opts| opts.on("-u", "--upcase", "大文字に変換します"){ |v| options[:upcase] = true } opts.on("-d", "--downcase", "小文字に変換します"){ |v| options[:downcase] = true } opts.program_name = "up_down_converter" opts.version = "0.0.1" opts.banner = <<-EOS テキストを大文字か小文字に変換して出力します。 Usage: #{opts.program_name} [options] text EOS end opts.parse!(ARGV) pp options text = ARGV.first exit false if text.nil? || text.empty? if options[:upcase] puts text.upcase elsif options[:downcase] puts text.downcase else puts text end
設定ファイル初期出力時の内容
up_down_converter.yml
--- :upcase: false :downcase: false
出力
設定ファイル変更前
$ ruby 1.rb HoGe {:upcase=>false, :downcase=>false} HoGe $ ruby 1.rb HoGe -u {:upcase=>true, :downcase=>false} HOGE $ ruby 1.rb HoGe -d {:upcase=>false, :downcase=>true} hoge
設定ファイルで小文字変換を有効にしてみます。
up_down_converter.yml
--- :upcase: false :downcase: true
設定ファイル変更後
$ ruby 1.rb HoGe {:upcase=>false, :downcase=>true} hoge $ ruby 1.rb HoGe -u {:upcase=>true, :downcase=>true} HOGE $ ruby 1.rb HoGe -d {:upcase=>false, :downcase=>true} hoge