Ruby 2.5新メソッド: Dir.children と Dir.each_child(翻訳)

概要

原著者の許諾を得て翻訳・公開いたします。

Ruby 2.5新メソッド: Dir.children と Dir.each_child(翻訳)

本記事はRuby 2.5シリーズのひとつです。

先ごろRuby 2.5.0-preview1がリリースされました

Dir.entriesはRuby 2.4にあるメソッドで、シェルコマンドls -aの結果をarrayで返します。

 > Dir.entries("/Users/john/Desktop/test")
 => [".", "..", ".config", "program.rb", "group.txt"]

ls -aコマンドの結果の各値を列挙してyieldするDir.foreachメソッドもあります。

> Dir.foreach("/Users/john/Desktop/test") { |child| puts child }
.
..
.config
program.rb
group.txt
test2

結果には、カレントディレクトリを表す.や親ディレクトリを表す..が含まれています。

子ファイルや子ディレクトリだけにアクセスしたくない場合、arrayの[".", ".."]の部分は不要です。

これは非常によくあるユースケースであり、欲しい結果を得るためにDir.entries(path) - [".", ".."]のような方法を使わなければならないでしょう。

この問題を解決するためにRuby 2.5でDir.childrenが導入されました。ls -aコマンドの出力からカレントディレクトリを表す.や親ディレクトリを表す..を除いた結果を返します。

irb> Dir.children("/Users/mohitnatoo/Desktop/test")
 => [".config", "program.rb", "group.txt"]

その他に、列挙中にカレントディレクトリや親ディレクトリのyieldを回避するDir.each_childメソッドも利用できるようになりました。

irb> Dir.each_child("/Users/mohitnatoo/Desktop/test") { |child| puts child }
.config
program.rb
group.txt
test2

#11302の議論で言及されているように、これらの名前は既存のPathname#childrenメソッドやPathname#each_childメソッドに合わせてあります。

シンプルな機能追加に見えますが、実際は2年以上前にあげられたissueです。

関連記事

Ruby 2.5のパフォーマンス改善点(翻訳)

Ruby: ぼっち演算子`&.`の落とし穴(翻訳)

【保存版】Rubyスタイルガイド(日本語・解説付き)総もくじ

Ruby on RailsによるWEBシステム開発、Android/iPhoneアプリ開発、電子書籍配信のことならお任せください この記事を書いた人と働こう! Ruby on Rails の開発なら実績豊富なBPS

この記事の著者

hachi8833

Twitter: @hachi8833、GitHub: @hachi8833 コボラー、ITコンサル、ローカライズ業界、Rails開発を経てTechRachoの編集・記事作成を担当。 これまでにRuby on Rails チュートリアル第2版の半分ほど、Railsガイドの初期翻訳ではほぼすべてを翻訳。その後も折に触れてそれぞれ一部を翻訳。 かと思うと、正規表現の粋を尽くした日本語エラーチェックサービス enno.jpを運営。 実は最近Go言語が好き。 仕事に関係ないすっとこブログ「あけてくれ」は2000年頃から多少の中断をはさんで継続、現在はnote.muに移転。

hachi8833の書いた記事

週刊Railsウォッチ

インフラ

BigBinary記事より

ActiveSupport探訪シリーズ