Edited at

Pryコンソールのプロンプトをカラフルかつ便利にする

More than 3 years have passed since last update.


.pryrc

Rubyistの皆さんはもうすでにPryを使っていると思います。が、Pryの真の力は~/.pryrcをカスタムすることで発揮されます。ファイルがない人は作りましょう(5秒)。

touch ~/.pryrc

~/.pryrcの内容は、Pryのセッションが開始されるたびに実行されます。たくさんのことができますが、今回はプロンプトを改良することに絞ります。


Pry.config.prompt

Pryのプロンプトの実体はPry.config.promptで、文字列または文字列を返すProcオブジェクトを指定できます。プロンプトを動的に変更したい場合はProcを使うのがいいでしょう。

ところで、Pryを使っていると、たまに今のRubyのバージョンがいくつか忘れてしまうことがありますね?まあ、puts RUBY_VERSIONすればいいんですけど、どうせならプロンプトに表示しましょう。pryrcに以下を記述してください(コピペで5秒)。


pryrc

Pry.config.prompt = proc do |obj, nest_level, _pry_|

version = ''
version << "#{RUBY_VERSION}"

"#{version} #{Pry.config.prompt_name}(#{Pry.view_clip(obj)})> "
end


pryrcを保存したあとでpryコマンドを実行すると、プロンプトに実行中のRubyのバージョンが表示されると思います。


色を付ける

ここからが本題、プロンプトに色を付けてみましょう。せっかくなのでRubyの赤色にしてみます(確認含めて20秒)。


pryrc

Pry.config.color = true

Pry.config.prompt = proc do |obj, nest_level, _pry_|
version = ''
version << "\001\e[0;31m\002"
version << "#{RUBY_VERSION}"
version << "\001\e[0m\002"

"#{version} #{Pry.config.prompt_name}(#{Pry.view_clip(obj)})> "
end


どうでしょう、色は付いたでしょうか。大雑把に説明すると、\001\e\002というのがエスケープ用のコード、[0;31mがANSIカラーコードです。


Rails用のコード

RailsのコンソールをPryにしている人も多いでしょう。Railsプロジェクトを複数抱えている人の場合、よくバージョンの違いでつまずくことがありますが、そんな人はPryのコンソールにRailsのバージョンが表示されると助かるのではないでしょうか。pryrcを以下のように変更します(20秒)。


pryrc

Pry.config.color = true

Pry.config.prompt = proc do |obj, nest_level, _pry_|
version = ''
version << "Rails#{Rails.version}" if defined? Rails
version << "\001\e[0;31m\002"
version << "#{RUBY_VERSION}"
version << "\001\e[0m\002"

"#{version} #{Pry.config.prompt_name}(#{Pry.view_clip(obj)})> "
end


これでrails cを実行した際、Pryをコンソールで利用している人なら、プロンプトにRailsのバージョンが表示されたはずです。


さらに改造

プロンプトの改良はさらに先に進めることもできます。例えば、2.0.0以前のRubyではパッチ番号が意味を持ちますのでそれを表示してもいいですし、Rubyのバージョンによってカラーコードを変更すれば文字で表示する必要はなくなるかもしれません。ほかにも動的な変更を加える余地は大きいはずです。


参考資料

http://traz.github.io/post/2013/Pry-prompt/