Rubyのグローバル変数($変数)とは?使い方と注意点をやさしく解説
Rubyには、$変数名
という形式で定義する「グローバル変数」があります。
これは、プログラム全体でアクセス可能な変数で、クラスやメソッドの内外を問わず使用できます。
グローバル変数の基本
$message = "こんにちは"
def greet
puts $message
end
greet # → こんにちは
puts $message # → こんにちは
このように、$(ドルマーク)から始まる変数は、どこからでも読み書きできます。
グローバル変数のスコープ
- 全クラス・全メソッドで共通
- スクリプト内のどこからでもアクセス可能
- 定義された順番に関係なく参照できる
書き換えも自由
$count = 0
def increment
$count += 1
end
increment
increment
puts $count # → 2
どこからでも自由に値を変更できるという柔軟さがありますが、これがバグの温床にもなりやすいです。
使う際の注意点
- スコープが広すぎて予測しづらい
- メソッドやクラスが独立性を失う
- 他の開発者と変数名がかぶる危険
そのため、実務ではグローバル変数の使用は最小限に抑えるのが望ましいです。
グローバル変数の代替案
目的 | 代替手段 |
クラス内で共有 | クラス変数(@@変数)またはクラスインスタンス変数 |
インスタンス内で保持 | インスタンス変数(@変数) |
メソッド内限定 | ローカル変数 |
設定値の保持 | 定数(大文字) |
組み込みのグローバル変数
Rubyには、もともと用意されているグローバル変数もあります:
$LOAD_PATH
:ライブラリの検索パス
$!
:直前の例外オブジェクト
$_
:最後に読み込んだ行
$0
:実行されたファイル名
これらはRuby内部で便利に使われていますが、初心者が誤って上書きすると予期しない動作になることもあります。
まとめ
Rubyのグローバル変数($変数)は、全体で共有できる便利な変数ですが、スコープが広すぎるため慎重に使う必要があります。
基本的には、他の変数や定数、引数などで代替できないかを考えてから使用するようにしましょう。
「とにかくどこからでもアクセスしたい!」という場合以外では、グローバル変数よりも構造化された設計を優先しましょう。