# irbとscript/consoleの超便利なTips
_published: 2009/01/06_ 
これは便利だと思います。
- [Giant Robots Smashing Into Other Giant Robots](http://giantrobots.thoughtbot.com/2008/12/23/script-console-tips)
## Wirble: colors
irbでシンタックスハイライト。
Wirbleをインストールします。
```sh
% sudo gem install wirble
```
`~/.irbrc` に下のコードを書きます。
```ruby
require 'rubygems'
require 'wirble'
Wirble.init
Wirble.colorize
```
出力がハイライトされます。ハッシュや配列は見やすいかも。
## Wirble: history
irbは、コマンドの履歴が残ります。 `↑` や `↓` 、`control` + `p` や `control` + `n` で履歴を見ることができます。しかし、いったんirbを終了すると、履歴がクリアされてしまいます。
Wirbleをインストールしておくと、履歴がクリアされません。再度irbを起動すると、前回の履歴を使うことができます。
## Wirble: auto-completion
Wirbleは自動補完機能も提供してくれます。。
```ruby
>> un_momento = "Spanish for like, 'hold the phone!'"
=> "Spanish for like, 'hold the phone!'"
```
ここで、"un"とタイプして、[tab]キーを押します。
```ruby
>> un
un_momento undef unless untaint untrace_var until
```
これは便利。
## Local methods
`~/.irbrc` に下のコードを書きます。
```ruby
# Easily print methods local to an object's class
class Object
def local_methods
(methods - Object.instance_methods).sort
end
end
```
そうすると、local_methodsメソッドが使えるようになります。
```ruby
>> class BasketballPlayer
>> attr_accessor :name
>>
?> def champion?
>> name == "Kevin Garnett"
>> end
>> end
=> nil
>> kevin_garnett = BasketballPlayer.new
=> #<BasketballPlayer:0x11988f8>
>> kevin_garnett.name = "Kevin Garnett"
=> "Kevin Garnett"
>> kevin_garnett.champion?
=> true
>> kevin_garnett.local_methods
=> ["champion?", "name", "name="]
```
.irbrcって、普通にRubyのコードが書けるんですね。
## Aliases
irbでは、エイリアスを設定することができます。
```ruby
alias q exit
```
`exit` の代わりに `q` とタイプすると、irbを終了します。Vimっぽい。
## Create test fixtures for a third party service
例えば、FlickerのAPIを使うクライアントを作ったとき。
```ruby
FlickrClient.search("Bruce Springsteen")
```
テストケースが書けませんよね。
そこで、`script/console` に入って、データをyamlに変換します。それを、ファイルにダンプ。
```ruby
yaml = FlickrClient.search("Bruce Springsteen").to_yaml
File.open("test/fixtures/flickr/springsteen.yml", "w") { |file| file << yaml }
```
`test_helper.rb` に下のコードを書いておきます。。
```ruby
def load_yaml_fixture(path)
absolute_path = File.join(RAILS_ROOT, "test", "fixtures", path)
YAML::load_file absolute_path
end
```
呼び出し。
```ruby
load_yaml_fixture("springsteen.yml")
```
このパターンは、サードパーティのサービスにアクセスするクライアントのテストに使えます。
## Print SQL to standard out
`script/console` でデバッグする時に、メソッドが生成するSQL文を表示することができます。
`~/.irbrc` に下のコードを書きます。
```ruby
# Log to STDOUT if in Rails
if ENV.include?('RAILS_ENV') && !Object.const_defined?('RAILS_DEFAULT_LOGGER')
require 'logger'
RAILS_DEFAULT_LOGGER = Logger.new(STDOUT)
end
```
こんなカンジ。
```ruby
>> videos = Video.limited(3)
Video Load (0.4ms) SELECT * FROM `videos` LIMIT 3
=> [#<Video id: 1, ...>]
```
これは便利。
## pp
```ruby
require 'pp'
```
イイカンジにフォーマットしてくれます。特にArrayやActiveRecordオブジェクトのときに便利。
```ruby
>> pp videos
[#<Video id: 1, youtube_id: "TcMklv40YMY", name: "Merb, Rubinius and the Engine Yard Stack", upload_time: nil, view_count: 6171, description: "Google Tech Talks\nOctober 20, 2008\n\nABSTRACT\n\nIn th...", created_at: "2008-12-21 00:32:33", updated_at: "2008-12-21 00:32:33">,
#<Video id: 2, youtube_id: "JySmT-dGOj0", name: "MERB SPORTS Team-Vorstellung 2008", upload_time: nil, view_count: 495, description: "MERB SPORTS stellt sich für die VDRM-Saison 2008 v...", created_at: "2008-12-21 00:32:33", updated_at: "2008-12-21 00:32:33">,
#<Video id: 3, youtube_id: "6bc-FNNWIsM", name: "Merb && Moi", upload_time: nil, view_count: 58, description: "Amusing yes?", created_at: "2008-12-21 00:32:33", updated_at: "2008-12-21 00:32:33">]
```
Wirble便利ですね。あと、`.irbrc` にRubyのコードを書けるというのが大発見。これは便利。