Rubyがミニツク

あなたのRubyの技術に関するより詳しい知識と理解を増やします。

Ruby入門コース

このコースについて

Rubyのeラーニング研修システムはRailsを使ってWebアプリケーション開発ができる技術者の育成を目指します。 そのため、Railsを扱うことができるだけのRubyの知識を得ることがRuby入門コースの目標となっています。

コンテンツ一覧

ヒント レッスンの名前をクリックすると、その内容を表示します。

次のコンテンツ ホームへ戻る

pathname.rb

pathname.rbはファイルやディレクトリのパスを操作することができる添付ライブラリです。Pathnameクラスを使うためにrequireでpathname.rbを読み込んでください。これまでに紹介してきたクラスのメソッドと同じことがPathnameクラスではおこなうことができます。

require "pathname"
p Pathname.pwd

FileクラスやIOクラスは指定したパスの先にファイルが存在しなければ例外を発生させます。

path = '/tmp/foo.txt'
file = IO.new(path)
TypeError: can't convert String into Integer
  from (irb):47:in `initialize'
  from (irb):47:in `new'
  from (irb):47
  from (null):0

Pathnameクラスはファイルやディレクトリのパスを作成するクラスなので、パスの先にファイルがなくても作成することができます。

require "pathname"
path = '/tmp/foo.txt'
file = Pathname.new(path)
p file  #=> #<Pathname:/tmp/foo.txt> 

childrenメソッドを使うことによって、指定したパス以下にあるファイルやディレクトリのパスを取得できます。

p Pathname.pwd.children

指定したディレクトリ以下にあるファイルやディレクトリのパスが配列オブジェクトの要素になって返ってきました。パスの最後の部分だけ使いたい場合は引数に真偽値のfalseを指定します。

p Pathname.pwd.children(false)  #=> basenameのみ

指定したディレクトリの配下に設置されているファイルやディレクトリのパスを取得したい時はfindメソッドを使います。

require "pathname"
Pathname.pwd.find {|f| p f }

mkpathメソッドを使うことによって、Pathnameクラスのインスタンスが表しているパス名のディレクトリを作成します。
もしもパス名の途中にある親ディレクトリが存在しない場合は、その親ディレクトリも作成します。
なお、Pathnameクラスのインスタンスは、exist?メソッドを使用することで、そのパス名が存在するかを判定して真偽値を返します。

require "pathname"
path = Pathname.new("/tmp/foo/bar/baz")
p path.exist? #=> false
path.mkpath
p path.exist? #=> true

また、mkpathメソッドとは逆の処理をおこなうrmtreeメソッドがあります。
このrmtreeメソッドは、レシーバに指定したPathnameクラスのインスタンスが表しているパス名より下に配置しているファイルやディレクトリをすべて削除します。
そのため、削除したくない場合は気を付けましょう。

require "pathname"
path_a = Pathname.new("/tmp/foo/bar/baz")
path_b = Pathname.new("/tmp/foo")

p path_a.exist? #=> false
path_a.mkpath
p path_a.exist? #=> true
path_b.rmtree
p path_a.exist? #=> false


次のコンテンツ ホームへ戻る