algonote

There's More Than One Way To Do It

いろんな言語でbinding.pry

処理の途中結果確認ツールの比較

binding.pryとは

デバッグする際にこの時点での処理が見たい時がある。静的言語でIDEを使っている場合はブレークポイントをUIから設定する方法もあるが、pureテキストエディターでスクリプト言語を書いている場合にはそういった機構は無い。

REPLを開いて処理と同じライブラリを読み込んでいけば同じ状態になるが面倒。Rubyにおいてはbinding.pryやbinding.irbを挟むと処理の途中の状態でREPLを起動可能。他の言語でも同様の機構があるか調べた。

Ruby

gem install pry

require 'pry'
a = 1
b = 2
binding.pry # open REPL
puts a+b

Ruby 2.4からはirbで同じことができる

require 'irb'
a = 1
b = 2
binding.irb # open REPL
puts a+b

Python

pip install ipython

from IPython import embed
a = 1
b = 2
embed() # open REPL
print(a+b)

Node.js

コツがいる。 node inspect test.js

a = 1;
b = 2;
debugger; // breakpoint
console.log(a+b);

起動時はスクリプトの頭にいるのでbreakpointまで移動

debug> cont // Continue to breakpoint
debug> repl // Open REPL

PHP

composer require psy/psysh

<?php
require 'vendor/autoload.php';

$a = 1;
$b = 2;
eval(\Psy\sh()); // open REPL
echo $a+$b;
echo "\n";

所感

Node.jsだけ独特