はじめまして。
KBMJでプログラマとして働いているkuromatuと申します。
今回は、rubyのコーディングの際によく使われるinteractive ruby(irb)を拡張するgemプラグインのwirbleを基に、更なる拡張を加えるutility_beltというgemプラグインについて紹介します。
gem install utility_belt
実行すると、utility_belt-1.1.0(2009/02/27現在)がインストールされます。
ホームディレクトリに以下の記述の.irbrcを置きます。
require 'rubygems' require 'utility_belt'
utility_beltをrequireした際にwirbleもrequireされているので、wirbleに関する記述は必要ありません。
そのままirbを起動すると、wirbleの拡張機能と、utility_beltにデフォルトで設定されている機能を利用できるようになります。
これは、utility_beltが依存しているwirbleというgemプラグインで実装されている機能ですが、色設定がutility_beltで再定義されています。
色設定セットはdarkとlightの2種類が定義されていて、デフォルトではdarkが選択されています。
色をlightに変更したい場合には、
$RUBYGEMS/gems/utility_belt-1.1.0/lib/utility_belt.rb
というファイルの22行目にある記述を次のように書き換えてください。
UtilityBelt::Themes.background(:dark) if defined? UtilityBelt::Themes ↓ UtilityBelt::Themes.background(:light) if defined? UtilityBelt::Themes
+ - でハッシュの追加・削除ができます。
>> hoge = {:fuga => "bar" }
=> {:fuga=>"bar"}
>> hoge += {:hige => "baz"}
=> {:fuga=>"bar", :hige=>"baz"}
>> hoge -= :fuga
=> {:hige=>"baz"}
わざわざmergeやrejectを使わなくて良いので楽ですね。
wirbleの機能として、コマンド履歴の保存と参照(Ctrl-p、Ctrl-n)が利用できます。
utility_beltでは、その機能に関連するメソッドを追加しています。
h(history) - 履歴一覧を呼び出せます。引数として表示履歴数を指定できます。 h!(history_do) - 最後に実行したコマンドを実行できます。 hvi(history_to_vi) - 履歴一覧をviで開き、編集できます。 history_write(filepath, lines) - 履歴一覧を指定したファイルの指定行に書き込みます。
実行例:/home/hoge/fugaというファイルに、履歴の0~100行目を書き込む
history_write(/home/hoge/fuga, 0..100)
vi、emacs、textmate(MacOSのエディタ)が呼び出せます。
vi - viの実行 emacs - emacsの実行 mate - textmate
emacsclientを使用している方への対応はまだのようですが、
TODOとしてコメントが残されているところを見ると、今後のアップデートで実装されるかもしれません。
irbの自動インデント設定をONにします。
v(verbose) - irbの出力結果を表示する q(quiet) - irbの出力結果を非表示にする
デフォルトの機能以外にも有用な機能が実装されているので、すべて利用できるようにしてみましょう。
$RUBYGEMS/gems/utility_belt-1.1.0/lib/utility_belt.rb
というファイルの16行目にある記述を書き換えてください。
UtilityBelt.equip(:default) unless UtilityBelt.equipped? ↓ UtilityBelt.equip(:all) unless UtilityBelt.equipped?
Windows・Linuxの場合には、書き換え後にirbの実行でエラーが出る可能性があります。その時は、先に挙げた行を以下のように書き換えて下さい。
UtilityBelt.equip(:all, :except => ["clipboard", "pastie", "google"]) unless UtilityBelt.equipped?
Ruby On Rails(Rails)でruby script/consoleを使う際に有効な機能です。
>> memo(1)
memo(1)
Memo Load (0.0ms) SELECT * FROM "memos" WHERE ("memos"."id" = 1)
=> #<memo id: 1, body: "test", created_at: "2009-02-25 12:00:00", updated_at: 12:00:00">
memo(1)と書くと、Memo.find(1)と挙動となります。
memo(:all, :order => "id")などのように、
オプションも普通に渡すことができます。
こちらもRailsでruby script/consoleを使う際に有効な機能です。
logコマンドを実行すると、その後に実行されたSQLログを標準出力として表示します。
普段から別画面でログファイルをtailしている人にはあまり必要がないかもしれません。
ActiveRecord::Baseのメソッドを使ったコードの検証には役立つと思います。
log
=> #<logger:0x35ae4e0 ...>
>> memo(1)
memo(1)
Memo Load (0.0ms) SELECT * FROM "memos" WHERE ("memos"."id" = 1)
=> #<memo id: 1, body: "test", created_at: "2009-02-25 12:00:00", updated_at: 12:00:00">
論理値を反転させることができます。
>> true.not => false
>> grep_classes "True" => ["TrueClass", "RubyToken::TkTRUE"] >> String.new.grep_methods "split" => ["split"]
Symbol#to_procはruby1.9系で実装されていますね。
>> plus = :+.to_proc => #<proc:0x03fe6930 @...> >> puts plus.call(1,2) 3 => nil
String#to_procも出番は少なさそうですが、面白い機能だと思います。
(1..3).map(&'*2') => [2, 4, 6]
is_a?メソッドのaliasとして、is_an?メソッドを定義しています。
文法の厳密さを求める方には良いかもしれません。
>> [].is_an? Array => true
クリップボードの内容にアクセスする機能が利用できます。
MacClipboard.read - クリップボードから読み込み
MacClipboard.write("hoge") - クリップボードへ書き込み
その他には、Amazon S3のアップロードコマンドとGoogle検索コマンド(どちらもMac OS X用)があります。
筆者の環境(Windows+Linux)では利用できなかったため、今回の紹介には含めませんでしたが、興味のある方は以下のページ(英文)にて利用方法をご確認いただければ幸いです。
http://utilitybelt.rubyforge.org/usage.html
Railsの1.2系だと、irbを起動していない場合でも、常に.irbrcが読み込まれてしまうという不具合が存在するようです。
そのため、常にutility_beltの拡張が有効となってしまいます。
この影響で、一部のRails Aprricationでscript/consoleを実行した際に、utility_beltとアプリケーションの一部のメソッドが競合する可能性があることに注意してください。
過去のバージョンで作者の方も苦労されたようです。
http://gilesbowkett.blogspot.com/2007/12/utility-belt-vs-rails.html
rubyメソッドの確認・Railsのscript/console上での検証作業や、ruby-debugと組み合わせたデバッグ作業に利用しています。
問題解決、今書いているロジックの検証にとても役立っています。
最後までお読み頂き、誠にありがとうございます。
irbをよく利用される方、面白そうと思われた方は、ぜひ一度utility_beltを使ってみてはいかがでしょうか。
Utility Belt
http://utilitybelt.rubyforge.org/
Rubyforge Projectページ