Rubyには、特殊変数、もしくは組み込み変数(Pre-defined variables)と呼ばれる $
から始まる変数が定義されています。
普段はほとんど使わないこともあり、忘れることも多いので、今回まとめてみます。
このページの内容は、Ruby 3.3.0での情報をもとにしています。
目次
- 目次
- 入出力関連
- 例外関連
- 正規表現(パターンマッチ)
- 引数処理
- ファイル、文字列処理
- 警告出力の挙動変更(冗長メッセージの設定)
- コマンドラインオプションの指定フラグ
- その他
- 現在使用されていない変数
- まとめ
入出力関連
変数 | 説明 | スコープ | 補足 |
---|---|---|---|
$. | IOオブジェクトが最後に読んだ行の行番号 | グローバルスコープ | Ruby起動時の初期値は0 |
$< | すべての引数または標準入力で構成される仮想ファイル。定数 Object::ARGF の別名 | グローバルスコープ | 読み取り専用 |
$> | 標準出力。 Kernel.#print、Kernel.#puts、Kernel.#p などのデフォルトの出力先になる | グローバルスコープ | |
$stdout | $> に同じ | $> に同じ | $> に同じ |
$stderr | 標準エラー出力 | グローバルスコープ | |
$stdin | 標準入力 | グローバルスコープ | |
$FILENAME | 仮想ファイル Object::ARGF で現在読み込み中のファイル名 | グローバルスコープ | |
$_ | 最後に Kernel.#gets または Kernel.#readline で読み込んだ文字列 | ローカルスコープ、スレッドローカル |
例外関連
変数 | 説明 | スコープ | 補足 |
---|---|---|---|
$! | 最後に発生した例外 | スレッドローカル | 読み取り専用 |
$@ | 最後に例外が発生した時のバックトレースを表す配列 | スレッドローカル |
正規表現(パターンマッチ)
変数 | 説明 | スコープ | 補足 |
---|---|---|---|
$& | 現在のスコープで最後に成功した正規表現でパターンマッチした文字列 | ローカルスコープ、スレッドローカル | 読み取り専用 |
$' | 現在のスコープで最後に成功した正規表現でパターンマッチした部分より後ろの文字列 | ローカルスコープ、スレッドローカル | 読み取り専用 |
$` | 現在のスコープで最後に成功した正規表現のパターンマッチした部分より前の文字列 | ローカルスコープ、スレッドローカル | 読み取り専用 |
$+ | 現在のスコープで最後に成功した正規表現でパターンマッチした中で最後のカッコに対応する部分文字列 | ローカルスコープ、スレッドローカル | |
$1, $2, … | 最後に成功したパターンマッチでn番目の括弧にマッチした値が設定される | ローカルスコープ、スレッドローカル | 読み取り専用 |
$~ | 現在のスコープで最後に成功したマッチに関する MatchDataオブジェクト | ローカルスコープ、スレッドローカル | MatchDataからn番目のマッチを取り出すには $~[n] を使う |
引数処理
変数 | 説明 | スコープ | 補足 |
---|---|---|---|
$* | Rubyスクリプトに渡された引数の配列 | グローバルスコープ |
ファイル、文字列処理
変数 | 説明 | スコープ | 補足 |
---|---|---|---|
$, | Array#join、Kernel.#printで利用されるデフォルトの出力フィールドの区切り文字列 | グローバルスコープ | Ruby 2.7以降ではnil以外への変更は非推奨 |
$/ | 入力レコードの区切り文字列。Kernel.#getsなどでの「行」の区切りで利用される | グローバルスコープ | 正規表現の利用は不可 |
$-0 | $/に同じ | $/に同じ | $/に同じ |
$; | String#split で引数を省略した場合の区切り文字 | グローバルスコープ | Ruby 2.7以降ではnil以外への変更は非推奨 |
$-F | $;に同じ | $;に同じ | $;に同じ |
$\ | 出力レコード区切りを表す文字列 | グローバルスコープ |
警告出力の挙動変更(冗長メッセージの設定)
変数 | 説明 | スコープ | 補足 |
---|---|---|---|
$-W | コマンドラインオプションの-Wに指定した値。 0: 警告を出力しない 1: 重要な警告のみ出力(デフォルト) 2: すべての警告を出力する |
グローバルスコープ | この変数には代入できない。$VERBOSEと対応している |
$DEBUG | trueのとき、インタプリタがデバッグモードになる。コマンドラインオプション -d を指定したときに true になる。 | グローバルスコープ | |
$-d | $DEBUGに同じ | $DEBUGに同じ | $DEBUGに同じ |
$VERBOSE | 冗長メッセージのフラグ。Rubyインタプリタのコマンドラインオプション -v で設定される。 nil: 警告を出力しない false: 重要な警告のみ出力(デフォルト) true: すべての警告を出力 |
グローバルスコープ | |
$-v | $VERBOSEに同じ | $VERBOSEに同じ | $VERBOSEに同じ |
$-w | $VERBOSEに同じ | $VERBOSEに同じ | $VERBOSEに同じ |
コマンドラインオプションの指定フラグ
変 数 |
説明 | スコープ | 補足 |
---|---|---|---|
$-a | 自動 split モードを表す。コマンドラインオプション -a を指定したときにtrueになる。trueの場合、各ループの先頭で以下が実行される$F = $_.split |
グローバルスコープ | この変数には代入できない |
$-l | コマンドラインオプション -l を指定したときに true になる | グローバルスコープ | この変数には代入できない |
$-p | コマンドラインオプション -p を指定したときに true になる | グローバルスコープ | この変数には代入できない |
その他
変数 | 説明 | スコープ | 補足 |
---|---|---|---|
$$ | 実行中のRubyプロセスのID | グローバルスコープ | |
$0 | 現在実行中のRubyスクリプトの名前を表す文字列 | グローバルスコープ | |
$PROGRAM_NAME | $0に同じ | $0に同じ | $0に同じ |
$? | このスレッドで最後に終了した子プロセスのステータス | スレッドローカル | 読み取り専用 |
$" | requireでロードされたファイル名の配列 | グローバルスコープ | |
$LOADED_FEATURES | $"に同じ | $"に同じ | $"に同じ |
$: | Rubyライブラリをロードするときの検索パス | グローバルスコープ | |
$LOAD_PATH | $:に同じ | $:に同じ | $:に同じ |
$-I | $:に同じ | $:に同じ | $:に同じ |
$-i | in-place 置換モードで用いる文字列。コマンドラインオプション -i で指定した値が設定される。-iオプションを指定していないときは nil になる | グローバルスコープ |
現在使用されていない変数
変数 | 説明 | スコープ | 補足 |
---|---|---|---|
$KCODE | 通常のグローバル変数 | グローバルスコープ | 以前は文字コードの指定に利用。Ruby3.0以降では特殊変数から通常のグローバル変数に変更 |
$-K | $KCODEに同じ | $KCODEに同じ | $KCODEに同じ |
$= | 過去の互換性のために残されている | グローバルスコープ | 値は常にfalse、代入しても無視される |
$SAFE | 通常のグローバル変数 | グローバルスコープ | 以前はSafe levelの指定に利用。Ruby3.0以降では特殊変数から通常のグローバル変数に変更 |
まとめ
今回は普段Rubyで頻繁に使うことは少ない、特殊変数についてまとめてみました。
コマンドラインオプションとも密接に関わっている部分もあるので、次はコマンドラインオプションも調べてまとめてみようと思います。