私がmrubyでCLIツールを作るときは、引数の処理にfastly/mruby-optparseを使っていたのだが、これがアーカイブされてしまった。 一応forkして最新のCRubyのoptparseのコードをあててあるがまぁメンテが大変である。
また、CRubyのoptparseがRegexpを活用しているためmrubyでもmruby-onig-regepが必要になりちと重い。 やりたいことと必要なもののバランスが取れていないと私は感じたので、いっそ私の必要な機能だけ実装したmruby-onig-regexpに依存しないoptparseを実装しようと思い、mruby-tiny-optparseを作った。
実装している機能は今のところ、引数のパースとヘルプのみ。具体的にはOptionParser#onとOptionParser#help(とそれに関わるメソッド)。 逆に実行していない機能の例としては、引数の値を任意のクラスのインスタンスに変換する機能(OptionParser#acceptあたり)やgetoptsあたり。 以下は使用例。
# 使用例 options = {} opts = OptionParser.new opts.banner = "Usage: example [options]" opts.on("-f", "--file FILE", "Input file") do |file| options[:file] = file end opts.on("-v", "--verbose", "Verbose output") do options[:verbose] = true end opts.parse(ARGV)
mruby-optparseと使い方は変えていないので、すんなり扱えると思う。