Ruby でディレクトリ名を連結して相対パスを得たい時は File.join より Pathname を使った方がよい
Ruby でディレクトリ名を連結したい場合によく使われるメソッドに File.join がある。
File.join において、空文字列 '' は特に何も影響を与えない '.' と似たようなものだと思いがちである。
File.join('a','','b') # => "a/b"
しかし、第一引数が空文字列 '' の場合、root ディレクトリからの絶対パスになってしまう。
File.join('','a','b') # => "/a/b"
要は '/' を間に入れて単純に連結しているだけであり、Ruby のリファレンスにもそう書いてある。(参照)
うっかり第一引数に空文字を渡して root ディレクトリからのパスが現れるのを防ぎたい場合は、Pathname を使うとよい。
require 'pathname' Pathname('a').join('','b').to_s # => "a/b" Pathname('').join('a','b').to_s # => "a/b"