Pathname - ファイル名のグッドラッパー
http://www.ruby-lang.org/ja/man/?cmd=view;name=pathname
先日のRails勉強会でetoさんにPathnameというパスやファイル名のすごい便利なライブラリを教えて貰った。で、早速使ってみたところめっちゃ便利でいま書いてるアプリケーションじゃほとんどのファイル名の操作に使ってるという。
使い方はめっちゃ簡単でパスやファイル名を引数としてオブジェクトを作るだけ。
require 'pathname'
file = '/tmp/foo'
path = Pathname.new file
で、これの何が便利っていうとリファレンスマニュアルのメソッドを眺めて貰うと解るんだけど、ファイル関係の操作が何でもできてしまう。通常だとFileオブジェクトを作るには実体が無いとダメなんだけど無くてももちろん作れるため
str = IO.read(file) if FileTest.file?(file)
が
str = path.read if path.file?
と書ける。シンプルだしOOっぽい!
path.exist?
path.mkdir
path.chown 'apache'
path.dirname
とかも思った通りに動く。もちろんPathnameと云うだけあってpath操作も充実。
path + 'bar'
=> /tmp/foo/bar
path + '..'
=> /tmp
path + '.././../tmp/./foo/bar'
=> "/tmp/./../tmp/./foo/bar"
(path + '.././../tmp/./foo/bar').cleanpath
=> "/tmp/foo/bar"
path.join 'bar'
=> /tmp/foo/bar
便利だー。いままでファイル名の文字列が '/' で終わってるかどうか解らないときとか + '/bar' とかしてたんだけどPathname使うようになってからはいちいち考えなくてすむし。
etoさんはPathname依存症らしくStringにメソッド追加して
class String
def to_path
Pathname.new self
end
end
path = filename.to_path
みたいにして使ってるみたい。たしかにString#to_pathが欲しくなるぐらいPathname便利だわぁ。
で、このグッドラッパーの作者は田中哲さん。さすがインターフェイスがよく考えてられてます。るびまのインタビューでは
Pathname.new とか書いてるのではその文字列に長さで勝てない。だから pathname はリテラルのシンタックスがほしい。リテラルのシンタックスにすると同じような長さで書けるようになる。
Rubyist Magazine - Rubyist Hotlinks 【第 8 回】 田中哲さん その3
と。なるほど。リテラルかぁ。