「あけましておめでとうございます。ことしもよろろすおねがいするます」
って感じで昨年放送された某スパイアニメ風な形でスタートさせていただきました。
今年も記事投稿していこうと思いますのでよろしくお願いいたします!
はじめ
去年の12月に恒例のRuby新バージョンのリリースがされました
今年はそれらの機能について実際に動かしたりして所感を書こうと思います!
今回紹介する 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
binding.irb
のブレイクポイントで止まりました。まぁ、これは前のバージョンでもできましたね。ですが・・・
おぉ、 next
使える!!!
ちなみに 3.1より前のバージョンで next
すると以下のようにエラー出力されてしまい実行できません
/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のカスタマイズができました!
IRB.conf[:USE_AUTOCOMPLETE] = false
IRB.conf[:COMMAND_ALIASES].merge!({ :'&' => :show_cmds })
- USE_AUTOCOMPLETE: irbが開いた時コマンド入力するときのオートコンプリートを非表示にするかどうか(デフォルトは true上記のように書けば非表示にできる)
デフォルト(trueの場合) | falseにした場合 |
---|---|
- COMMAND_ALIASES: irb コマンドのエイリアスを設定(上記の例だと
&
を実行するとshow_cmds
が実行される)
私が試した感じですが 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を使ってみてはいかがでしょうか