Rubyには標準出力に文字列や変数の値を表示するメソッドが複数あり、プログラムのデバックによく利用されますが、その中でもよく使われるのがpメソッドです。アルファベットの「p」1文字に、スペースで区切って変数を指定するだけで変数の値を表示できるので簡単に使えます。
今回はpメソッドの表示に使われる標準出力と、その使い方について詳しく解説します。
標準出力とは
Rubyには文字列や変数の値などを標準出力に表示する機能があります。Rubyを学び始めた方は、pメソッドやputsメソッドを使って「Hollow World」などの文字を画面に表示させたことがあるのではないでしょうか。
この記事ではRubyのPメソッドについて解説しますが、その出力先となる標準出力について知らないと、pメソッドの機能を理解できません。まずは、標準出力について解説します。
標準出力を辞書で引くと
IT用語辞典e-wordsで標準出力を検索すると、コンピュータの標準的に利用できるデータ出力機能という意味だそうです。昔のコンピュータはちょうどLinuxのターミナルのようなディスプレイとキーボードで構成されたデバイスを使って操作していました。そのため、当時のコンピュータの標準出力と言えば、コンピュータを操作するデバイスの画面のことでした。
そのようなコンピュータを操作するデバイスと同じように使えるように作られたアプリケーションがLinuxなどのターミナルです。そのため標準出力と言えばLinuxなどのターミナルへの表示を意味します。
標準出力 【standard output】 stdout
標準出力とは、コンピュータ上で実行されているプログラムが、特に何も指定されていない場合に標準的に利用するデータ出力先。コンピュータの出力装置やOSが提供するデータ出力機能・経路などを指し、多くのシステムではディスプレイ装置による利用者への文字表示が標準出力に設定されている。システム上では “stdout” の略号で表されることが多い。
Rubyはターミナルから実行する
最近はWebブラウザからRubyを操作できる学習サイトもありますが、通常Rubyを実行する場合、LinuxやmacOSのターミナル、またWindowsのコマンドプロンプトから実行します。
先ほど紹介したように今標準出力と言えば、Linuxなどで使えるターミナルへの表示です。そのため、LinuxのターミナルなどでRubyのプログラムを実行した際、文字列や変数の値が表示されたら、それらの表示には標準出力に出力するメソッドが使われています。
Rubyで標準出力するメソッド
Rubyには、文字列や変数の値を標準出力に表示する複数のメソッドがあり、機能に応じて使い分けることが可能です。次にメソッドと機能を簡単に紹介します。
- printメソッド:末尾に改行が入らない
- putsメソッド:末尾に改行が入る
- pメソッド:文字列は「”」で囲まれ、数字はそのまま出力され、末尾に改行が入る
- printfメソッド:出力フォーマットを指定する
標準出力については、下記の記事でも詳しく紹介しているので参照してください。
Ruby入門】入力と出力
pメソッドの基本
先ほど紹介したようにpメソッドは、引数に指定した文字列や変数の値を、文字列はダブルクォーテーションで囲み、また数字をそのまま出力さし、さらに末尾で改行して標準出力に表示するメソッドです。
次からpメソッドの基本について紹介します。
pメソッドの使い方
pメソッドは、引数に文字列や変数を指定すると、それを人が見やすい形に整形して標準出力に出力します。
文字列を指定すると「”」で囲まれるて出力されることから、よくデバックで使われるメソッドです。また複数の引数を「,」で区切って指定した場合、順番にその文字列と改行を繰り返して表示します。
pメソッドの使い方の例
a1 = 10 b1 = 'TEST' p a1 => 10 p b1 => "TEST" p a1,b1 => 10 => "TEST"
エスケープ文字の扱い
エスケープ文字とは、「\n」や「\b」のように\マークを付けて、改行やタブなどの表示に使われる特殊な文字です。printメソッドやputsメソッドでエスケープ文字を使うと、改行やタブとして表示されますが、pメソッドではそのまま表示します。
エスケープ文字を表示した例
str = "Sample\nTest" p str => "Sample\nTest"
同じ文字列をputsで表示すると改行されて表示されます。
str = "Sample\nTest" p str => Sample => Test
pメソッドを使ったデバックの例
pメソッドは、「p」に続けてチェックしたい変数を記述すれば、その変数の値を表示する便利なメソッドです。そのためRubyのプログラムのデバックでよく利用されます。
次からpメソッドを用いたデバックの例を紹介します。
数字を表示する例
C言語やJavaなどのコンパイル型のプログラミング言語では、変数を利用する前に変数の型を指定しなければなりません。しかしRubyでは、そのような手続きは不要です。そのため変数の型を気にせずに使えます。
とはいえRubyの内部ではその変数の型が管理されており、そのせいで予期しない動作となることもあります。特に数字を格納した変数は、それが数字なのか文字列なのかで結果が変わることがあるので注意してください。
先ほど説明したようにpメソッドで変数を表示すると、文字列では「”」で囲まれて表示されます。変数に数字を格納して誤動作する場合は、pメソッドでデバックしてみてください。
数字を文字列として扱った場合の出力例
a1 = 10 s1 = (String)a1 p s1 => "10"
ハッシュや配列の要素を表示する
pメソッドにハッシュや配列を指定すると、その内容を表示します。大きなハッシュや配列を標準出力にそのまま出力してしまうと文字が多すぎて人の目ではチェックできませんが、ログファイルに出力するなどして、デバック用でよく使われる機能です。
pメソッドでハッシュを表示した例
h1 = {:id => 1, :name => 'example' } p h1 => {:id => 10, :name => 'example' }
pメソッドで配列を表示した例
r1 = [10, 11, 12, 14, 15] p h1 => [10, 11, 12, 14, 15]
改行位置をチェックする
Rubyのプログラムの中で文字列を合成した場合、余計な改行が含まれていたり、逆に改行が無いことで読み難いケースがあります。このような場合、合成に使ったどの文字列の影響かを調べるのは面倒です。
先ほど、pメソッドで文字列を表示すると、「\n」などのエスケープ文字を表示すると紹介しましたが、この機能を文字列のデバックに利用することで、改行のエスケープ文字の位置をチェックできます。
ppライブラリを利用する
これまで解説したようにpメソッドはRubyのプログラムをデバックするのに便利なメソッドです。しかしハッシュや配列などpメソッドで表示すると長い文字列が表示されてしまい、人の目でチェックするのは困難なケースもあります。
そのようなケースでは、ppライブラリを利用してみてください。なおppライブラリとは、Ruby標準のライブラリで、オブジェクトなどを見やすく整形して出力するためのクラスです。
ppクラスを使ったハッシュの出力例
require 'pp' h = {:a => 'a', :b => 'bb', :c => 'ccc', :d => 'dddd'} pp h => :a => "a", :b => "bb", :c => "ccc", :d => "dddd"
まとめ
これまで紹介したようにpメソッドは、主にRubyのプログラムのデバックで利用される、文字列や変数の値を見やすい形で標準出力に表示する機能です。なおpメソッドと同じようにメソッドにputsメソッドもあり、これもよくデバックで利用されます。どちらも便利なメソッドですが、簡潔に書けるpメソッドの利用をおすすめします。
Ruby on RailsによるWebシステムの開発など、Rubyのプログラムをターミナルなどで操作するケースは少ないかもしれません。しかし、標準出力はエラーログとしてファイルに書き出せえうので、動作チェックやデバックなどに利用できます。pメソッドをうまく利用してRubyのプログラムミングに活用してください。