カテゴリ: Ruby 更新日: 2025/12/26

Rubyの変数の種類とスコープを完全解説!初心者でも理解できるローカル・グローバル・インスタンス・クラス・定数の違い

変数の種類とスコープ:ローカル・グローバル・インスタンス・クラス・定数の違い
変数の種類とスコープ:ローカル・グローバル・インスタンス・クラス・定数の違い

先生と生徒の会話形式で理解しよう

生徒

「Rubyで変数ってよく聞きますけど、種類が色々あるって本当ですか?」

先生

「はい、Rubyにはローカル変数・グローバル変数・インスタンス変数・クラス変数・定数といった種類があります。」

生徒

「同じ変数なのに、そんなに違いがあるんですか?」

先生

「はい、変数のスコープ、つまり『どこから見えるか』が違うんです。これを理解すると、Rubyのプログラミングがぐっとやりやすくなりますよ。」

1. Rubyの変数とは?

1. Rubyの変数とは?
1. Rubyの変数とは?

変数とは、プログラムの中で値を一時的に保存しておくための「名前のついた箱」のようなものです。例えば、相手の名前や計算に使う数値などを変数に入れておくことで、同じ値を繰り返し入力する必要がなくなり、プログラムがぐっと読みやすく整理された状態になります。

以下のように、単純な文字列を変数へ保存するだけでも、後で値を使い回すことができます。


greeting = "こんにちは"
puts greeting     # 変数に入れた値を取り出して表示

Rubyでは「変数」と一言で言っても、実は用途や見える範囲が異なる5種類が用意されています。それが、ローカル変数・グローバル変数・インスタンス変数・クラス変数・定数です。それぞれが「どこで使えるか(スコープ)」や「いつまで生きているか(寿命)」に違いがあり、この仕組みを理解しておくと、複雑なプログラムでも混乱せずにコードを書けるようになります。

特にRubyはオブジェクト指向言語であり、状況に応じて適切な種類の変数を使い分けることが重要です。まずは「変数とは何か」という基本を押さえつつ、これら5種類がどのように役割を持っているのかを順番に見ていきましょう。

2. ローカル変数

2. ローカル変数
2. ローカル変数

ローカル変数は、Rubyで一番よく登場する変数です。プログラムの中でも「この場所の中だけで使える名前」を持った変数で、名前は小文字かアンダースコア(_)で始まります。身近なイメージでいうと、「教室の中だけで通じるあだ名」のようなもので、教室の外(=そのスコープの外)に出ると通用しません。


name = "太郎"      # ここで定義したローカル変数

def greet
  message = "こんにちは"  # メソッドの中だけで使えるローカル変数
  puts message
end

greet
puts name

こんにちは
太郎

この例では、messagegreetメソッドの中だけで有効なローカル変数です。もしメソッドの外でputs messageと書くと、「そんな変数は知らない」というエラーになってしまいます。一方、nameはメソッドの外側で定義されているため、そのスコープ内であれば後から何度でも参照できます。

ローカル変数は、決められた範囲の中だけで値を扱いたいときに使うことで、「どこからでも書き換えられてしまう」という危険を減らし、Rubyのコードを安全で読みやすく保つことができます。まずは、このローカル変数とスコープの関係に慣れておくと、後で他の種類の変数を学ぶときにも理解しやすくなります。

3. グローバル変数

3. グローバル変数
3. グローバル変数

グローバル変数は、プログラム全体でどこからでも使える変数です。名前は$(ドルマーク)から始まります。ただし、使える範囲が広すぎるため、予期せぬ影響を与えることがあり、初心者にはあまりおすすめされません。


$greeting = "おはよう"

def say_hello
  puts $greeting
end

say_hello
puts $greeting

おはよう
おはよう

どこからでも同じ変数にアクセスできるため便利ですが、プログラムが複雑になると管理が大変になるので注意しましょう。

4. インスタンス変数

4. インスタンス変数
4. インスタンス変数

インスタンス変数は、オブジェクトごとに持つ変数です。名前は@で始まります。例えば「犬」というクラスを作ったとき、犬ごとに名前が違うのと同じです。


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

  def bark
    puts "#{@name}がワンと鳴いた!"
  end
end

dog1 = Dog.new("ポチ")
dog2 = Dog.new("ハチ")

dog1.bark
dog2.bark

ポチがワンと鳴いた!
ハチがワンと鳴いた!

このように、インスタンス変数は「それぞれのオブジェクトごとに独立して持つデータ」です。つまり、dog1dog2で別々の名前を持たせられるのです。

5. クラス変数

5. クラス変数
5. クラス変数

クラス変数は、クラス全体で共有する変数です。名前は@@で始まります。インスタンス変数が「犬ごとに違う名前」を持つのに対して、クラス変数は「犬という種類に共通の情報」を持ちます。


class Dog
  @@count = 0

  def initialize(name)
    @name = name
    @@count += 1
  end

  def self.total
    puts "犬は全部で#{@@count}匹います"
  end
end

Dog.new("ポチ")
Dog.new("ハチ")
Dog.total

犬は全部で2匹います

このように、クラス変数は「クラス全体で共通の情報」を持つときに便利です。

6. 定数

6. 定数
6. 定数

定数は、一度決めたら基本的に変えてはいけない値を入れておくための変数です。名前は大文字で始まります。例えば「円周率」や「税率」のように、変わらない値を入れるのに使います。


TAX_RATE = 0.1

price = 1000
puts "税込み価格は#{price * (1 + TAX_RATE)}円です"

税込み価格は1100.0円です

Rubyでは定数を後から書き換えることも technically 可能ですが、警告が出るため通常はそのまま使います。

7. 変数の種類とスコープの整理

7. 変数の種類とスコープの整理
7. 変数の種類とスコープの整理

ここまで紹介した変数を整理すると、次のようになります。

  • ローカル変数:小文字または_で始まる。特定の範囲でだけ使える。
  • グローバル変数$で始まる。プログラム全体で使える。
  • インスタンス変数@で始まる。オブジェクトごとに独立して持つ。
  • クラス変数@@で始まる。クラス全体で共有される。
  • 定数:大文字で始まる。基本的に書き換えない値。

変数のスコープを理解することは、Rubyを学ぶ上でとても重要です。これを知っておくと、プログラムのバグを減らし、より分かりやすいコードを書くことができます。

まとめ

まとめ
まとめ

Rubyの変数とスコープについて振り返ると、初心者が最初につまずきやすいポイントは「同じ変数に見えて実は役割が違う」という点です。ローカル変数は特定の範囲だけで使えるため安心してコードを書ける一方、グローバル変数はどこからでも参照できるため、大規模なプログラムでは予期しない動きを引き起こす可能性があります。さらにインスタンス変数やクラス変数は、オブジェクト指向を理解する上で欠かせない存在です。インスタンス変数はひとつひとつのオブジェクトが独立した情報を持つために必要であり、クラス変数はクラス全体で共有したい情報を扱うために使われます。そして定数はプログラムの中で変わらない値を表現するためにとても便利で、読み手にとっても「これは変わらないのだ」と直感的に理解できる大切な要素です。 また、スコープを理解するとRubyのコードがより論理的に整理でき、エラーの原因も発見しやすくなります。同時に、Rubyでは見た目の記号で変数の性質が判断できるので、コードを読むときの手がかりにもなります。特に初心者は「@がついていたらインスタンス変数」「@@ならクラス変数」「$ならグローバル変数」というように記号で分類する習慣を身につけると理解が一気に進みます。 ここでは具体的なサンプルを交えながら、ローカル変数・グローバル変数・インスタンス変数・クラス変数・定数それぞれの特徴を確認しましたが、実際に手を動かしてみるとより深く理解できます。変数のスコープを正しく使い分けられるようになると、Rubyを使った開発がとても快適になり、クラス設計やオブジェクトの関係性もより明確に理解できるようになります。特にRailsのようなフレームワークを触る際には、インスタンス変数がビューに渡される仕組みや、クラス変数で共有する値の扱いなど、今回学んだ知識がそのまま役立ちます。 ここで、まとめとして簡単なプログラム例を確認しておきましょう。下記のコードは各変数の種類がどのように動作するかをひとつのサンプルにまとめたものです。


$global_message = "全体メッセージ"

class Sample
  @@count = 0
  CONSTANT_VALUE = "固定値"

  def initialize(name)
    @name = name
    @@count += 1
  end

  def show_info
    local = "ローカル情報"
    puts "名前: #{@name}"
    puts "ローカル: #{local}"
    puts "共有数: #{@@count}"
    puts "定数: #{CONSTANT_VALUE}"
    puts "グローバル: #{$global_message}"
  end
end

s1 = Sample.new("一郎")
s2 = Sample.new("二郎")
s1.show_info
s2.show_info

このように、Rubyでは変数の使い方ひとつでプログラムの構造が大きく変わります。適切なスコープ設計を意識すると、より読みやすく、より安全なコードを書くことができます。特に複数人で開発するケースや長期運用されるシステムでは、このスコープの理解が品質に大きく影響するため、今の段階でしっかり身につけておくことが大切です。今回学んだ概念はRubyの基礎を支える重要なテーマであり、プログラミング初心者にとって必ず役立つ知識になります。

先生と生徒の振り返り会話

生徒

「先生、今日はRubyの変数についてすごくたくさん学んだ気がします!」

先生

「そうですね。ローカル変数から定数まで、いろんなスコープがありましたね。どれもRubyを書くときに必ず使う知識です。」

生徒

「インスタンス変数はオブジェクトごとに違う値を持つっていうところが特に印象に残っています。クラス変数とどう違うのかがようやく分かりました!」

先生

「その調子です。クラス変数はクラス全体で共有される情報、インスタンス変数はひとつひとつのオブジェクトの情報。ここを押さえておくと、オブジェクト指向の理解が進みますよ。」

生徒

「なるほど!それに定数は変わらない値を表すっていうのも覚えやすいですね。」

先生

「その通りです。プログラムには変えてはいけない値というものが必ず出てきますからね。今日学んだことを活かして、これからのRubyの学習も進めていきましょう。」

この記事を読んだ人からの質問

この記事を読んだ人からの質問
この記事を読んだ人からの質問

プログラミング初心者からのよくある疑問/質問を解決します

Rubyの変数にはどんな種類がありますか?

Rubyの変数には、ローカル変数、グローバル変数、インスタンス変数、クラス変数、定数の5種類があります。それぞれ使える範囲(スコープ)や性質が異なります。
関連記事:
カテゴリの一覧へ
新着記事
New1
データベース
SQLの処理が遅くなる原因とは?初心者向けにデータベースパフォーマンス最適化を完全解説
New2
Ruby
RubyのネストHash操作を徹底解説!digとtransformメソッドで複雑なデータも楽々
New3
Rails
Railsインデックス設計の極意!爆速サイトを作るためのスキーマ設計ガイド
New4
データベース
SQLのCOMMITとROLLBACKとは?トランザクション操作を初心者向けに完全解説
人気記事
No.1
Java&Spring記事人気No1
Ruby
PATHと環境変数の正しい設定!Windows・Mac・Linux別チェックリスト付き
No.2
Java&Spring記事人気No2
Rails
Railsで日本語と時刻の設定をしよう!初心者でも安心のlocale/zone初期設定チートシート
No.3
Java&Spring記事人気No3
Ruby
Rubyのハッシュを徹底比較!シンボルキーと文字列キーの違いと使い分け
No.4
Java&Spring記事人気No4
Rails
Railsマイグレーションの型選びを完全ガイド!初心者が迷わないカラム設計
No.5
Java&Spring記事人気No5
Ruby
WindowsでRubyをインストールする方法!RubyInstallerとMSYS2を使った完全ガイド
No.6
Java&Spring記事人気No6
Rails
RailsモデルとActive Record基礎|ID戦略を完全理解!AUTO INCREMENT・UUID・ULIDの比較と導入手順
No.7
Java&Spring記事人気No7
Rails
RailsモデルとActive Record基礎|クエリログの読み方を理解してEXPLAIN・joins・includesの違いを学ぼう
No.8
Java&Spring記事人気No8
データベース
ACID特性とは?データベーストランザクションの信頼性を初心者向けに徹底解説