読者です 読者をやめる 読者になる 読者になる

【Ruby】Thorを使ってオプションパーサを導入する

今までコマンドラインツールを作るときにはARGVしか使ってこなかった(というかそれしか知らなかった)のだが,thorを使うとオプション付きのコマンドを簡単に実装できると教えて頂いたので試してみた

Thorを継承したクラスのパブリックメソッドがコマンドになる.上記のthor2.rbの例だと,hellogoodnightの2つのメソッド

オプション付きのコマンドを作るにはoption :toてな感じで使いたいオプションを指定してやる.すると

ruby thor2.rb hello --to alitaso

のように使える.ただしtoオプションはhelloコマンドにのみ使えて,goodnightコマンドには使えない模様.

各コマンドにdesc,コマンドの説明文が無いと実行したときに怒られる.

MySLI.start(ARGV)はおまじない.これが無いとコマンド付きで実行しても何も起こらない.

あとThorを継承したクラスにinitializeメソッドを定義すると

in `initialize': wrong number of arguments(3 for 0)(ArgumentError)

このようなエラーになってしまう.どうしてこのようなエラーになるかはまだ理解できていない...initializeを使いたかったら,Thorを継承していない他のクラスを作るべきなんだろうか

このThor使って電通大編入生の単位認定書類作成アプリのコードを若干書き換えた.以前と比べると,全ての引数を入力しなくてよくなったり,引数の順番も関係無くなったりしたので使い勝手が少し良くなってるとおもう

alice345/DentooAccreditation · GitHub

【追記】

initializeを定義するとエラーが出ると書いたけれどもその原因はMyCLIクラスはThorクラスを継承したものなので,Thorクラスでの定義に引っ張られるということだった

https://github.com/erikhuda/thor/blob/master/lib/thor/base.rb

上記のコードを見るとinitializeの引数が3つとなっていたため,引数が3個必要なのに0個しかないよ!という旨のエラーとなっていた模様.納得.

参考にしたサイト

erikhuda/thor · GitHub

Thor - Home

Ruby - Thorの使い方まとめ - Qiita