変数の種類を知っておこう!Rubyで変数のスコープを使う方法【初心者向け】

初心者向けにRubyの変数の種類、スコープについて解説しています。実際に書きながら使い方を説明しているので、変数のスコープについてよく分からないという方でも理解できるはずです。Ruby学習中の方はぜひご覧ください。

テックアカデミーマガジンは受講者数No.1のプログラミングスクール「テックアカデミー」が運営。初心者向けにプロが解説した記事を公開中。現役エンジニアの方はこちらをご覧ください。 ※ アンケートモニター提供元:GMOリサーチ株式会社 調査期間:2021年8月12日~8月16日  調査対象:2020年8月以降にプログラミングスクールを受講した18~80歳の男女1,000名  調査手法:インターネット調査

Rubyで変数のスコープを使う方法について解説しています。

変数にもいくつか種類があるので、知っておくと今後役立つでしょう。

Rubyについてそもそもよく分からないという方は、Rubyとは何なのか解説した記事をまずご覧ください。

 

なお本記事は、TechAcademyのWebアプリケーションオンラインブートキャンプの内容をもとに紹介しています。

 

大石ゆかり

田島メンター!!変数のスコープというのは何ですか〜?

田島悠介

変数のスコープは、その変数を参照できる範囲のことを言うんだ。

大石ゆかり

スコープの外からは、参照することができないってことですか?

田島悠介

そうだね。ここではそれぞれの変数のスコープについて解説しよう。

 

目次

1時間でできる無料体験!

 

スコープとは

スコープは、変数の有効範囲の事です。スコープの外からは変数は見えないため、変数を参照できなくなっています。

そのスコープに対応するためにRubyには様々な変数が用意されています。

 

[PR] Rubyのプログラミングで挫折しない学習方法を動画で公開中

グローバル変数

グローバル変数はその名前の通りグローバルな変数です。スコープはプロジェクトの全ての範囲です。

そのため、プロジェクト内で一意であることが保証されている変数のみに使用されます。

思わぬ部分で変数名がかぶってしまいバグやエラーの原因ともなるので、使う場面はよく考えましょう。

$global = "global"

def greet
  p $global
end

greet => “global”

実行してみると、文字列が出力されていることがわかります。

 

田島悠介

グローバル変数は全体で使用することができるんだ。

大石ゆかり

一番分かりやすいですね。

田島悠介

次はインスタンス変数・クラス変数・ローカル変数を見ていくよ。これらはそれぞれスコープが異なるのでよく覚えておこう。

 

インスタンス変数

インスタンス変数はインスタンス毎に値を持つ変数です。

スコープはインスタンス内ならどこでも参照することができます。

class User
  def initialize(name)
    @name = name
  end

  def put_name
    p @name
  end
end

user1 = User.new("taroo")
user2 = User.new("hanako")
user1.put_name  => “taroo”
user2.put_name => “hanako”

実行してみるとインスタンス毎に違った値が出力されていることがわかります。

インスタンス変数はRubyやRubyを使用したフレームワークのRuby on Railsで頻出する変数です。必ず理解しておくようにしましょう。

 

コラム

実は私も!?独学で損する人の特徴

「スクールは高いから独学で成功する」という気持ちの方は多いと思います。
もちろんその方が金額は低く抑えられるでしょう。
ただ 独学には向き不向きがあり、実はスクールが向いている人も大勢います。

そんな方のために参考として、 テックアカデミー卒業生がスクールを選んだ理由 をご紹介します。

  • ・困って挫折しそうなときに、質問や相談できる相手がいる環境で学んでいきたいなと思った
  • ・わかった気になっているだけだったので、自分を追い込む環境に置いた方がいいと感じた
  • ・スクールのカリキュラムで市場に求められるスキルを学ぶべきと思った

少しでも当てはまる部分があれば、 スクールが向いているかもしれません。
お試しのつもりで、まずは一度 無料相談 に参加してみませんか?

現役エンジニア・デザイナーに何でも気軽に相談できる30分すべて無料で できます。
無理な勧誘は一切ない ので、お気軽にご参加ください。

今なら相談した方限定の割引・参加特典付き! 無料相談はこちら

クラス変数

クラス変数はクラス内で一意に値を持つ変数です。スコープはクラス内です。

下のプログラムはインスタンス変数をクラス変数に変更したサンプルです。

class User
  def initialize(name)
    @@name = name
  end

  def put_name
    p @@name
  end
end

user1 = User.new("taroo")
user2 = User.new("hanako")
user1.put_name => “hanako”
user2.put_name => ”hanako”

インスタンス変数と違いUserの名前がhanakoで上書きされていることがわかります。

クラス変数は思わぬ場面で上書きが起きたりすることもあるため、注意が必要です。

 

ローカル変数

ローカル変数は一番スコープが狭い変数です。

変数は定義されたメソッドのみです。

class User
  def initialize(name)
    local_name = name
  end

  def put_name
    p local_name
  end
end

user1 = User.new("taroo")
user2 = User.new("hanako")
user1.put_name
user2.put_name

上のプログラムを実行すると、

`put_name’: undefined local variable or method `local_name’ for #<User:0x007fcfbb1735a8> (NameError)

というエラーが発生します。

「local_name」というローカル変数かメソッドが用意されていませんという意味です。

スコープ外から変数を参照したためこのようなエラーが発生します。

 

1時間でできる無料体験!

擬似変数

擬似変数は今までの変数と趣が違うものとなっています。

擬似変数には「true」,「false」,「nil」の三種類があります。

p(1==1) => true
p(1==2) => false
p(nil) => nil
p(1==1) => true
p(1==2) => false
p(nil) => nil

trueは真、false、nilは偽を表します。

またnilは「何もない」状態を表します。falseとも0とも違う概念となっているため注意しましょう。

 

以上、Rubyにおける変数のスコープについて解説しました。

種類が多いので、実際に書きながら覚えていきましょう。

 

田島悠介

疑似変数はそれ自体に値を代入することができないものなので、ちょっと他とは違うね。ここでは参考程度に見ておくといいよ。

大石ゆかり

名前の前にインスタンス変数は@、クラス変数は@@が入るんですね。

田島悠介

そうだね。グローバル変数も$から始まるなどの決まりがあるので、表記を間違えないように気をつけよう。

大石ゆかり

分かりました。ありがとうございます!

 

[お知らせ]TechAcademyでは初心者でも最短4週間でオリジナルサービスが作れるRuby on Railsオンラインブートキャンプを開催しています。

初心者・未経験でもできる。まずはテックアカデミーに相談しよう

プログラミングを独学していて、このように感じた経験はないでしょうか?

  • ・調べてもほしい情報が見つからない
  • ・独学のスキルが実際の業務で通用するのか不安
  • ・目標への学習プランがわからず、迷子になりそう

テックアカデミーでは、このような 学習に不安を抱えている方へ、現役エンジニア講師とマンツーマンで相談できる機会を無料で提供 しています。
30分間、オンラインでどんなことでも質問し放題です。

「受けてよかった」と感じていただけるよう 厳しい試験を通過した講師 があなたの相談に真摯に向き合います。

「ただ気になることを相談したい」
「漠然としているがプロの話を聞いてみたい」

こんな気持ちでも大丈夫です。

無理な勧誘は一切ありません ので、まずはお気軽にご参加ください。
※体験用のカリキュラムも無料で配布いたします。(1週間限定)

今なら参加者限定の割引特典付き! 無料相談を予約する