Ruby 2.6 の変更点 - Dir, File, FileUtils

Ruby2.6アドベントカレンダーの4日目の記事です。

qiita.com

Dir

Dir#each_child, Dir#children 追加

https://bugs.ruby-lang.org/issues/13969

Dir.each_child, Dir.children は 2.5 で追加されましたが、そのインスタンスメソッド版です。

Dir#each, Dir#entries と異なり、... を含みません。

Dir.new(".").entries  #=> ["123", "..", "abc", "."]
Dir.new(".").children  #=> ["123", "abc"]

Dir.glob\0 が非推奨

https://bugs.ruby-lang.org/issues/14643

警告が出力されるようになります。

% ruby -e 'Dir.glob("aaa\0bbb")'
-e:1: warning: use glob patterns list instead of nul-separated patterns

File

File.read, .binread, .write, .binwrite, .foreach, .readlines| で始まっていても外部コマンドを実行しない

2.5 では warning が出るだけでしたが、2.6 では | もファイル名の一部として扱われます。

2.5:

% ruby -e 'p File.read("|date")'
-e:1: warning: IO.read called on File to invoke external command
"2018年 12月  6日 木曜日 01:02:33 JST\n"

2.6:

% ruby -e 'p File.read("|date")'
Traceback (most recent call last):
    1: from -e:1:in `<main>'
-e:1:in `read': No such file or directory @ rb_sysopen - |date (Errno::ENOENT)

FileUtils

FileUtils.cp_lr 追加

cp -lr コマンドと同様のことを行うメソッドです。