【Tips】開発者必見!Rubyスクリプトを標準機能でデバッグするシンプルな方法

[PR]記事内のアフィリエイトリンクから収入を得る場合があります
  • URLをコピーしました!

S 20231211 130147

プログラムにバグはつきもので、バグを解消するためにはデバッグ作業が必要となります。

RubyではインタラクティブにデバッグするためのさまざまなGemが利用可能ですが、これらのGemを使わず標準機能だけでデバッグする方法を知っていると便利です。

Ruby on Railsの開発者Andres Chacon氏は、そんなRuby開発者向けのTipsを紹介する記事「Interactive debugging without the need to install gems(gemsをインストールする必要のないインタラクティブなデバッグ)」を公開しています。

この記事によると、Rubyスクリプトをデバッグする場合、バインディングを使うという選択肢があるそうです。バインディングはある時点での実行コンテキストをカプセル化したもので、Kernel#bindingで作成し、インスタンスメソッドirbを使ってコンソールを呼び出すことができます。

例えば以下のような内容のdoor.rbを作成し、ruby door.rbで実行します。

$ ruby door.rb

From: door.rb @ line 5 :

    1: # door.rb
    2: class Door
    3:   def initialize
    4:     @open = false
 => 5:     binding.irb
    6:     puts "Is the door open: #{@open}"
    7:   end
    8: end
    9:
    10: Door.new

irb(#<Door:0x0000000101d96a00>):001:0> @open
=> false
irb(#<Door:0x0000000101d96a00>):002:0> @open=true
=> true
irb(#<Door:0x0000000101d96a00>):003:0> exit
Is the door open: true

Doorクラスのイニシャライザの途中にあるbinding.irbを呼び出した箇所でirbが起動し、インスタンス変数@openの値を確認し(その時点ではfalse)、値をtrueに変更した後、実行を継続できることがわかります。

また、debug gemがインストールされていれば、IRBセッションでdebugと入力するだけで有効にすることができ、より便利なデバッガーの機能を利用することができます。IRBに関する情報はこちらから、debug統合機能に関してはこちらから確認可能です。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次