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

Ruby の Thor で run コマンドを定義したかった

Ruby

次のコードのように Thor で run コマンドを定義したかったんですがエラーになりました。

require "thor"

class MyCLI < Thor
    desc "", ""
    def run
        puts "run"
    end
end

MyCLI.start ["run"]
# error: `is_thor_reserved_word?': "run" is a Thor reserved word and cannot be defined as command (RuntimeError)

Thor では run といくつかのコマンド名メソッドで定義する事ができないみたいです。。

回避方法

Twitter で @magicdrive さんに教えてもらったんですが、map クラスメソッドを使えば run コマンドを定義する事ができます。

require "thor"

class MyCLI < Thor
    desc "", ""
    # 別名でていgい
    def run_
        puts "run"
    end
    # map で run に紐付け
    map "run" => "run_"
end

MyCLI.start ["run"]

これで run コマンドが使えるようになりました。