CTC 教育サービス
[IT研修]注目キーワード Python Power Platform 最新技術動向 生成AI Docker Kubernetes
Rubyでメソッドの挙動を調べたり、ちょっとしたサンプルコードを実行したりといった時に活躍するのがIRBです。Rubyがインストールされている環境(*1)であれば簡単に実行できるため、誰しも一度は使ったことがあるのではないでしょうか。
手軽に使えるIRBですが、いくつか不満な点もあります。特に可読性の面においては、非常に見づらいなあというのが率直な感想です(*2)。
そこで今回、IRBの代わりにお勧めしたいのがPry(*3)です。Pry公式サイト(*4)によると、「Pry is a powerful alternative to the standard IRB shell for Ruby.」と書かれており、一言でいえばIRBの強化版に当たるものです。
インストールはGemから行います(*5)。
gem install pry pry-doc
インストールが完了したら、早速使ってみましょう。Pryを起動するにはpryコマンドを実行します。
基本的な使い方はIRBと同様ですので、適当に計算したり、メソッドを呼び出したりしてみてください。
コードがカラーリングされていたり、クラスやメソッドの定義部では適切にインデントされたりするのが分かると思います。
また、戻り値がArrayやHashで出力が一行に収まらない場合は、要素ごとに改行して出力してくれます。その上、要素数が多い場合は途中で表示を止めてくれます。
このようなシンタックスハイライトを含む可読性の向上だけでも、IRBの強化版と言うに値するでしょう。しかし、Pryの機能はそれだけにとどまりません。ここでは、使うと便利な機能をいくつかご紹介いたします。
式の途中でTabキーを押すと、コードの補完(対象がいくつか存在する場合はその一覧の表示)を行ってくれます。 使い勝手はMacやLinuxのTab補完とほぼ同じです。
IRBではShellコマンドを呼び出す場合工夫が必要でしたが(*6)、PryではShellコマンドが統合されており直接呼び出すことができます。呼び出す際は、Shellコマンドの前に「.(ドット)」をつけて実行します。
Pryでは便利な組み込みコマンドを使用することができます。Pry上でhelpコマンドを実行すると組み込みコマンドの一覧とその概要が表示されます。各コマンドの詳しい説明を参照する場合は実行時に-hオプションを指定します。
以下に、よく使いそうなコマンドを挙げます。
show-method 対象のメソッドやクラスの定義部分を表示します。
show-doc 対象のメソッドやクラスのdocコメントを表示します。
ls カレントコンテキストに定義されているメソッドや変数の一覧を表示します。
cd カレントコンテキストを指定したオブジェクトに変更します。
特にlsとcdは組み合わせて使用することで、オブジェクトの状態やメソッドの挙動を確認するのに役立つことでしょう。
Pryはランタイム上(任意のRubyスクリプト内から)でも呼び出すことができます。
require 'pry'
puts "Run Pry!" binding.pry
上記のコードを実行すると、「Run Pry!」と表示された後にPryが起動します。
起動時のカレントコンテキストはpryメソッドのレシーバとなります(*7)。必要に応じてレシーバを切り替えることでデバッグをより柔軟に行うことができます。
最後にPryをRailsから使う方法をご紹介いたします。PryをRailsで扱うためのGemが用意されていますので、そちらをインストールします。
# コマンドよりインストール gem install pry-rails
# Gemfileに追記(*8) gem "pry-rails"
インストール後、rails cでRailsコンソールを起動するとIRBの代わりにPryが立ち上がります。前述したShellコマンドとの統合のおかげで、rakeがRailsコンソール上で使えるのは非常に便利です。 またコントローラやモデルにpryメソッドを書いておいて、Pryでデバッグするような使い方もできます。
以上、簡単ではありましたがPryのご紹介をしてまいりました。まだまだ説明しきれていない部分もありますので、ぜひ実際に使ってみてください。Pryはきっとプログラミングをより便利に、より楽しくしてくれることでしょう。
それでは、Enjoy Ruby!
*1:本コラムではIRB、PryともにWindows環境(コマンドプロンプト)での実行結果を掲載していますが、Mac、Linuxでも同様に動作します。
*2:「.irbrc」という設定ファイルを変更すれば、カスタマイズすることも可能です。
*3:「ぷらい」と読みます。
*5:pry-docはCの実装部(組み込みライブラリなど)を読む場合に使用します。
*6:バッククォートやKernel# systemを用いるなど
*7:bindingは該当行のコンテキスト情報(変数やメソッドなどの環境情報)を格納したBindingオブジェクトを返します。ですので、基本的にはbindingの戻り値をレシーバとすることが多いはずです。
*8:実際に記載する場合は、development環境(及びtest環境)のみで使用するようにした方がいいと思います。
[IT研修]注目キーワード Python Power Platform 最新技術動向 生成AI Docker Kubernetes