Bye Bye Moore

PoCソルジャーな零細事業主が作業メモを残すブログ

スクリプト中でpryを実行してデバッグの手間を減らす

スクリプト中にpryのバインディングポイントを設定することで、
printfデバッグをせずとも変数の状態やらメソッド実行時の挙動やらを調べることができます

スクリプト中に記述

$ ruby test2.rb 
From: /Users/shuzo_kino/test2.rb @ line 4 :

    1: require 'pry-remote'
    2: 
    3: a = 2
 => 4: binding.pry
    5: 
    6: 

[1] pry(main)> 

あとは、通常のpry通りに使えます

[1] pry(main)> a
=> 2
[2] pry(main)> exit

リモートでやる

上記だけでも十五分に便利ですが…
なんと、リモート環境からバインディングする方法もあります。

$ gem install pry-remote

でgemを導入します。
バインディングポイントを設定して実際スクリプトを動かすと…

$ ruby test.rb 
[pry-remote] Waiting for client on druby://127.0.0.1:9876

と受信待機に。
他のコンソールからpry-remoteに接続すれば、drubyのサーバにアクセスできます。

$ pry-remote 

From: /Users/shuzo_kino/test.rb @ line 5 :

    1: require 'pry-remote'
    2: 
    3: a = 90
    4: b = 9
 => 5: binding.remote_pry 
    6: b = a + b
    7: binding.remote_pry
    8: 

[1] pry(main)>

あとの使い勝手は先ほどと同じ。
exitすると

[pry-remote] Remote session terminated
[pry-remote] Ensure stop service

と出て、サーバが停止します。
参考スクリプトのように、複数のポイントを設定可能です。