ぶていのログでぶログ

思い出したが吉日

mruby-tiny-optparseを作った

私がmrubyでCLIツールを作るときは、引数の処理にfastly/mruby-optparseを使っていたのだが、これがアーカイブされてしまった。 一応forkして最新のCRubyのoptparseのコードをあててあるがまぁメンテが大変である。

github.com

また、CRubyのoptparseがRegexpを活用しているためmrubyでもmruby-onig-regepが必要になりちと重い。 やりたいことと必要なもののバランスが取れていないと私は感じたので、いっそ私の必要な機能だけ実装したmruby-onig-regexpに依存しないoptparseを実装しようと思い、mruby-tiny-optparseを作った。

github.com

実装している機能は今のところ、引数のパースとヘルプのみ。具体的には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と使い方は変えていないので、すんなり扱えると思う。