2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

PRY×EXACTLY(Ruby3.2 のbinding.irbを試す)

Posted at

「あけましておめでとうございます。ことしもよろろすおねがいするます」
って感じで昨年放送された某スパイアニメ風な形でスタートさせていただきました。

今年も記事投稿していこうと思いますのでよろしくお願いいたします!

はじめ

去年の12月に恒例のRuby新バージョンのリリースがされました :tada:

今年はそれらの機能について実際に動かしたりして所感を書こうと思います!

今回紹介する Ruby 3.2の内容は irb (binding.irb) です

Ruby, Railの開発をしているとき私はずっと binding.pry を使い続けてきました。
そんな中 Ruby 3.2 で binding.irb が進化したと聞きました。それを聞いて

「わくわくっ!!」

したのでRuby3.2の binding.irb 使ってみようと思います

Ruby 3.2のインストールについて

今回Ruby3.2の機能紹介する記事としては1発目なのでインストールについて少々

$ rbenv install 3.2.0 

mac(homebrewを使用して)にてインストールしようとした際、いつもと同じように新しいバージョンをインストールを実行したらエラーが発生し、インストールが失敗しました

Last 10 log lines:
	Check ext/psych/mkmf.log for more details.
*** Fix the problems, then remove these directories and try again if you want.
Generating RDoc documentation
/private/var/folders/zn/xxxxxx/T/ruby-build.xxxxxxxx/ruby-3.2.0/lib/yaml.rb:3: warning: It seems your ruby installation is missing psych (for YAML output).
To eliminate this warning, please install libyaml and reinstall your ruby.
uh-oh! RDoc had a problem:
cannot load such file -- psych

run with --debug for full backtrace
make: *** [rdoc] Error 1

内容としては libyaml のインストールをしろというものでした

こちらの 3rd パーティライブラリのソースコード同梱廃止 に伴い 必要であれば自分で入れる必要があります

libyaml や libffi のような 3rd パーティのライブラリのソースコードの同梱を廃止しました
Psych に同梱していた libyaml のソースコードは削除されました。ユーザーは自身で Ubuntu や Debian プラットフォームなら libyaml-dev パッケージをインストールする必要があります。このパッケージ名称はプラットフォームごとに異なります。
Fiddle に同梱していた libffi のソースコードも削除されました

なので以下の順でインストールを行いました

$ brew install libyaml
$ rbenv install 3.2.0 

そもそも binding.irbって何?

  • binding.irb は Ruby2.4から登場した標準ライブラリのデバッガ
  • 標準ライブラリなので pry-byebug のようなgemを入れる必要はなくそのまま使える!

バージョンを重ねるごとに新機能は増えているのですが、Ruby3.1の段階で binding.pry で使い続けてきた以下のようなコマンドやエイリアスが多かったがゆえに binding.irb で使えなかった時は違和感を覚えるものでした

  • next
  • step
  • continue
  • whereami のエイリアスである @

Ruby 3.2 のirbを試してみる

試しに以下のコードで実際に動かしてみます

class Forger
  attr_accessor :father, :mother, :child, :pet

  def family_structure
    <<~EOS
      父: #{father}
      母: #{mother}
      子供: #{child}
      ペット: #{pet}
    EOS
  end
end

forger = Forger.new
binding.irb
forger.father = 'ロイド'
forger.mother = 'ヨル'
forger.child = 'アーニャ'
forger.pet = 'ボンド'
puts forger.family_structure

スクリーンショット 2023-01-24 18.58.45.png

binding.irb のブレイクポイントで止まりました。まぁ、これは前のバージョンでもできましたね。ですが・・・

スクリーンショット 2023-01-24 19.04.33.png

おぉ、 next 使える!!!

ちなみに 3.1より前のバージョンで next すると以下のようにエラー出力されてしまい実行できません :joy: :joy: :joy:

/test.rb: /test.rb:1: Can't escape from eval with next (SyntaxError)

ちなみにこれらのコマンドですが、 実際には debug.gem から実行しているとのことです
show_cmds を実行するとコマンド一覧が見れますが、以下の説明を見ると確かdebug.gemが起動していると書かれています

Debugging
  debug          Start the debugger of debug.gem.
  break          Start the debugger of debug.gem and run its `break` command.
  catch          Start the debugger of debug.gem and run its `catch` command.
  next           Start the debugger of debug.gem and run its `next` command.
  delete         Start the debugger of debug.gem and run its `delete` command.
  step           Start the debugger of debug.gem and run its `step` command.
  continue       Start the debugger of debug.gem and run its `continue` command.
  finish         Start the debugger of debug.gem and run its `finish` command.
  backtrace      Start the debugger of debug.gem and run its `backtrace` command.
  info           Start the debugger of debug.gem and run its `info` command.

その他に以下のように .irbrc で設定すれば色々irbのカスタマイズができました!

.irbrc
IRB.conf[:USE_AUTOCOMPLETE] = false
IRB.conf[:COMMAND_ALIASES].merge!({ :'&' => :show_cmds })
  • USE_AUTOCOMPLETE: irbが開いた時コマンド入力するときのオートコンプリートを非表示にするかどうか(デフォルトは true上記のように書けば非表示にできる)
デフォルト(trueの場合) falseにした場合
スクリーンショット 2023-01-24 19.30.13.png スクリーンショット 2023-01-24 19.30.41.png
  • COMMAND_ALIASES: irb コマンドのエイリアスを設定(上記の例だと & を実行すると show_cmds が実行される)

スクリーンショット 2023-01-24 19.32.42.png

私が試した感じですが debug.gemを実行するような next などのコマンドに関してはエイリアスは設定できずあくまで irbのコマンドのみのエイリアスの設定できるみたいでした

所感

結論から言ってかなりbinding.pryに近づいたなという印象でした。 ほぼ binding.pry のようなデバッガーがgemのインストールなしでできるようになったのは良くなったなと思います!
.irbrc でカスタマイズできるのも使い勝手良くなりそうですね。特にオートコンプリートは個人によって意見が分かれる要素だと思うので切り替えできるのは嬉しかったです。

強いて言えば debug.gemのコマンドのエイリアスも設定できればよかったです

実際に開発する際にRuby 3.2になった際には binding.irb に切り替えても良いと思えました!

まとめ

今回は 進化した binding.irb を紹介しました。開発業務行うにあたりデバッグというものは欠かせないものですし、rubyひとつとっても多岐にわたるgemがあります。そんな中標準で大分使いやすい印象に変わりました。

みなさんも是非 Ruby3.2からは binding.irbを使ってみてはいかがでしょうか

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?