LoginSignup
6
2

More than 3 years have passed since last update.

pp は require 無しで使える

Last updated at Posted at 2021-02-11

pp とは

pen-pineapple のことではない。
Ruby のメソッドで,ややこしいオブジェクト1もいい感じに表示してくれるもの。
用途は p メソッドと同じだが,それよりもっと分かりやすくきれいに表示してくれることになっている。メソッド名は pretty print から。

ppp でどう違うかはよく知らないけど,たとえば要素数が多いハッシュを表示させると,後者では改行を入れてくれるようだ(小さいハッシュだと変わらない)。

p "A".upto("K").with_index.to_h
# => {"A"=>0, "B"=>1, "C"=>2, "D"=>3, "E"=>4, "F"=>5, "G"=>6, "H"=>7, "I"=>8, "J"=>9, "K"=>10}

pp "A".upto("K").with_index.to_h
# => {"A"=>0,
#     "B"=>1,
#     "C"=>2,
#     "D"=>3,
#     "E"=>4,
#     "F"=>5,
#     "G"=>6,
#     "H"=>7,
#     "I"=>8,
#     "J"=>9,
#     "K"=>10}

require 必要?

pp はメソッド名だがライブラリーの名称でもある。

pp ライブラリーは組込みではなく「標準添付ライブラリー」だ。だからインストールは必要ないが,require が必要となる。
なのだけれど,実は Ruby 2.5 以降では2pp メソッドが最初に呼ばれたときに pp ライブラリーを裏で自動的に require してくれるようになっている。
だから,「require が必要」なのは嘘ではないけれど,「ユーザーにとっては不要」なのだ。

(ユーザーにとって)require が不要,ということは公式リファレンスマニュアルにも書かれている:
Kernel.#pp (Ruby 3.0.0 リファレンスマニュアル)

Ruby 2.5 リリース時に公開された @jnchito さんの以下の記事にも書かれている。
サンプルコードでわかる!Ruby 2.5の主な新機能と変更点 Part 2 - Qiita

記事を書いたきっかけ

以下の記事を読んでいて,「おや」と思った。
週刊Railsウォッチ(20210209後編)Rubyでミニ言語処理系を作る、Kernel#getsの意外な機能、CSSのcontent-visibilityほか|TechRacho(テックラッチョ)〜エンジニアの「?」を「!」に〜|BPS株式会社

ここに

「ちなみにpprequireしないと使えないんですよ」

という台詞が出てくる。
そういえば,いろいろなところで「require が必要」と書かれているなあ,と思ったのがこの記事を書いたきっかけ。
いま改めて上記の記事を見に行くと,本件は既に @ima1zumi さんが指摘されていて,記事の訂正も済んでいた。

なお,「週刊Railsウォッチ」は面白くて役に立つので毎回楽しみにしている。


  1. 「ややこしいオブジェクト」というのは,「ハッシュの配列」みたいなのとか。 

  2. Ruby 2.4 系のサポートは 2020-04-05 に切れている ので,現在サポートされているすべての Ruby バージョンに当てはまる。 

6
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
2