【Ruby入門】print puts p printf 出力メソッドを極める!

こんにちは! フリーエンジニアの長瀬です。

Rubyにはログやコンソールに何らかの処理の結果を目に見える形で出力するためのメソッドとしてprintメソッドがあります。

そして、Rubyにはprintメソッド以外にも様々な出力系メソッドが存在します。

この記事では、

・printメソッド
・putsメソッド
・pメソッド
・printfメソッド
・sprintf

という基本的な内容から、

・変数を扱う方法
・複数の引数を渡す方法
・文字列の桁数を指定する
・数値型の桁数を指定する
・joinメソッドを使って、配列の中身をつなげて出力する
・繰り返し出力する(times)
・ハッシュの中身を出力する(each)
・色付きで出力する

など応用的な内容についても解説していきます。

printメソッドの使い方について正しく理解し、必要な場面で使いこなすことができるように、わかりやすく解説します!

それでは出力系メソッドの違いについて見ていきましょう。

目次

printメソッド

printメソッドは以下のサンプルコードのように、半角スペースを空けて出力する値を指定するだけで利用できます。

printメソッドの特徴は改行を入れずに引数に指定した値を出力することです。

print 'こんにちは'
print '今日の天気は'
print '晴れですね'

[実行結果]

こんにちは今日の天気は晴れですね

putsメソッド

putsメソッドも同様に出力する値を半角スペース後に指定することで利用できますが、printメソッドとの違いは、末尾に改行が入る形で出力されることです。

puts 'こんにちは'
puts '今日の天気は'
puts '晴れですね'

[実行結果]

こんにちは
今日の天気は
晴れですね

pメソッド

pメソッドは出力する値と共に型情報(文字列や数値型など)を一緒に出力します。

p '私の年齢'
p 40
p '歳です。'

[実行結果]

"私の年齢"
40
"歳です。"

文字列はダブルクォーテーションで囲まれ、数字はそのまま出力されていることが確認できるかと思います。

printfメソッド

printfメソッドは書式を指定して出力するためのメソッドとなります。

具体的なサンプルをまずは確認してみましょう。

printf('商品情報: カテゴリー %s 型番 %d', 'bag', 10111)

[実行結果]

商品情報: カテゴリー bag 型番 10111

これまでの出力メソッドと異なり、カッコで出力内容をくくります。

また、%sや%dはその後のカンマで区切った引数の値が代入されるものとなり、その引数の型(文字列や数値型)によって、%sと%dの指定を使い分けます。

sprintf

printfメソッドに対して、sprintfメソッドもあります。

printfメソッドがコンソールに対して直接出力するのに対して、sprintfメソッドは文字配列に対して出力するためのメソッドになります。

具体的なサンプルで確認してみましょう。

p sprintf("明日、%sの最高気温は%d度です。","サムライ村",33)

[実行結果]

"明日、サムライ村の最高気温は33度です。"

基本的にprintfと似ていますが、文字列に代入するだけなので紹介したputsやpで出力してあげる必要があります。

もしも、出力しないと文字列と同じ扱いになるのでコンソールにはなにも出力されません。

変数を扱う方法

他の言語では変数を出力しようと思うと少し面倒な処理をしないといけないこともありますが、Rubyではとても簡単に出力することができます。

shoes = 'シューズ'
hat = '帽子'

print shoes

puts hat

p hat

printf('商品情報: カテゴリー %s 型番 %d ', shoes, 10111)

[実行結果]

シューズ帽子
"帽子"
商品情報: カテゴリー シューズ 型番 10111

このように変数を引数に渡すだけで出力することができます。

また文字列中に変数を展開する式展開という方法でも出力することができます。

式展開についてはこちらをご覧ください。


ヒアドキュメントなどを利用して式展開することで文字列の操作がより簡単になることがご理解いただけたかと思います。

また、rubyの変数の種類についてはこちらを参考にしてみてください。

複数の引数を渡す方法

print,puts,pメソッドは半角スペースの後の引数を複数指定することで、複数同時に出力することが可能です。

shoes = 'シューズ'
hat = '帽子'

print shoes, hat
puts shoes, hat
p shoes, hat

[実行結果]

シューズ帽子シューズ
帽子
"シューズ"
"帽子"

このように別々に渡した時と同じように出力を行えていることがわかります。

様々なフォーマット指定方法

printfやsprintfでは様々なフォーマットの指定方法があります。

文字列の桁数を指定する

%のあとに数値を指定すると桁数を指定できます。

たとえば、3文字しかないのに5文字分のスペースを持って出力することができます。

その場合、足りない部分には空白が出力されて、デフォルトでは右詰で出力されます。

puts "abcde"
printf("%5s","abc")

[実行結果]

abcde
  abc  

このように、右詰になります。

また、左詰にしたい場合は

puts "abcde"
printf("%-5s","abc")

[実行結果]

abcde
abc     

このように、数値に-をつけるだけです。

数値型の桁数を指定する

数値型の桁数を指定する場合も、文字数を指定する場合同様です。

puts "12345"
printf("%5d",123)

[実行結果]

12345
  123 

数値型の場合は、空白に0を詰めて表示できます。

puts "12345"
printf("%05d",123)

[実行結果]

12345
00123

このように、5桁に対して足りない部分は0で補われています。

配列の中身をつなげて出力する(join)

配列の中身をつなげて出力したいという場面は多いです。

そんなときはjoinメソッドを使いましょう。

array = ["ruby","php","python"]
puts array.join(" + ")
puts array.join(" - ")

[実行結果]

ruby + php + python
ruby - php - python

このように、自分が選んだ文字を挟んで配列の中身を連結できて便利です。

joinの使い方についてはこちらでもう少し詳しく解説しているので、一読することをおすすめします。

繰り返し出力する(times)

なんども同じようなパターンのものを出力するときに思うように繰り返し出力できれば、とても便利ですよね。

嬉しいことにrubyには繰り返しのためのメソッドがたくさん用意されています。

その中の一つのtimesメソッドを使って、繰り返し出力を体験してみましょう。

10.times do |i|
puts "東西南北侍列伝 第#{i+1}巻"
end

[実行結果]

東西南北侍列伝 第1巻
東西南北侍列伝 第2巻
東西南北侍列伝 第3巻
東西南北侍列伝 第4巻
東西南北侍列伝 第5巻
東西南北侍列伝 第6巻
東西南北侍列伝 第7巻
東西南北侍列伝 第8巻
東西南北侍列伝 第9巻
東西南北侍列伝 第10巻

このように、数字だけが変更されたものを繰り返し出力することができました。

繰り返しの出力がどれだけ楽なのか、実感していただけたと思います。

ハッシュの中身を出力する(each)

eachメソッドを使えば、ハッシュの中身をキー(key)とパリュー(value)に分けて、出力することができます。

また、その際には変数展開と呼ばれる記法を使用して、ハッシュの中身を展開します。

hash = {ruby:"Rails",php:"CakePHP",python:"Django"}
hash.each do |key,value|
puts "#{key}の有名Webフレームワークは#{value}です。"
end

[実行結果]

rubyの有名WebフレームワークはRailsです。
phpの有名WebフレームワークはCakePHPです。
pythonの有名WebフレームワークはDjangoです。

このようにハッシュの中身を綺麗に出力することができました。
なんども同じ文字列を入力しなくてもよいので、便利ですね。

ハッシュの使い方についてはこちらでもうすこし詳しく説明してあるので一読することをおすすめします。

色付きで出力する

少し工夫するれば、色付きで出力することも可能です。

色は数字に割り当てられているので、今回はその数値を色の名前として変数に保存して使用してみます。

text = "色付きで出力される"

red = 31
green = 32
yellow = 33
blue = 34
magenta = 35
cyan = 36
white = 37

puts "e[#{red}m#{text}e[0m"
puts "e[#{green}m#{text}e[0m"
puts "e[#{yellow}m#{text}e[0m"
puts "e[#{blue}m#{text}e[0m"

[実行結果]
Screen Shot 2560-12-04 at 19.12.31

Rubyを独学で頑張っているけど先が見えない方のために

独学でRubyを頑張っているわけだけど、先が見えない・・・

そんな方、実はいらっしゃるのではないでしょうか?

いや、おれは違うぞ。先のキャリアもしっかり見えてるし、独学の成果も出てきている

そんな方であれば、これから先の話は必要ないでしょう。そっとページの閉じるボタンを押しましょう。

しかし、「先が見えない」と心の底では勘付いているそこの奥さん。この先を読み進めて、一緒に課題を深堀りしていきましょう。

なぜ「先が見えない」という不安や悩みを抱えてしまうのか

さて、「一寸先は闇だ・・・」とお悩みを抱えている方に、なぜ独学でRubyを勉強しているにもかかわらず、そのような現状を抱えてしまうのか、一緒に考えていきましょう。

先が見えない現状を踏まえ、課題として考えられるものは以下のどれかに該当するでしょう。

  • プログラミングの上達が見えない
  • プログラミングを継続できない気がする
  • プログラミングスキルを習得した姿がイメージできない
  • プログラミングスキルを活かした仕事を獲得するイメージができない

これらのどれかに該当することによって、「なんとなくプログラミング学習をしている」という状態になってしまいます。

これらの要因は、三日坊主になる理論と同じなんですが、「プログラミング学習をしなきゃ」とプログラミング学習を頑張ってしまっている状態になってしまっています。

受験勉強をやった経験のある方なら頭がもげるほどに首を縦に振ってしまう方も多いのですが、「今日も5時間勉強するぞ」や「今日はこの章を終わらすぞ」というように、学習を進めることに意識が行き過ぎてしまうと、ある程度学習を継続した後に「先が見えない・・・」となってしまいます。

未来に光を当て、プログラミング学習を「成果が出るもの」にするために

先ほど、「なぜ先が見えないという悩みや不安を抱えてしまうのか」という疑問に対しての答えを示していきました。

これらの課題というのは、独学をしていれば9割の方がぶつかってしまう壁だそうで、いわば、あるあるの現象なのです。

独学をしていて、「なんか前に進めていないぞ」と感じるのはこのせいなんですね。甘く見がちですが、非常にやっかい。

これがさらにやっかいさを極めているのは、上記に挙げた課題のほとんどが、1人で解決できないものばかりだからです。

実は、これらのほとんどが経験者に助けてもらいながら解決しないと、すぐに違う方向へと流れてしまいます。

そう言い切れるのは、以前の私もそうだったからです。

エンジニアやプログラマー関連のキャリアに詳しい方や現役のエンジニアに相談しながら修正を加え、学習を実践して今があります。

そうは言っても、周りにそういう人がいないし・・・

という方もいるでしょう。そういう時にこそ、プログラミングスクールの無料カウンセリングを利用するのです。

営業をかけられて時間の無駄に終わるでしょ?

という考えに辿りついてしまいますよね。結論から言うと弊社では、そういった強引な営業等を行うことはありませんので、安心して受講できます。

「プログラミング学習の先ある未来」を光で明るく照らすには、弊社の無料カウンセリングがぴったりだと断言できます。それくらい無料カウンセリングに自信を持っているのです。

さらに、無料カウンセリングには以下の3大特典もついてきます!

  • 「最短1ヶ月で開発ができる学習方法」電子書籍(非売品)
  • 効率的なオリジナル学習カリキュラム
  • 未経験の転職(フリーランス)を可能にするキャリアサポート

上記の特典だけでも他のスクールにはないポイントだと自信を持っている無料カウンセリング特典です。

ただプログラミング学習をする毎日から、ワクワクしながらプログラミング学習できる毎日に変える体験を一度でいいのでしてみませんか?

無料カウンセリング予約はこちら

まとめ

本記事ではprintメソッドなど出力系メソッドについて基本的な使い方、さらに応用編では出力に関して幅広く便利な方法をご紹介しました。

プログラミングを行う上で、処理の途中でどのような値か確認するためにデバッグを行うことがありますが、その際に、本記事で紹介した出力メソッドを用いて簡易的に値を確認することも可能です。

もし、今後printメソッドで使い方に迷うことがあれば、ぜひこの記事を思い出して下さいね。

この記事を書いた人

Unityを使ったiOSアプリのリリース、フリマサイト運営の経験があります。

経験した言語はC、C#、Javascript、R、Python、Ruby、PHPなど

言語が好きで、英語や中国、ドイツ語を勉強しました。
将来的には海外で生活したいです。

現在はRuby on Rails5やCocos2dxの勉強を主にしています。

ライターとしては
できるだけ初心者にわかりやすい文章になるように心がけています。

趣味は語学、読書です。

目次