お手軽にRuby Gemのコードを開いて編集し元に戻す

Gemのコードで発生するエラーの原因を調べたり、コードを動かしながら確認したいと思ったりした時にGemのコードを手軽に開いてbinding.bを仕込んでデバッグしたい。

bundle install --path vendor/bundle でGemをインストールしてデバッグするのが一般的なやり方なのかもしれないが、ちょっと面倒。

そんな時に簡単にGemを開いてデバッグできる方法があった。

Gemのコードを開く

bundle open <Gem Name>

このコマンドでGemのコードを開くことができる。 以下のどちらかの環境変数にエディタのパスを設定すれば、そのエディタで開くことができる。

  • EDITOR
  • BUNDLER_EDITOR

EDITORを設定するとGitのコミットメッセージの編集に使用するエディタも変わってしまうので、BUNDLER_EDITORに設定するのがおすすめ。

私はVSCodeを使用しているので、fish shellの設定ファイル config.fish に以下を指定している。

set -gx BUNDLER_EDITOR (which code)

bashを使っている人は .bash_profile に以下を指定すれば良さそう。

export BUNDLER_EDITOR=$(which code)

Bundlerで管理していないGemのコードを開きたい場合は?

gemにもサブコマンドopenがある。

gem open <Gem Name>

Gemのコードを元に戻す

Gemの複数の箇所にbinding.bbinding.pryを仕込んだ場合は元に戻すのが大変。 そんな時に便利なコマンドがある。

bundle pristine <Gem Name>

"pristine"は「手付かずの」という意味らしい。 <Gem Name>を指定しないで実行した場合は、Gemfileに記載のあるすべてのGemを元の状態に戻すことができる。

Bundlerで管理していないGemのコードを元に戻したい場合は?

openと同様にpristineもgemのサブコマンドにある。

gem pristine <Gem Name>

すべてのGemの状態を元に戻す場合は以下のコマンドを実行する。

gem pristine --all