Rubyのデータ型とは?文字列・数値・型変換の使い方を解説

PR Ruby

Rubyのデータ型とは?文字列・数値・型変換の使い方を解説

💡 この記事でわかること

  • データ型とは何か、なぜ意識する必要があるのか
  • 文字列(String)・整数(Integer)・小数(Float)・真偽値(true/false)・nilの違い
  • class メソッドで値の型を調べる方法
  • to_s・to_i・to_fによる型変換
  • getsで受け取った値が文字列になる注意点

1. データ型とは?

データ型とは、
👉 プログラムが扱う値の「種類」のことです。「文字列」「整数」「小数」「真偽値」などの種類があり、種類によってできる操作が変わります。

💡 Rubyでは変数を作るときに型を宣言しませんが、値そのものには必ず型があります。前回の記事で触れたとおり、Rubyは「すべてがオブジェクト」なので、数値や文字列などの型はすべてクラスとして実装されています。

puts 1 + 2         # 3(数値の足し算)
puts "1" + "2"     # 12(文字列の連結)

puts・変数の基本をまだ確認していない場合は、先にこちらを読んでおくとスムーズです。

👉 Rubyの基本文法(puts・変数・式展開)についての記事はこちら


2. 文字列型(String)

文字列は文字の並びを表す型です。シングルクォート'かダブルクォート"で囲みます。

name = "太郎"

puts name + "さん"    # 太郎さん(+ で連結)
puts "=" * 10          # ==========(* で繰り返し)
puts name.length       # 2(文字数)

message = "こんにちは"
message << "、太郎さん"   # << で末尾に追加(元の文字列そのものを書き換える)
puts message            # こんにちは、太郎さん

👉 連結は+、繰り返しは*、文字数は.lengthで取得できます。数字であっても、クォートで囲めば文字列として扱われます("100"は数値の100ではありません)。

💡 ダブルクォートとシングルクォートには違いがあります。ダブルクォートの中では#{}による式展開や\nなどの改行文字が使えますが、シングルクォートの中ではそのままの文字として扱われます。

name = "太郎"

puts "こんにちは\n#{name}さん"   # 改行してから「太郎さん」
puts 'こんにちは\n#{name}さん'   # そのまま \n#{name}さん と表示される

3. 数値型(Integer・Float)

  • Integer(整数):10-30など、小数点のない数
  • Float(小数):3.140.5-1.0など、小数点のある数
a = 7
b = 2

puts a + b     # 9
puts a - b     # 5
puts a * b     # 14
puts a / b     # 3    ← Integer同士の割り算は切り捨てのInteger
puts a % b     # 1    ← 余り
puts a ** b    # 49   ← 7の2乗
puts a.fdiv(b) # 3.5  ← 小数まで欲しいときはfdiv

👉 ここはPHP・Pythonとの違いに注意が必要なポイントです。Rubyでは、Integer同士の/は割り切れなくても切り捨てのInteger(小数点以下を切り捨てた整数)になります(7 / 23)。小数まで求めたいときは、片方をFloatにするか.fdivを使います。

puts 7 / 2       # 3
puts 7.0 / 2     # 3.5(片方をFloatにする)
puts 7 / 2.0     # 3.5
puts 7.fdiv(2)   # 3.5

💡 Floatの計算では、0.1 + 0.20.3ちょうどにならず、わずかな誤差が出ることがあります。コンピューターが小数を2進数で扱う都合によるもので、Rubyに限らず多くの言語で起こります。金額の計算など厳密さが必要な場面では注意してください。


4. 真偽値(true / false)とnil

true(真)・false(偽)は、条件判定の結果を表す値です。

puts 3 > 1     # true
puts 10 == 5    # false

Rubyには、これに加えてnilという特別な値があります。「値が存在しないこと」を表し、PHPのnullやPythonのNoneにあたります。

👉 if文などの条件判定で「偽」として扱われるのは、falsenilの2つだけです。PHPやJavaScript、Pythonでは0や空文字""、空配列[]も偽として扱われることがありますが、Rubyではこれらすべて「真」として扱われます。他の言語の経験がある方ほど間違えやすいポイントです。

puts "0は真として扱われる" if 0        # 出力される
puts "空文字も真として扱われる" if ""   # 出力される
puts "nilは偽として扱われる" if nil     # 出力されない

5. 型を調べる:classメソッド

値の型を調べるには、値そのものに.classを付けます。PHPのgettype()やPythonのtype()のような「関数に値を渡す」形ではなく、値自身に問いかける書き方になっているのがRubyらしいところです。

puts "太郎".class   # String
puts 20.class        # Integer
puts 3.14.class      # Float
puts true.class      # TrueClass
puts nil.class       # NilClass
puts "100".class     # String  ← クォートで囲むと文字列

💡 truefalseはそれぞれ別のクラス(TrueClass・FalseClass)になっている点もRubyらしい設計です。「すべてがオブジェクト」という考え方が、こうした型の仕組みにも表れています。


6. 型変換:to_s / to_i / to_f

ある型の値を別の型に変換することを型変換と呼びます。Rubyでは、変換したい型に応じたメソッドを値に付けて呼び出します。

  • .to_s:文字列に変換する
  • .to_i:整数に変換する
  • .to_f:小数に変換する
price = "500"
puts price.to_i + 100   # 600(文字列を整数にしてから計算)

count = 3
puts "残り" + count.to_s + "個"   # 残り3個(数値を文字列にしてから連結)

puts "1.5".to_f * 2   # 3.0

👉 文字列と数値はそのまま+できません"残り" + 3のように書くとTypeErrorになります。数値を文字列に混ぜるときは.to_sで変換するか、後述の#{}による式展開を使います。

💡 Rubyは、数値として解釈できない文字列に.to_iしてもエラーにならず、0や途中までの数値になります(PHPの(int)と同じ挙動で、エラーになるPythonのint()とは異なります)。

puts "abc".to_i     # 0
puts "12個".to_i    # 12

7. getsで受け取った値も文字列

キーボードからの入力を受け取るgetsは、入力された内容を必ず文字列(String)として返します。PHPの$_POSTやPythonのinput()と同じ注意点です。

age = gets
puts age + 1   # TypeError! ageは文字列なので数値を足せない

数値として計算したい場合は.to_iで変換します。また、getsは入力の末尾に改行(Enterキーの分)が含まれるため、.chompで取り除くのが定番の書き方です。

age = gets.chomp.to_i
puts age + 1   # 入力が20なら 21

👉 .chompで改行を取り除いてから.to_iで数値に変換する、という並びをセットで覚えておくと安心です。メソッドをドットでつなげて書けるのもRubyらしい特徴です。


8. #{}で変数を埋め込む(復習)

前回の記事でも紹介した#{}による式展開は、型変換の場面でも威力を発揮します。

name = "太郎"
age = 20

puts "#{name}さんは#{age}歳です"   # 太郎さんは20歳です

👉 #{}を使うと、数値でも.to_sで変換せずにそのまま埋め込めます"名前" + age.to_s + "歳"のように+でつなぐより読みやすく、書き間違いも減るため、実際のコードでは式展開がよく使われます。


9. データ型 早見表

class の表示主な用途
文字列String"太郎"、'Ruby'文字・テキスト
整数Integer10、-3、0個数・回数・年齢
小数Float3.14、0.5割合・平均・測定値
真偽値TrueClass / FalseClasstrue、false条件判定
値なしNilClassnil値が存在しないことを表す

10. まとめ

  • 主な型はString・Integer・Float・true/false、加えて値なしを表すnil
  • 型は.classで調べられる(値自身に問いかける書き方)
  • 変換は.to_s.to_i.to_f.to_iはエラーにならず0になる点に注意
  • Integer同士の/は切り捨てのIntegerになる(小数がほしいときは.fdivやFloat変換)
  • 偽として扱われるのはfalsenilだけ(0""は真)
  • getsの返り値は文字列。.chomp.to_iで改行除去+数値変換するのが定番

👉 「偽になるのはfalseとnilだけ」「Integer同士の割り算は切り捨て」の2つは、他言語の経験がある人ほど間違えやすいポイントです。実際に.classで型を確認しながら、小さなコードを書いて慣れていきましょう。

-Ruby
-, , , ,