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っぽい！

とかも思った通りに動く。もちろん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便利だわぁ。

で、このグッドラッパーの作者は田中哲さん。さすがインターフェイスがよく考えてられてます。るびまのインタビューでは

と。なるほど。リテラルかぁ。