File
クラス(File.dirname
メソッド)などを使うよりも直感的で楽です。特に、相対パスと絶対パスを考慮しなければいけない場合に絶大な威力を発揮します。
具体例(準備)
まずrequire
しないと始まりません。
require 'pathname'
さて、現在のディレクトリを以下のように/home/foobar
とし、そのディレクトリを指すPathname
オブジェクトを生成します*1。
pwd = Pathname('/home/foobar')
あとはこのオブジェクトにjoin
メソッドでディレクトリやパスをくっつけていくことになります。
具体例(詳細)
Pathname
クラスが優れていることは以下の二つにあると思っています。
join
の引数に「スラッシュで始まる文字列」を指定した場合には、結果をルートからのパスとみなして返してくれる- パスの切れ目のスラッシュを適切に処理してくれる
具体例を見てみると、以下のようになります。場合分けをした上で、まとめて一つの例として書きました。
pwd = Pathname('/home/foobar') puts pwd.join('hoge') #=> /home/foobar/hoge puts pwd.join('/opt') #=> /opt puts pwd.join('hoge').join('/opt') #=> /opt puts pwd.join('hoge').join('fuga') #=> /home/foobar/hoge/fuga puts pwd.join('hoge/').join('fuga') #=> /home/foobar/hoge/fuga puts pwd.join('hoge').join('fuga/') #=> /home/foobar/hoge/fuga/ puts pwd.join('hoge/').join('fuga/') #=> /home/foobar/hoge/fuga/
上記のような挙動をしますので、様々な条件分岐から解放されます。
補足
join
以外にもいくつかメソッドがあるので調べてみると面白いかと思います。
*1:現在のディレクトリは Dir.pwd で取得してもよいです