Just do IT

思うは招く

[Ruby] __FILE__や__dir__って何?

Rubyで見かけるアンダーバーふたつで囲まれた奴ら。

__FILE__
__dir__

き、きみたちは一体何?どこからきたの?

__FILE__:現在実行しているファイル

ruby_basic.rbというファイルに以下のコードを書いて実行してみる。

puts "__FILE__: #{__FILE__}"
=> __FILE__: ruby_basic.rb

実行しているファイル名が出てくる。

# 同じ
puts "$0: #{$0}"
=> $0: ruby_basic.rb

きっちりした解説だと、「現在のソースファイル名が格納された疑似変数」。 絶対パスが返ってくるわけではないので、絶対パスを取りたいときはFile.expand_pathを使う。

p __FILE__
p File.expand_path(__FILE__)
=>
"ruby_basic.rb"
"/Users/<username>/rubybook/lib/ruby_basic.rb"

__dir__:現在実行しているファイルがあるディレクト

p "__dir__: #{__dir__}"
=>"__dir__: /Users/<username>/rubybook/lib"

現在実行しているファイルがあるディレクトリ名を絶対パスで返す。 これは疑似変数ではなくメソッド。