Thorでカジュアルに   コマンドラインツールを作る             ペチャクチャRuby勉強会(仮)#1 06/Mar/2013                 Nobuhiro Nikushi(@niku4i)13年3月7日木曜日
ABOUT ME  •   二串 信弘(@niku4i)@DeNA      •   インフラエンジニア <=> ソフトウェアエンジニア      •   ネットワークチーム所属      •   社内ツール開発、APIサーバ開発、監視システム...
今日のお話  • カジュアルにコマンドラインツールを作る        • Webアプリは便利!!!        • だけど。もっとカジュアルに。CLIツールのお話。        • 痒いところに手が届くCLIツールをサクッと作れる    ...
Gems for CLI  •   オプションパース      •   getopt => obsoluteなので使っちゃだめ      •   optparse          •   getopt的な使い方          •   独特...
(参考) optparse             require	  optparse             opt	  =	  OptionParser.new             	               OPTS	  =	 ...
gems for CLI  •   オプションパース      •   getopt => obsoluteなので使っちゃだめ      •   optparse          •   getoptライク          •   独特の構...
Thor  •   Thor      •   https://github.com/wycats/thor      •   A simple and efficient tool for building self-documenting  ...
Example             	               #!/usr/bin/env	  ruby             #	  encoding:	  utf-­‐8             require	  thor  ...
Demo of Example Code ###	  ヘルプメッセージはThorが組み立ててくれる                                                                         ...
gem化して配布するまで          $	  bundle	  gem	  myapp;	  cd	  myapp          $	  mkdir	  bin                                     ...
おまけ13年3月7日木曜日
gemの紹介その2 - Homesick  •   Homesick      •   https://github.com/technicalpickles/homesick      •   dotfilesをGithubで管理するときに役に...
END13年3月7日木曜日
Upcoming SlideShare
Loading in...5
×

Thorでカジュアルにコマンドラインツールを作る

2,253

Published on

ペチャクチャRuby勉強会(仮)#1 at DeNAヒカリエオフィスで発表した資料

Published in: Technology
0 Comments
8 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
2,253
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
9
Comments
0
Likes
8
Embeds 0
No embeds

No notes for slide

Thorでカジュアルにコマンドラインツールを作る

  1. 1. Thorでカジュアルに コマンドラインツールを作る ペチャクチャRuby勉強会(仮)#1 06/Mar/2013 Nobuhiro Nikushi(@niku4i)13年3月7日木曜日
  2. 2. ABOUT ME • 二串 信弘(@niku4i)@DeNA • インフラエンジニア <=> ソフトウェアエンジニア • ネットワークチーム所属 • 社内ツール開発、APIサーバ開発、監視システムの改善 • 最近やってたこと • 最近レガシーなCGIアプリをPlack/PSGI化 • トラフィック情報等の収集、可視化改善13年3月7日木曜日
  3. 3. 今日のお話 • カジュアルにコマンドラインツールを作る • Webアプリは便利!!! • だけど。もっとカジュアルに。CLIツールのお話。 • 痒いところに手が届くCLIツールをサクッと作れる と何かと便利13年3月7日木曜日
  4. 4. Gems for CLI • オプションパース • getopt => obsoluteなので使っちゃだめ • optparse • getopt的な使い方 • 独特の構文(私はなかなか覚えれません、、) • オプションをパースするロジックをクラス化する? スクリプトのboot付近でパースする? といったことが煩雑13年3月7日木曜日
  5. 5. (参考) optparse require  optparse opt  =  OptionParser.new   OPTS  =  {}   opt.on(-­‐a)  {|v|  OPTS[:a]  =  v  } opt.on(-­‐b)  {|v|  OPTS[:b]  =  v  }   opt.parse!(ARGV) p  ARGV p  OPTS   #ruby  sample.rb  -­‐a  foo  bar  -­‐b  baz #  =>  ["foo",  "bar",  "baz"] #            {:a=>true,  :b=>true}13年3月7日木曜日
  6. 6. gems for CLI • オプションパース • getopt => obsoluteなので使っちゃだめ • optparse • getoptライク • 独特の構文(僕はなかなか覚えれません) • オプションをパースするロジックをクラス化する? スクリプトのboot付近でパースする? といったことが煩雑 • Rake • Thor13年3月7日木曜日
  7. 7. Thor • Thor • https://github.com/wycats/thor • A simple and efficient tool for building self-documenting command line utilities • Remove the pain of parsing command line options • It is also used as an alternative to the Rake build tool • Rake-like syntax13年3月7日木曜日
  8. 8. Example   #!/usr/bin/env  ruby #  encoding:  utf-­‐8 require  thor   # thorクラスを継承 class  App  <  Thor # desc “引数説明”, “コマンド説明文”    desc  hello,  "Lets  say  hello!" # メソッド=サブコマンド名    def  hello        puts  Hello  world!    end      desc  konichiwa  NAME,  say  hello  to  NAME  san  in  Japanese    def  konichiwa  name        puts  "こんにちは、#{name}  さん!"    end      desc  greet  [NAME],  greet  to  people # オプション設定    method_option  :japanese,        :type        =>  :boolean,        :aliases  =>  -­‐j,        :desc        =>  in  Japanese    def  greet  name  =  world        if  options[:japanese]            konichiwa  name        else            puts  "Hello  #{name}"        end    end   end   # おまじない App.start13年3月7日木曜日
  9. 9. Demo of Example Code ###  ヘルプメッセージはThorが組み立ててくれる ###  greetメソッドは第1引数を任意にしたので引数なしでも実行できる $  ./app.rb $  ./app.rb  greet Tasks: Hello  world    app.rb  greet  [NAME]        #  greet  to  people      app.rb  hello                      #  Lets  say  hello! $  ./app.rb  greet  にくし    app.rb  help  [TASK]          #  Describe  available  tasks  or  one  specific  task Hello  にくし    app.rb  konichiwa  NAME    #  say  hello  to  NAME  san  in  Japanese     $  ./app.rb  hello ###  greetメソッドの詳細はhelp  greetで確認できる Hello  world! $  ./app.rb  help  greet   Usage: ###  konichiwaメソッドは第1引数を必須にしたので引数無しは怒られる    app.rb  greet  [NAME] $  ./app.rb  konichiwa   app.rb  konichiwa  requires  at  least  1  argument:  "app.rb  konichiwa  NAME". Options:      -­‐j,  [-­‐-­‐japanese]    #  in  Japanese $  ./app.rb  konichiwa  にくし   greet  to  people こんにちは、にくし  さん!     $  ./app.rb  greet  にくし  -­‐-­‐japanese こんにちは、にくし  さん!13年3月7日木曜日
  10. 10. gem化して配布するまで $  bundle  gem  myapp;  cd  myapp $  mkdir  bin $  vim  myapp.gemspec $  vim  bin/myapp ..snip..      gem.description      =  ["something  write  here"]    #!/usr/bin/env  ruby    gem.summary              =  ["command  to  do  something"]     ..snip..    require  pathname    gem.add_dependency(thor,  ~>  0.17.0)    lib  =  Pathname.new(__FILE__).dirname.join(..,  lib).expand_path      $LOAD_PATH.unshift  lib.to_s $  bundle  install $  bundle  exec  ruby  bin/myapp      #  動作確認    require  myapp Tasks:    myapp  help  [TASK]    #  Describe  available  tasks  or  one  specific  task    Myapp::CLI.start    myapp  list                  #  list  something     $  vim  lib/myapp.rb $  git  add  -­‐A $  git  commit  -­‐m  Initial    #  encoding:  utf-­‐8 $  gem  build  myapp.gemspec  #  =>  ./myapp-­‐0.0.1.gem    require  "myapp/version"    require  "myapp/cli" #  配布先PCでgemをインストールしてもらう!     $  gem  install  myapp-­‐0.0.1.gem    module  Myapp        #  Your  code  goes  here...    end   $  vim  lib/myapp/cli.rb      #  encoding:  utf-­‐8    require  thor 配布方法に関してコメントをいただきました        module  Myapp        class  CLI  <  Thor            desc  list,  list  something 簡単に済ませるならgemにしなくてもgit clone ... &&            def  list                puts  write  something  to  list bundle install してもらう方法でも◎            end        end    end  13年3月7日木曜日
  11. 11. おまけ13年3月7日木曜日
  12. 12. gemの紹介その2 - Homesick • Homesick • https://github.com/technicalpickles/homesick • dotfilesをGithubで管理するときに役に立つCLIツール • Thorで作られてる。Thorでコーディングするときの参考にしました。 インストール gem  install  homesick githubのdotfilesをclone homesick  clone  git@path.to.github.prj/dotfiles.git cloneしたドットファイルを~/以下にコピー(symlink) homesick  symlink  dotfiles13年3月7日木曜日
  13. 13. END13年3月7日木曜日
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×