Guardのプロンプトが表示されなくなってから解決するまで

Railsのテスト自動化にはGuardを使っている @kadoppe です。こんにちは。

ある日、Railsアプリで使うGemパッケージ周りをいじっていると、いつの間にかGuardのプロンプトが表示されなくなってしまいました。プロンプトはこんなやつですね。

プロンプトが表示されないと、Guardに対してコマンドを入力・実行することができません。Guardを終了することもできないので、これは不便、というか仕事ができない。というわけで問題を解決するまでの道のりをメモしておこうと思います。

各種Gemパッケージのバージョンは以下の通りです。Rubyのバージョンは2.0.0p247。

  • guard (1.8.3)
  • pry (0.9.12.2)
  • pry-stack_explorer (0.4.9.1)
  • pry-exception_explorer (0.2.3)

いろいろ調べた結果、GuardのプロンプトはPryによって出力されていることが判明。

ruby on rails – Why is guard stopping? – Stack Overflow

試しにシェルでpryコマンドを実行してみたところ、こちらもプロンプトが表示されませんでした。なるほど、つまりPryに問題があるわけですね。そーいえば、直前にPry関係のGemをアップデートしたのでした。

ある程度問題を切り分けられたところで、pryコマンドのオプションを調べてみることに。

なんとなくPryのプラグインが怪しい気がしていたので、まずは--no-pluginsオプションを指定し、プラグインをすべて無効化してみることに。すると、あっさり正しくプロンプトが表示されました。

そもそもどんなプラグインがインストールされているのか確認するために、--instaled-pluginsオプションを指定してプラグイン一覧を表示しました。結果は以下のとおり。

あとは、--select-pluginオプションを指定して、1つだけプラグインを有効にしてコマンド実行を繰り返すことで、プロンプトが表示されない原因となっているプラグインを特定するだけ。。だと思ったのですが、何かを勘違いをしているのか、どのプラグインを有効にした場合もプロンプトが表示されず。

困った僕は、とりあえず現在使っていない「exception_explorer(Gem名:pry-exception_explorer)」と「stack_explorer(Gem名:pry-stack_explorer)」をアンインストールすることに。

その後再度pryコマンドを実行すると正しくプロンプトが表示されました。もちろんGuard上のプロンプトもバッチリ。

--select-pluginコマンドを使って原因となっているプラグインをしっかり特定できなかったのは残念でしたが、とりあえず問題は解決できたのでよしとしました。どこかの誰かの参考になれば。

おしまい。