irbとpryの違い
web DB 7月号に「irb と pryの違い」が載っていたので、知識の整理としてログを残しておく。
irbとは
Railsの標準REPL。特定のgemを入れなくても、rails console(rails c)をターミナルで実行するだけで、dbのテスト環境に入ることができる。
$ rails c
> User.all
など、無意識に使っていたrails cの裏側では、irbが使われていた、、
REPLとは
入力されたコードを評価して表示することを指す。
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を読んでも、現段階の頭だと理解できない。
また、他にも拡張機能が複数あり、便利なものらしいが、今回はここまでとする。