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

togatttiのエンジニアメモ

過度な期待はしないでください。旧麹町で働くエンジニアのメモ帳です。

Thorに任意のコンストラクタを設定する

Thorはコマンドラインツールを作成するrubyのライブラリで、基本的な使い方は 以下のURLに書いてある。

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

複数のコマンドを使うときは、コンストラクタで変数をまとめておいて、 各コマンドに渡す形の方が、見やすい場合がある。

今回Thorを使って、任意のコンストラクタを設定して、引数をインスタンス 変数に格納して実行する方法をメモした。

手順

  • 通常通り、任意のクラスにThorを継承させる。

  • initialize メソッドに可変長引数を引数として定義する。

  • initialize内でsuperでinitializeをオーバライドさせた後に、 任意の処理を書く。

これでThorを通常通り使うことができる。

サンプルコードとか

サンプルコードは

$ ./mycli.rb ls --string=/tmp/

とか

./mycli.rb ls --string=/tmp/ --option=la

で実行するとlsの結果が出る簡単な処理を書いてみた。

#!/usr/local/bin/ruby
# my.cli.rb

require 'thor'

class MyCLI < Thor
    class_options [:string, :option]

    def initialize(*args) 
        super
        @string=options[:string]
        
        unless options[:option].nil?
            @option="-" + options[:option]
        end
        
        puts "Called initialize method"
    end
    
    desc 'ls <options> <string>', 'Only ls'
    def ls
       system("ls #{@option} #{@string}")
    end
end

MyCLI.start(ARGV)