この記事を見てるあなたはRubyを学び始めてまだ間もないかもしれません。
Rubyには変数の種類がいくつかあり、「これは何の変数なんだっけ」となることありますよね?
でもご安心ください。
Rubyの変数について忘れてしまってもこの記事に戻ってくれば何度でも理解できます。
今まで曖昧だった変数の種類を理解することは、Rubyでのプログラミング上達には必ず必要なのでここで理解しましょう!
この記事の目次

Rubyの変数についての基本
ここではRubyの変数にどんな種類があるのかと変数の有効な範囲である変数スコープについて見ていきましょう!
Rubyの変数の種類
Rubyにおける変数の種類は次の通りです。
- ローカル変数
- グローバル変数
- インスタンス変数
- クラス変数
- 擬似変数
変数のスコープについて
スコープとは変数の有効な範囲です。
その変数がスコープの外に出てしまえば参照できず、たとえ名前が同じであっても違う変数として扱われます。
変数の種類が違えばスコープの範囲も違いますのでしっかりと押さえておきましょう!
変数のスコープについてもっと詳しく知りたい方は「Rubyにおけるスコープのおはなし」が参考になります。
スキルゼロ・実務未経験でもITエンジニアになれる!
テックキャンプはこれからのIT時代で自分の可能性を広げたい人を応援します。
- プログラミングは難しくて挫折しそう
- 独学でちゃんとスキルが身につくのか不安
- 効率的にプログラミングスキルを習得する方法を知りたい

ローカル変数とグローバル変数について
ここでは有効な範囲の小さいローカル変数と有効な範囲の大きいグローバル変数について見ていきましょう!
ローカル変数について
- 定義の仕方:小文字もしくは_で始めます。
- 定義の例:name
- 変数のスコープ:その変数が宣言されたブロック、メソッド定義、クラス定義の終わりまで。定義された場所でしか参照できない極めて局所的な変数。
- スコープの例:
class Human
name = “テック太郎”
def myName
puts name
end
end
human = Human.new
human.myName
myNmaeメソッドの外でname変数を宣言しても、myNameメソッドの中からは参照できないのでエラーが出ます。
グローバル変数について
- 定義の仕方:$を先頭に記述します。
- 定義の例:$name
- 変数のスコープ:グローバル変数はプログラムのどこからでも参照でき、同じ名前であれば必ず同じ変数として扱われます。
注意点としてグローバル変数は一般的に好まれません。
プログラム全体のどこからでも変更できるため、大きなプログラムではグローバル変数を利用することによってプログラムが必要以上に複雑になったりプログラムの流れを追ったり修正を加えたりするのが大変になったりするからです。 - スコープの例:
$name = "テック二郎"
class Human
myName
$name = "テック太郎"
"./sample"#ここで別のファイルを読み込み、その中で$nameの値を変更してみる
$name
end
end
human = Human.new
human.myName #出力結果は「テック二郎」でした
出力された$nameの値はテック二郎に変わっていたので、別のファイルでも、読み込んで自分のプログラムの一部として実行すると、グローバル変数は参照できていて値を変更できているということがわかります。
ローカル変数とグローバル変数の違い まとめ
- ローカル変数は変数の有効な範囲(変数のスコープ)が局所的(ローカル)で、
有効な範囲を越えていれば同じ名前の変数でも違う変数として扱われる。 - グローバル変数はプログラム中のどこで使われても、同じ名前であれば、必ず同じ変数として扱われる。

クラス変数とインスタンス変数について
ここではインスタンス間でも値が共有されるクラス変数とインスタンス毎に値の異なるインスタンス変数を見ていきましょう!
インスタンス変数について
- 定義の仕方:@を先頭に記述します。
- 定義の例:@name
- 変数のスコープ:ローカル変数はメソッドごとに異なる変数として扱われましたが、インスタンス変数は同じインスタンス内であればメソッドの定義を越えてその値を参照したり変更したりできます。
- スコープの例:
class Human
def initialize(name)
@name = name
end
def myName
puts "私の名前は#{@name}です。"
end
end
human1 = Human.new("テック太郎")
human1.myName #"私の名前はテック太郎です。"
human2 = Human.new("テック二郎")
human2.myName #"私の名前はテック二郎です。"
initializeメソッドの中で宣言した@name変数をmyNameメソッドの中からも参照できることがわかります。
さらにhuman1とhuman2でインスタンスごとに違う値を持てることがわかります。
クラス変数について
- 定義の仕方:@@を先頭に記述します。
- 定義の例:@@name
- スコープ:そのクラスのすべてのインスタンスから参照したり値を変更したりできます。
- スコープの例:
class Human
def initialize(name)
@@name = name
end
def myName
puts "私の名前は#{@@name}です。"
end
end
human1 = Human.new("テック太郎")
human1.myName #"私の名前はテック太郎です。"
human2 = Human.new("テック二郎")
human2.myName #"私の名前はテック二郎です。"
human1.myName #"私の名前はテック二郎です。"
異なるインスタンス間でも@@nameの値が共有されているのがわかります。
インスタンス変数とクラス変数の違い まとめ
- クラス変数はクラスメソッド内とインスタンスメソッド内、両方で使える。
- クラス変数はクラスで1つの値で、どのインスタンスで使っても同じ値。
- インスタンス変数はインスタンスメソッド内でのみ、使用可能。
- インスタンス変数はインスタンスごとに値が異なる。
擬似変数について
通常の変数以外に疑似変数と呼ばれる特殊な変数があります。擬似変数の値は変更することができません。
擬似変数に何か代入しようとすると文法エラーになります。ここではself,true,false,nilを見ていきます。
selfについて
インスタンスメソッドの中で、メソッドのレシーバ自身を参照するにはselfという特別な変数を使用します。
class Human
def name
puts "私の名前はテック太郎です。"
end
def sayHello
self.name
end
end
human = Human.new()
human.sayHello
sayHelloメソッドで使用しているself.nameはsayHelloメソッドを呼んだ時のレシーバを参照しています。
つまりhumanインスタンスです。
またレシーバを省略してメソッドを呼ぶと暗黙的にselfをレシーバとします。そのため上記のコードのself.nameはnameと記述することもできます。
true,falseについて
例えばif文などで条件式を記述するとします。
「AとBが等しい」とか「AがBより大きい」などの条件が条件式に記述されます。
この式が評価され条件として成立する場合true、成立しない場合にfalseを返します。
x = 1
y = 2
if x < y == true
puts "true"
elsif x < y == false
puts "false"
end
上記のコードの場合はxよりyの方が大きいのでtrueが返ってきます。
なのでif文でtrueとfalseの場合分けをしてみると当然tureなのでその中身が実行されます。
nilについて
nilはオブジェクトが存在していないことを表すために使用されます。
何もオブジェクトが代入されていない変数にはnilが代入されているとして扱われます。
この記事のハッシュタグ
Rubyの変数と特徴 まとめ
以上が変数についての基本でした。
あなたがこれからRubyを上達するために変数の違いを理解することは非常に重要です。
その中でも定義の仕方や変数のスコープに違いがあるのでしっかり押さえましょう!
Rubyの変数についてもっと詳しく知りたい方はこちらどうぞ!
Ruby公式サイト:https://www.ruby-lang.org/ja/
未経験からの転職の悩みを解決!無料カウンセリング開催中【転職成功人数4000名以上!※1】

こんな不安や疑問はありませんか?
・未経験から転職して、本当に年収が上がるのか
・ITエンジニア転職後の働き方や稼ぎ方が想像できない
・スキルゼロからITエンジニアとしてフリーランスになれるのか
カウンセリングでは、ITエンジニア転職やプログラミング学習を知り尽くしたプロのカウンセラーが、あなたの悩み解決をサポートします。満足度93%※1、累計利用者数は42,000人以上!※2
無料で相談できますので、気軽にご参加ください。【テックキャンプは給付金活用で受講料最大70%オフ※4】
※1.2018年10月24日〜11月16日(N=106) 2.2020年12月時点 3.テックキャンプ エンジニア転職は経済産業省の第四次産業革命スキル習得講座の認定も受けており、条件を満たすことで支払った受講料の最大70%(最大56万円)が給付金として支給されます