ThorでRuby製のオリジナルコマンドを作る

  • Pocket
  • このエントリーをはてなブックマークに追加
  • 162 follow us in feedly

まえがき

今回はThorを使ってコマンドアプリを作ってみようと思います。

Rubyでがりがり書いていけるのと、サブコマンド付きのコマンドを簡単につくれるのが便利です

Thorとは

  • Rubyでコマンドアプリを作るためのgemパッケージ
  • サブコマンドの実装が簡単
  • トールと読むみたいです

開発環境

  • OS MacOSX
  • Ruby 1.9.3
  • Thor 0.18.1

Thorのインストール

Thorはgemで簡単に管理できます。

# 既に入ってる可能性もありますので一様確認
gem list thor

# なかったらインストール
gem install thor

コマンドのファイルを作成

とりあえず自分は好きなところにファイルを作成して、そのファイルをシンボリックリンクで/usr/binに持っていく方法を取りました

# 元のファイル作成と実行権限の付与
touch hello
chmod +x hello

# シンボリックリンクの作成
sudo ln -s /絶対パス/hello /usr/bin/hello

これであとはリンク元のファイルの方をいじっていくスタイルです。

サンプルソース

helloコマンドを作成するサンプルソースです

#!/usr/bin/env ruby
# coding: utf-8

require 'thor'

class Hello < Thor
		default_command :hello

		desc 'hello', 'say hello message'
		def hello
				p "hello"
		end	

		desc 'en', 'say hello message at English'
		def en
				p "Hello!!"
		end

		desc 'jp', 'say hello message at japanese'
		option :romaji, :type => :boolean, :aliases => '-r', :desc => "use romaji"
		def jp
				if options[:romaji]
						p "konnitiha"
				else
						p "こんにちは"
				end
		end
		
		desc 'user', 'say hello message and user name'
		option :name, :type => :string, :aliases => '-n', :desc => "user name"
		def user
				p "hello #{options[:name]}"
		end
		
		desc 'total', 'echo total value'
		option :left, :type => :string, :aliases => '-l', :desc => "left value"
		option :right, :type => :string, :aliases => '-r', :desc => "right value"
		def total
				total  = options[:left].to_i + options[:right].to_i
				p "total is #{total}"
		end
		
		desc 'diff', 'echo diff value'
		def diff(left=0, right=0)
				diff = left.to_i - right.to_i
				p "diff is #{diff}"
		end
end


Hello.start

Helloコマンドの例

hello

helloコマンドのデフォルトのサブコマンドをhelloとゆう関数にしています

 > hello
"hello"

hello en

en のサブコマンドで英語で挨拶してくれます

> hello en
"Hello!!"

hello jp

jp のサブコマンドで日本語で挨拶してくれます

また、-r のオプションをつけることで、ローマ字に変換しています。

> hello jp
"こんにちは"

> hello jp -r
"konnitiha"

hello total

total のサブコマンドでは、2つの値の合計値を出力します

  • -l 1つ目の値
  • -r 2つ目の値

> hello total -l 100 -r 300
"total is 400"

hello diff

diff のサブコマンドでは、2つの値の差を出力します(1つ目の値から2つ目の値を引く)

上記のtotal のサブコマンドとの違いとしては、オプションで値を入力するのではなく、引数として値を指定しています。

> hello diff 300 100
"diff is 200"

Helpを表示する

ThorはHelpをには標準でヘルプを表示する機能を持っています。今回のサンプルソースだとこういった感じになります。

 > hello -h
Commands:
  hello diff            # echo diff value
  hello en              # say hello message at English
  hello hello           # say hello message
  hello help [COMMAND]  # Describe available commands or one specific command
  hello jp              # say hello message at japanese
  hello total           # echo total value
  hello user            # say hello message and user name

あとがき

以上でした。こうゆうの好きだわ!!

関連記事

rakuten-api-1rakuten-api-1.png

楽天APIでISBNコードを使って書籍検索してみる。『PHP&Ruby』

まえがき ちょっとした書籍検索サンプルのコードのメモ。 今回何がや...

記事を読む

mongo-hq-1mongo-hq-1.png

MongoDBのクラウドサービス『MongoHQ』を試してみる

まえがき MongoDBのクラウドホスティングサービスである『Mon...

記事を読む

RailsでHamlを使っちゃおう

まえがき RailsのプロジェクトでHamlを使うためのメモ。やっぱ...

記事を読む

rails-pryrails-pry.png

Railsでpry使おうとして困ったのでメモ

まえがき Rubyのirbの拡張版のpryをrails consol...

記事を読む

hipchat-ruby-api-1hipchat-ruby-api-1.png

チャットサービス『HipChat』のRubyAPIで通知して遊んでみる

まえがき プライベートのチャットサービスである『HipChat』のAP...

記事を読む

新着記事

no image

PHPでRubyのirbっぽいインタラクティブなスクリプトが実行できる「boris」

まえがき PHPでもRubyのirbみたいなことがしたくて探してみたと...

記事を読む

2015年の抱負と去年の振り返り〜よちよちWEB業界1年経験して〜

まえがき あけましておめでとうございます。今年もどうぞよろしくお願いし...

記事を読む

Java SE 7 Bronze試験(1Z0-802)を受けてきました

まえがき 以前から少し受けてみたかった試験『Java SE 7 Bro...

記事を読む

HubotでJenkinsのジョブを実行する

まえがき HubotをつかってJenkinsのジョブをじっこうしてみた...

記事を読む

no image

Hubotをforeverでデーモン化する

まえがき 今回はHubotをforeverを使ってデーモン化してみた時...

記事を読む

スポンサーリンク

  • Sorry. No data so far.

PAGE TOP ↑