Thor & Rubocop



# Document Links

-   [マルチスケールシミュレーション特論まとめ](https://qiita.com/evendemiaire/items/25f459daa57ab8875ba6)
-   [チャート式ruby-appendix-VI(thor, rubocop)](https://qiita.com/daddygongon/items/19e58f757fab197bc347)


# Thor


## Thorの基礎知識

ThorとはCLIの作成を支援するGemらしい．

詳しくは実際に扱いながら学ぶ．

また，有志の力を借りる

-   [Thor入門 - RakeからThorへ -](https://qiita.com/yatmsu/items/5ba7016db33c13d7a882)
-   [Ruby の CLI ツールの作成を支援する、 thor gem の基本について。](https://qiita.com/tbpgr/items/10a5c236cfb528c76ef5)


## CLIを自作

まずはthorをinstallする．

    $ sudo gem install thor

実際に作成していくが，

-   [チャート式ruby-appendix-III(bundler)](https://qiita.com/daddygongon/items/14218c96df5cbcf35c62)

で勉強したbundlerはinstallしておいてくださいね．

いざ，実践！とその前に，今回の作業場は普段のgrad~/menber/[yours]では面倒らしいので（理由はわかりません），HomeDirectoryで行ってください．

    $ pwd
    /home/username #自分のホームディレクトリで作業開始！
    $ bundle gem hello_rudy -b #gem hello_rudyが作成されます
    $ cd hello_rudy
    $ ls exe/ #exeファイルがあるかを確認
    hello_rudy
    $ chmod a+x exe/hello_rudy #権限を与えます

このままでは動かないので，実際に実行できるようにしていく．

    $ emacs -nw hello_rudy.gemspec

で，中身を

    require_relative 'lib/hello_rudy/version'
    
    Gem::Specification.new do |spec|
      spec.name          = "hello_rudy"
      spec.version       = HelloRudy::VERSION
      spec.authors       = ["[yours]"]
      spec.email         = ["[yours]"]
    
      spec.summary       = %q{hello rudy}
      spec.description   = %q{hello rudy}
      spec.homepage      = "https://hoge.hoge"
      spec.license       = "MIT"
      spec.required_ruby_version = Gem::Requirement.new(">= 2.3.0")
    
    #  spec.metadata["allowed_push_host"] = "TODO: Set to 'http://mygemserver.com'"
    
      spec.metadata["homepage_uri"] = spec.homepage
    #  spec.metadata["source_code_uri"] = "TODO: Put your gem's public repo URL here."
    #  spec.metadata["changelog_uri"] = "TODO: Put your gem's CHANGELOG.md URL here."
    
    # Specify which files should be added to the gem when it is released.
    # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
      spec.files         = Dir.chdir(File.expand_path('..', __FILE__)) do
        `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
      end                                                                           
      spec.bindir        = "exe"
      spec.executables   = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
      spec.require_paths = ["lib"]
    
      spec.add_runtime_dependency('thor')
    end 

こんな感じに修正してください．

    $ bundle exec exe/hello_rudy hello rudy

これで何もErrorを出さなかったら大丈夫．Errorが出るなら，Error文を見て修正してください．

では次に，挙動の中身を書いていく．

    $ emacs -nw lib/hello_rudy.rb

で，中身を

```ruby:hello_rudy.rb
require "thor"
require "hello_rudy/version"

#module HelloRudy
#class Error < StandardError; end

class HelloRudyCLI < Thor
  desc "hello NAME", "say hello to NAME"
  def hello(name)
    puts "Hello " + name
  end
end

HelloRudyCLI.start(ARGV)
```

にしてください．

また，

    $ emacs -nw lib/hello_rudy/version.rb

の中身を

```ruby:version.rb
class HelloRudy
  VERSION = "0.1.0"
end
```

にしてください．

    $ bundle update
    $ bundle install
    $ bundle exec exe/hello_rudy
    Commands:
      hello_rudy hello NAME      # say hello to NAME
      hello_rudy help [COMMAND]  # Describe available commands or one specific co...
    $ bundle exec exe/hello_rudy hello rudy
    Hello Rudy

完成！

折角なので，どこからでも実行できるようにする．

    $ sudo rake install:local
    $ hello_rudy hello boy
    Hello boy

これでどこからでもhello\_rudyを実行できる．


# Rubocop


## Rubocopの基礎知識

コーディング規約に準拠しているかを調べるGemらしい．

こちらも有志の力を借りて勉強する．

-   [RuboCop is 何？](https://qiita.com/tomohiii/items/1a17018b5a48b8284a8b)
-   [Rubocopについて](https://qiita.com/t-vinn/items/fe57b5d6440712016742)


## 実践

実際に使ってみる．

Install

    $ sudo gem install rubocop

今回は&#x2013;auto-correctとやらを使う．

    $ rubocop --auto-correct file.rb

で，自動でCodeを整理してくれる．

どうなるかは自分の目で確かめてください．


# 締め

今回はThorとRubocopについて学んだ．



------
 - **source** ~/school/multi/my_ruby/grad_members_20f/members/evendemiaire/post/thor_rubocop.org