🅿️
【Ruby】今さら聞けない puts, p, pp
概要
Ruby のデバッグでよく使われる puts, p, pp の違いについて解説します。
今までなんとなく使っていた方は、この記事で理解しましょう。
結論
-
puts
...オブジェクトを文字列に変換し、改行を追加。 -
p
...オブジェクトを出力。 -
pp
...複雑なオブジェクト構造を見やすく整形するライブラリ。
検証
こちらのサンプルコードの実行結果を見てみます。
require 'pp'
# データの定義
string = "Hello, World!"
array = [1, 2, 3]
complex_array = [
{name: "Alice", age: 30, contact: {email: "alice@example.com", phone: "123-4567"}},
{name: "Bob", age: 25, contact: {email: "bob@example.com", phone: "987-6543"}}
]
# putsで出力
puts "putsでの出力:"
puts string
puts array
puts complex_array
# pで出力
puts "\npでの出力:"
p string
p array
p complex_array
# ppで出力
puts "\nppでの出力:"
pp string
pp array
pp complex_array
puts
Hello, World!
1
2
3
{:name=>"Alice", :age=>30, :contact=>{:email=>"alice@example.com", :phone=>"123-4567"}}
{:name=>"Bob", :age=>25, :contact=>{:email=>"bob@example.com", :phone=>"987-6543"}}
p
"Hello, World!"
[1, 2, 3]
[{:name=>"Alice", :age=>30, :contact=>{:email=>"alice@example.com", :phone=>"123-4567"}},
{:name=>"Bob", :age=>25, :contact=>{:email=>"bob@example.com", :phone=>"987-6543"}}]
pp
"Hello, World!"
[1, 2, 3]
[{:name=>"Alice",
:age=>30,
:contact=>{:email=>"alice@example.com", :phone=>"123-4567"}},
{:name=>"Bob",
:age=>25,
:contact=>{:email=>"bob@example.com", :phone=>"987-6543"}}]
まとめ
メソッド | オブジェクトの出力の仕方 | 整形するか | 用途 |
---|---|---|---|
puts | 文字列として出力し、改行を追加 | なし | 一般的な文字列の出力 |
p | 詳細な情報を出力 | なし | デバッグ時の詳細情報出力 |
pp | 見やすく整形して出力 | あり | 複雑なデータ構造の視覚化 |
puts
は文字列への変換と改行を行うので、値を確認するなどのデバッグには向かないですね。
標準で入っていますし、デバッグでは pp
を使うのが無難な気がします。
また、 p
は内部で inspect
メソッドを使用しており、 pp
はそれを見やすく整形するライブラリです。
Discussion