irbとpryの違い

web DB 7月号に「irb と pryの違い」が載っていたので、知識の整理としてログを残しておく。

irbとは

Railsの標準REPL。特定のgemを入れなくても、rails console(rails c)をターミナルで実行するだけで、dbのテスト環境に入ることができる。

$ rails c
> User.all
など、無意識に使っていたrails cの裏側では、irbが使われていた、、

REPLとは

入力されたコードを評価して表示することを指す。

railsで代表的なREPLは、irbとpryになる。

pryとは

Gemでインストールする必要がある。IRBの機能に加えて下記のような機能がある。

  • 機能
    • コードのカラーリング
    • 自動インデント
    • コードの保管機能(コードを途中まで入れて途中でTab入力とか、Tab2回押しで候補表示も可能)

rails で使うためには、Gemfileのdevelop環境にgem 'pry-byebug'を入れる必要がある。

ちなみにpryは下記のように3種類存在している。

  • pry

    通常のpry

  • pry-rails

    railsコンソール内でpryを使うことが可能です。pryに依存しているので、pry-railsをインストールすると必ず通常のpryもインストールされます

  • pry-byebug

    これを使えばpryで止めた箇所からステップ実行ができるようになります。

irbとの違い

  • pryを使うと、ターミナル上でDocumentやリファレンスを読むことができると筆者は述べている。

    ?, show-doc, ri, $, show-method

実際にターミナル上で実行してみる。

$ pry 
pry(main)> show-method Hash#to_h

From: hash.c (C Method):
Owner: Hash
Visibility: public
Number of lines: 12

static VALUE
rb_hash_to_h(VALUE hash)
{
    if (rb_block_given_p()) {
        return rb_hash_to_h_block(hash);
    }
    if (rb_obj_class(hash) != rb_cHash) {
        const VALUE flags = RBASIC(hash)->flags;
        hash = hash_dup(hash, rb_cHash, flags & HASH_PROC_DEFAULT);
    }
    return hash;
}

実際の公式マニュアルは以下の通り。

hash = {}
p hash.to_h      # => {}
p hash.to_h == hash # => true

class MyHash < Hash;end
my_hash = MyHash.new
p my_hash.to_h        # => {}
p my_hash.class       # => MyHash
p my_hash.to_h.class  # => Hash

正直言ってpryでDocumentを読んでも、現段階の頭だと理解できない。

また、他にも拡張機能が複数あり、便利なものらしいが、今回はここまでとする。

参考文献

Pryはもう古い、時代はIRB - k0kubun's blog

今更聞けないpryの使い方と便利プラグイン集 - Qiita