# irbとscript/consoleの超便利なTips _published: 2009/01/06_ ![alt](http://b.hatena.ne.jp/entry/image/http://d.hatena.ne.jp/shunsuk/20090106/1231247444) これは便利だと思います。 - [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&#252;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のコードを書けるというのが大発見。これは便利。