thorでサブコマンドを指定しない方法

thorCLI を作成するのによく使われる gem (らしい)ですが、サブコマンドを指定せずに実行する方法が Github Wiki公式サイト に見当たらず、小一時間悩んだのでメモっておく。

例えば こんなことがやりたい。

$ bin/cli.rb -l ja world
こんにちは world

$ bin/cli.rb -l en world
Hello world

解決方法

default_command と 可変長引数を使えばよい。

#!/usr/bin/env ruby
require 'thor'

module MyApp
  class CLI < Thor
    default_command :hello

    desc 'hello', 'description here'
    method_option :lang, type: :string,  aliases: ['-l']
    def hello *args
      case options[:lang]
      when "ja"
        hello = 'こんにちは'
      else
        hello = 'Hello'
      end

      puts "#{hello} #{args.join(', ')}"
    end
  end

end

MyApp::CLI.start