電波ビーチ

☆(ゝω・)v

rubyの便利コマンドラインパーサoptparseのdescriptionがsummaryなので見やすくしたい

なにをいってるかわからねータイトルですが。

rubyにはoptparseっていうコマンドラインパーサが標準ライブラリ*1があり、使う機会があった

github.com

-hでヘルプを表示できるのだが、たとえばこんなやつ

require "optparse"

OptionParser.new do |opt|
  begin
      # バージョンを追加
      opt.version = "0.0.1"
      # リリース日を追加
      opt.release = "2018-11-12"
      # 名前を追加
      opt.program_name = ""
      # Usageで最初に表示されるやつ
      opt.banner = "Usage: #{opt.program_name} [options] [directory]"
      # helpとかUsageで表示されるときのサマリーが始まるまでの行頭からの幅
      summary_width = 32
      opt.summary_width = summary_width
      # 同じくコマンドのインデント
      summary_indent = 4
      opt.summary_indent = ' ' * summary_indent
      # summaryの幅を改行時にも揃えたい。長文で折り返した際も同じようにインデントするようにしたい
      # opt.onでオプションとそのdescを追加
      opt.on("-x", "所詮サマリーなのでそもそも長文を書くものではないんだけど、それにしてもターミナル幅が短いとめちゃくちゃ読みにくいしつらい。\n改行なんてしようもんならもっとひどいことになる。とても読めたものではない"){ |v|
          options[:a] = v
      }
      opt.separator("")
      opt.on("-h", "--help", "show help."){
          puts opt.help
          exit
      }
      opt.on("-v", "--version", "show version."){
          puts opt.ver
          exit
      }
      opt.parse!(ARGV)
  rescue OptionParser::InvalidOption => e
      puts e.message
      return
  end
end

を、ヘルプオプションで表示しようとすると、ターミナル幅が70とかだとこんな感じになっちゃう f:id:or3:20181112101242p:plain

これがストレスなのでちゃんとインデント付きで折り返してくれるようなヘルパー関数を作ってあげた

github.com

(中見ればわかりますが力ずくでよろしくやっているだけ...)

*1:rubyの文化知らんのだが組み込みgem?でいいのかな