Webサイト制作コースのお申し込みはこちら

Rubyではメソッドやブロックの中でしか使えないローカル変数とプログラムの中ならどこでも使えるグローバル変数の他に、オブジェクト内限定でどこでも使えるインスタンス変数が利用できます。

そしてインスタンス変数はRuby on Railsで構築するWebシステムのプログラムでもよく使われる変数です。ぜひ、インスタンス変数の使い方をマスターしましょう。今回はインスタンス変数の仕組みとその使い方について解説します。

Rubyで使える変数の種類


Rubyでプログラムを作る際、変数の参照範囲を正しく理解していなければなりません。特にローカル変数とインスタンス変数の違いが重要です。この2つはRuby on Railsのプログラムでもよく利用される変数なので、正しい理解を身につけましょう。

まずはRubyで使える変数の種類について解説します。

Rubyで使える変数は4種類

Rubyでは、ローカル変数、インスタンス変数、クラス変数、グローバル変数の4種類の変数があります。そしてそれぞれの変数は、最初の1文字によって区別され、その参照範囲が違います。

Rubyの変数の種類

そもそもインスタンスとは

先ほどインスタンス変数とはnewメソッドで作成したオブジェクトの中でのみ使える変数と紹介しましたが、そもそもインスタンスとは何でしょうか。インスタンスとは英語のinstanceが元になったIT用語で、英語のinstanceには「事実」や「事例」といった意味があります。

オブジェクト指向のプログラム言語では、プログラムコードに定義されている実体を持たないクラスを、実際にコンピュータのメモリーに展開して、実体を持った状態のものをインスタンスと言います。

そしてインスタンス変数は、newメソッドで作られたオブジェクト、すなわちインスタンスの中でのみ参照できる変数です。そして参照範囲がオブジェクト内に限られるので、同じクラスから作られた別のオブジェクトからは参照できません。

インスタンス変数の使い方が重要な理由

インスタンス変数のメリットは、クラスに属する複数のメソッドで、同じ変数を共有できる点です。例えば、オブジェクトを新規に作成した際、インスタンス変数に値を入れておくと、その後、このオブジェクト内のメソッドで、それを定数のように扱えます。

さらにインスタンス変数は、オブジェクト毎に別の変数となるので、同じクラス定義から複数のオブジェクトを生成したとしても、インスタンス変数は別です。それぞれ別の値を格納し、それぞれのオブジェクト内のメソッドで利用できます。

Rubyのインスタンス変数の使い方


インスタンス変数は先ほど紹介したように変数名の先頭に@が付いた、オブジェクトの中でのみ参照できる変数です。ローカル変数はブロックやメソッドの中でしか参照できませんが、インスタンス変数は同じオブジェクトのどのメソッドからでも使えるので、Ruby on Railsなどのプログラムでよく利用される変数です。

インスタンス変数の例

@obiname = name

インスタンス変数の使用例

次にインスタンス変数の使用例を紹介します。

インスタンス変数を利用した例

class Objname
  def initialize(name)
    @obiname = name
  end
  def showname
    puts @objname
  end
end

name1 = Objname.new("First Name")
name2 = Objname.new("Second Name")
name1.showname  # First Name を表示する
name2.showname  # Second Name を表示する

上の例はObjnameというクラスでインスタンス変数@objnameを使っています。newメソッドの引数で指定した名前をinitializeメソッドでインスタンス変数に代入し、shownameメソッドで表示しています。そしてこの例のように、newメソッドで作ったオブジェクト毎に違う値を代入し、それを利用可能です。

インスタンス変数を外部から参照するには


インスタンス変数の参照範囲がオブジェクトの中に限られるため、そのままでは別のオブジェクトや上の階層から変数の値を参照できません。しかし、Rubyではインスタンス変数を外部から参照可能にすることが可能です。

次にインスタンス変数の値を参照する方法を紹介します。

インスタンス変数の値を返すメソッドを使う

インスタンス変数の値を返すメソッドを作ることで、間接的にインスタンス変数の値を参照できます。例えば、先ほどの例をインスタンス変数の値を返すメソッドを使う方法に書き直す、次のよう記述できます。

インスタンス変数を返すメソッドの例

class Objname
  def initialize(name)
    @obiname = name
  end
  def objname
    @objname
  end
end

name1 = Objname.new("First Name")
p name1.objname  # 'First Name' が表示される

この場合、name1.objnameは、インスタンス変数の@objnameを参照しているのではなく、objnameというメソッドを実行しています。なおobjnameメソッドは、インスタンス変数@objnameを最後に評価するので、その値を返します。

attr_readerメソッドを使う

attr_readerメソッドは、指定したインスタンス変数をオブジェクトの外から直接参照できるようにするメソッドです。もし、直接参照したいインスタンス変数があれば、attr_readerメソッドを利用してください。

ただし、attr_readerメソッドにインスタンス変数を指定する際、変数の最初の文字を「@」から「:」に変えます。このメソッドを使う際に注意してください。

attr_readerメソッドを使った例

class Objname
  attr_reader :objname
  def initialize(name)
    @obiname = name
  end
end

name1 = Objname.new("First Name")
p name1.objname  # 'First Name' が表示される

インスタンス変数を外部から書き換える

先ほど紹介したattr_readerメソッドはインスタンス変数をオブジェクトの外部から直接参照可能にできますが、書き換えはできません。もし外部から書き換えを可能にしたいならattr_writeが利用できます。さらに、参照と書き換えの両方を可能にする場合はattr_accessorメソッドを利用します。

attr_accessorメソッドを使った例

class Objname
  attr_accessor :objname
  def initialize(name)
    @objname = name
  end
end

name1 = Objname.new("First Name")
p name1.objname  "First Name" が表示される

name1.objname = "Second Name"
p name1.objname  "Second Name" が表示される

まとめ


今回紹介したようにRubyでは、ローカル変数、インスタンス変数、クラス変数、グローバル変数が使えます。そして、オブジェクトの中ならどこからでも参照できる変数がインスタンス変数です。Ruby on Railsなどでよく使われる変数なので、ぜひ、その使い方をマスターしてください。

なおインスタンス変数はオブジェクトの外から直接アクセスできませんが、attr_readerメソッドやattr_accessorメソッドを使用することで、オブジェクトの外からも参照できます。必要に応じてこれらのメソッドも活用してください。

エンジニアになりたい人に選ばれるプログラミングスクール「ポテパンキャンプ 」

ポテパンキャンプは卒業生の多くがWebエンジニアとして活躍している実践型プログラミングスクールです。 1000名以上が受講しており、その多くが上場企業、ベンチャー企業のWebエンジニアとして活躍しています。

基礎的な学習だけで満足せず、実際にプログラミングを覚えて実践で使えるレベルまで学習したいという方に人気です。 プログラミングを学習し実践で使うには様々な要素が必要です。

それがマルっと詰まっているポテパンキャンプでプログラミングを学習してみませんか?

卒業生の多くがWebエンジニアとして活躍

卒業生の多くがWeb企業で活躍しております。
実践的なカリキュラムをこなしているからこそ現場でも戦力となっております。
活躍する卒業生のインタビューもございますので是非御覧ください。

経験豊富なエンジニア陣が直接指導

実践的なカリキュラムと経験豊富なエンジニアが直接指導にあたります。
有名企業のエンジニアも多数在籍し品質高いWebアプリケーションを作れるようサポートします。

満足度高くコスパの高いプログラミングスクール「ポテパンキャンプ」

運営する株式会社ポテパンは10,000人以上のエンジニアのキャリアサポートを行ってきております。
そのノウハウを活かして実践的なカリキュラムを随時アップデートしております。

代表の宮崎もプログラミングを覚えサイトを作りポテパンを創業しました。
本気でプログラミングを身につけたいという方にコスパ良く受講していただきたいと思っておりますので、気になる方はぜひスクール詳細をのぞいてくださいませ。