Ruby でデバッグする ruby_jard というツールが凄まじくすごい

今日 Ruby Hacking Challenge in Hamada.rb に参加したときに ruby_jard という Rubyデバッグツールを教えてもらいました。
これがかなり凄まじくすごかったのでちょっとまとめてみます。

ruby_jard とは

ruby_jard とは Ruby のコードをデバッグするツールになります。

rubyjard.org

立ち位置としては byebug のようなデバッグツールになっており、コード上で jard というメソッドを呼び出すとそのタイミングでプロセスが停止して、コンソール上から Ruby のコードを実行できるような形になっています。
実際にどういう形でデバッグするのかは以下の動画を見てもらうとわかりやすいと思います。

使い方

使い方は簡単で次のように通常の gem と同じようにインストールし、必要な箇所で jard を呼び出すだけです。

# Gemfile
gem 'ruby_jard'
# main.rb
require "ruby_jard"

def hoge
  a = 1
  b = 2
  jard # Debugger will stop here
  c = a + b
end

def foo
  hoge
end
foo

あとは bundle exec ruby main.rb のように Ruby のコードを実行するだけです。
実行すると以下のような画面でプロセスが止まります。

これは全部コンソール上で表示されており、各ウィンドウでは以下のような情報が表示されます。

  • 左上:ソースコード
  • 右上:バックトレース
  • 右下:起動してるスレッド一覧
  • 左下:変数一覧
  • 一番下:入力コンソール

変数一覧やバックトレースが画面内に表示されるのはかなり便利ですね。
更にステップ実行はもちろんバックトレースの位置にも起動中に移動する事ができます。
凄まじくすごい…。

所感

と、言う感じでかなりインパクトが強いデバッグツールなので簡単にまとめてみました。
バックトレースが移動できるのはかなりいいですね、このあたりは前々から欲しいなーと思っていたので…。
しかもこのあたりをコンソール上で完結して操作できるのはかなり面白いですよね。
ぶっちゃけこういうのを Vim 上でつくりたいんじゃが…。
逆にちょっと気になった点は以下の通りです。

  • やや操作が重い
  • RSpec で実行したら変なところで止まった
  • jard のコンソール上で縦に長い値を出力するとレイアウトがずれた
    • 各ウィンドウの大きさを調整したい…

操作に関してはユーザ側でカスタマイズできればいいのかなーって感じですねえ。
ステップ実行やバックトレースの移動なんかもキーマッピングはカスタマイズしたい気持ち。
あと上みたいなサンプルコードじゃなくて実際のアプリケーションコードでも試してみたんですが雰囲気動いていそうな感じはしたのでもうちょっと試してみたいですねー。
とにかく今後に期待したい。

宣伝

毎月 Hamada.rb という勉強会が開催されています。
Ruby Hacking Challenge in Hamada.rb もこの勉強会で行っているイベントの1つになっています(どっちも同じ会場。
今回の記事のように Ruby の雑談やもくもく会がメインの内容となっています。
最近ではオンラインで開催されているので地方にいる方も参加しやすいイベントになっているので気になる方がいればぜひぜひ参加してみるといいと思います!
最近は id:gamelinks007 さんとわたしが Ruby の新機能やバグについてずーっと雑談してる会になりつつある