トップ «前の日記(2007-07-31) 最新 次の日記(2007-08-05)» 編集

Route 477



2007-08-01

[ruby] irbを使う前にしておくべき3つ(+α)の設定

Rubyで試行錯誤しながら開発したいときにはirbを使うのが便利です。 今日はirbをさらに便利にする設定をいくつか紹介します。

ホームディレクトリ*1に .irbrc というファイルを 作り、そこに設定を書いていきます。

(1) タブ補完

# --- completion
require 'irb/completion'

メソッド名をTABキーで補完できるようになります。

例:

yhara@meteor:~ % irb
>> a = []
=> []
>> a.ind[TAB]
a.index    a.indexes  a.indices

(2) リファレンス検索

IRB上から「r」というメソッドでrefeを引けるようになります。

例:

>> r :partition
Enumerable#partition
--- partition {|item| ... }    ruby 1.7 feature

    各要素に対してブロックを評価した値が真であった要素からなる配列と
    偽であった要素からなる配列からなる配列を返します。

      [10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0].partition { |i| i % 3 == 0 }
       #=> [[9, 6, 3, 0], [10, 8, 7, 5, 4, 2, 1]]

=> nil
>> r :inspect
Iconv::Failure#inspect Included#inspect Method#inspect
Object#inspect OptionParser::ParseError#inspect
Syslog#inspect TMail::Mail#inspect
=> nil

クラスを指定したいときは「r "Array#inspect"」とか、「Array.r :inspect」のようにします。

(3)結果の色付け

wirbleというgemをインストールするとirbの実行結果に色が付くようになります。

# --- wirble
require 'rubygems'
require 'wirble'
Wirble.init
Wirble.colorize

(おまけ)長すぎる出力を切り詰める

File.readなど、巨大なStringを返すメソッドを呼ぶと、IRBの出力がやたら長くなってちょっと鬱陶しいですよね。 こんな時に、出力の先頭以外を省略する設定を考えてみました。

なお実装の都合上Wirbleを先にロードしておかなければいけません。 *2

# --- truncate long output (load wirble first!)
module IRB
  class Irb
    CUT = 1000
    def output_value
      if @context.inspect?
        s = @context.last_value.inspect
        if s.size > CUT
          s = s.slice!(0, CUT) + "...(snipped)"
        end
        printf @context.return_format, Wirble::Colorize.colorize(s)
      else
        printf @context.return_format, @context.last_value
      end
    end
  end
end

(おまけ2) irb中でもlsを使えるようにする

手が空くとついlsを打ってしまうあなたにお薦めです(笑)。

def ls
  print `ls -CF`
end

オプションはお好みで。

ついでにcdも実装……とかやってるとirbshになってしまいそうなので 今回はこの辺で。

Enjoy irbing!

*1 ruby -e 'p ENV["HOME"]'で出てくるディレクトリ

*2 返り値の出力をいじりたい→Irb#output_valueを変更すればいいんじゃね?→できた!!→あれ色が付かなくなったよ?→Wirbleよお前もか→いまここ

本日のツッコミ(全2件) [ツッコミを入れる]
masa.edw (2007-08-06 02:35)

LL魂の会場でちらっとお話した、Wirbleの履歴の保存の話です。<br>http://d.hatena.ne.jp/masa_edw/20070703/1183470510

yhara (2007-08-07 02:19)

> 履歴の保存<br>どうもです。ちょっと手元でも試してみます。