Help us understand the problem. What is going on with this article?

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

More than 5 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/

okuramasafumi
Rails developer. I love vim and zsh.
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away