はじめてのRuby!inspectとは!?使い方を徹底解説!

rubyには、オブジェクトや配列をわかりやすい文字列で返すメソッドとして、inspectメソッドが用意されています。

「オブジェクトや配列をわかりやすく出力するには?」
「inspectメソッドの使い方/書き方は?」
「inspectとto_sって何が違うの?」

といった方に向けて、この記事では、


【基礎】inspectメソッドとは何か?
【基礎】inspectメソッドの使い方
【発展】inspectとto_sの違い

など、inspectメソッドについての基礎から発展的な内容について解説していきます。

inspectとは

inspectメソッドとは、オブジェクトや配列などをわかりやすく文字列で返してくれるメソッドです。

実はデバッグでよく利用されるpメソッド(標準出力するメソッド)は、このinspectメソッドが使われています。

そのinspectメソッドの構文は以下のように表せます。

"オブジェクトや配列など".inspect

inspectメソッドの概要と書き方が分かったところで、次の項ではinspectメソッドの使い方について解説いたします。

inspectメソッドの使い方

inspectメソッドは、Objectクラスで定義されており、クラス名・オブジェクトid・インスタンス変数を出力します。

さらに、Stringクラス、Hashクラス、Arrayクラス、などそれぞれのクラスでinspectメソッドはオーバーライド(上書き)されています。

つまり、inspectメソッドは対象の型に沿った文字列を返すのです。

それでは、それぞれの型でinspectメソッドを使用した場合、どのように出力されるか具体的に確認していきましょう。

文字列や数値をinspectで出力する

inspectメソッドは文字列や数値の場合、値をそのまま出力します。

puts "moji".inspect
puts 12.inspect

実行結果:

"moji"
12

配列やハッシュをinspectで出力する

配列やハッシュの場合は、全体を[]または{}で囲み、各要素をそれぞれinspectメソッドで出力した結果が返ります。

array = ["apple", 1, true]
hash = {:name => "tanaka", :age => 25}

puts array.inspect
puts hash.inspect

実行結果:

["apple", 1, true]
{:name=>"tanaka", :age=>25}

モジュールやクラスをinspectで出力する

対象がモジュールの場合、モジュール名が実行結果として出力されます。

また、対象がクラスの場合、「#<クラス名:オブジェクトid インスタンス変数>」が実行結果として出力されます。

以下に、モジュールとクラスの場合のサンプルプログラムを記載します。

# モジュールを定義
module Hoge 
end

# クラスを定義
class Person
  def initialize(name, age)
    @name = name
    @age = age
  end
end

puts Hoge.inspect
puts Person.new("tanaka", 25).inspect

実行結果:

Hoge
#<Person:0x00000002265de8 @name="tanaka", @age=25>

inspectとto_sの違いとは

inspectメソッドと同様のメソッドが他にもあります。

それはto_sメソッドです。

しかし、細かい部分で挙動が異なってくるので、この項ではinspectメソッドとto_sメソッドの違いを解説いたします。

nilの場合

nilをinspectメソッドとto_sメソッドで出力した場合、両者で異なる出力結果となります。

puts nil.inspect
puts nil.to_s

実行結果:

nil
 

inspectメソッドではnilを文字列として出力しますが、to_sメソッドではそのままnilとして出力しています。

文字列の場合

文字列を指定した場合にも、異なる出力結果となります。

puts "moji".inspect
puts "moji".to_s

実行結果:

"moji"
moji

文字列を指定してinspectメソッドとto_sメソッドで出力した場合、ダブルクォーテーションの有無の違いが生じます。

クラスの場合

クラスオブジェクトの場合も、inspetメソッドとto_sメソッドに違いが生じます。

class Person
  def initialize(name, age)
    @name = name
    @age = age
  end
end

tanaka = Person.new("tanaka", 25)

puts tanaka.inspect
puts tanaka.to_s

実行結果:

#<Person:0x00000001cdda88 @name="tanaka", @age=25>
#<Person:0x00000001cdda88>

inspectメソッドではクラス名とオブジェクトidとインスタンス変数を出力しますが、to_sメソッドはクラス名とオブジェクトidのみ出力しインスタンス変数は出力しません。

このようにinspectメソッドとto_sメソッドでは、同じ「文字列を返す」メソッドでも微妙に違いがあるので使用する際には注意が必要です。

まとめ

この記事では、inspectメソッドの使い方をサンプルプログラムを用いて解説しました。

inspectメソッドは、オブジェクトや配列をわかりやすい文字列で返してくれるメソッドです。

ただ、inspectメソッドとto_sメソッドの違いについて注意しておく必要があります。

デバッグの際にも役に立つメソッドなので、ぜひこの機会にinspectメソッドをマスターしてください!

LINEで送る
Pocket

ITエンジニアへ転職したい方におすすめ

自分を評価してくれる企業に転職して年収を上げたい! 自分のスキルにあった独自案件を知りたい!
エンジニアは今もっとも注目されている職業の1つ。エンジニアになって年収を増やしたい方や、あなたのスキルに見合った企業へ転職したいエンジニアの方も多いですよね。

しかし、大手の転職媒体は扱う求人数が多くても、誰もが登録しているので競争率もかなり高くなっています。そのため、あなたの条件に見合った企業を見つけても転職するためには、相応の努力とスキルが必要となります。

こういった媒体では、未経験からエンジニアを目指す方やエンジニア歴2〜3年で転職を考えている方にとって、最適な転職環境とはいえません。

そこでオススメしたいのが、未経験者や若手エンジニア向けの独自案件を多く掲載している「侍ワークス」です。

侍ワークスは、独自案件を多く掲載しているだけでなく、

・応募から就業まで一貫したサポート

・就業後もアフターフォロー

といった経験の浅い方や初めてエンジニアを目指す方にも安心のフォロー体制が整っています。もちろん登録は完全無料!しかも案件を見るだけなら登録も不要です。

まずは、お気軽にどんな求人があるか見てみてください。あなたにピッタリの企業がきっと見つかりますよ! 侍ワークスの求人情報を見る

書いた人

侍テック編集部

侍テック編集部