【初学者向け】猫でもわかる!すぐに使える!Ruby Dirクラス講座
Ruby3.4リファレンスマニュアルのDirクラスのページ冒頭には、Dirクラスについて
要約 ディレクトリの操作を行うためのクラスです。
と書かれています。

でもそれってどういうこと…?
と、いまいちピンとこなかったので、今回はDirクラスのおおまかな働きや使い方などをRuby初心者向けにまとめていこうと思います。
RubyのDirクラスメソッドとは?
Dir は ディレクトリ(フォルダ)を調べるためのクラスメソッド です。
たとえば
- ディレクトリ(フォルダ)の中にあるファイルの一覧を取り出す
- 新しいディレクトリ(フォルダ)を作る
- ディレクトリ(フォルダ)の場所を移動する
といった、主にディレクトリに関する操作ができます。
そもそも「ディレクトリの操作」ってどういう意味?
たとえばディレクトリ(フォルダ)の中身を見たり、新しいディレクトリを作ったり、ディレクトリ間を移動したり、ディレクトリを削除したり・・・といったこと全般の操作 を「ディレクトリの操作」と呼んでいます。
なお、ここでいう「ディレクトリ」と、一般的に浸透しているであろうPC用語の「フォルダ」は基本的に同じ意味で、ファイルを整理するための入れ物のことを指しています。
OSの種類によってその入れ物についての呼び方が異なり、WindowsやmacOSでは「フォルダ」、LinuxやUnix系のOSでは「ディレクトリ」と呼んでいます。
つまりDirクラスは
- 「中を見たい!」 →
entries,glob - 「フォルダを作りたい!」→
mkdir - 「移動したい!」→
chdir - 「今どこにいるか知りたい!」→
Dir.pwd
といった、「ディレクトリ(フォルダ)に関すること」を扱う専門のクラスといえます。
よく使うメソッドのご紹介
ここで、Dirクラスのなかでもとりわけよく使われる2つのメソッドをご紹介します。
Dir.entries(でぃる・えんとりーず)メソッド
Ruby3.4リファレンスマニュアルには、Dir.entriesメソッドについて
entries(path) -> [String]
ディレクトリ path に含まれるファイルエントリ名の配列を返します。
との説明があります。
たった二文ではありますが、それぞれ説明している内容が異なるため、それぞれの項目を分解して読み解いていきましょう。
entries(path) -> [String]とは?
まず以下の部分です。
entries(path) -> [String]
これはRubyリファレンス特有の書き方 で、Dirクラスのentries メソッドがどういう「形」で使えるのかを示したものです。シグネチャと呼ばれます。
| 部分 | 意味 |
entries(path) | 必須引数でディレクトリのパスのこと |
-> [String] | 戻り値は文字列の配列(ファイル名一覧) |
-> [String] の -> 以降は戻り値を示していて、それが [String] の形、つまり「文字列の配列で返りますよ」と示しています。
「ディレクトリ path に含まれるファイルエントリ名の配列を返します」とは?
続いて以下の部分です。
「ディレクトリ path に含まれるファイルエントリ名の配列を返します」
これはentries メソッドの機能についての説明です。
つまり、「指定したディレクトリ(=path)の中に入っているファイルやフォルダの名前を、文字列の一覧(配列)として返す」メソッドであるということです。
もう少し噛み砕いて説明すると、
といえます。
Dir.entries メソッドの使い方
使い方は以下のとおりです。
Dir.entries(".")
入力したものを分解して説明すると・・・
| 部品 | 意味 |
Dir | Rubyに最初から用意されている「フォルダを扱うための道具(クラス)」 |
entries | 「中身の一覧を取り出す」ための命令(=メソッド) |
"." | 「今いる場所(カレントディレクトリ)」を指す記号 |
つまり、「今いる場所のディレクトリの中身を出力して」という指示を出したことになるわけです。
実際の出力結果を見てみよう!
たとえば、以下のようなファイルが今いるディレクトリにあるとします。
main.rb
notes.txt
このときにいる場所でDir.entries(".")と今入力をすると、次のような結果が返ってくるはずです。
[".", "..", "main.rb", "notes.txt"]
これはつまり、
| 要素 | 意味 |
"." | 今のディレクトリ(フォルダ)自身のこと |
".." | 1つ上の階層にあるディレクトリ(フォルダ)のこと |
"main.rb" | "main.rb"というファイルの名前 |
"notes.txt" | "notes.txt"というファイルの名前 |
今いるディレクトリには、上記のようなものが含まれていますよ、と文字列の配列として一覧表示してくれているわけです(なお、隠しファイルがあればそれももれなく出力されます)。
Dir.glob(でぃる・ぐろぶ)メソッド
Ruby3.4リファレンスマニュアルには、Dir.globメソッドについて
glob(pattern, flags = 0, base: nil, sort: true) -> [String]
ワイルドカードの展開を行い、パターンにマッチするファイル名を文字列の配列として返します。パターンにマッチするファイルがない場合は空の配列を返します。
ブロックが与えられたときはワイルドカードにマッチしたファイルを引数にそのブロックを 1 つずつ評価して nil を返します。
との説明があります。
こちらは先ほどのDir.entriesメソッドよりもやや長めの解説になっているので、こちらもまたそれぞれの項目を分解して読み解いていきましょう。
Dir.glob(pattern, flags = 0, base: nil, sort: true) -> [String] とは?
まずは以下の部分から。
Dir.glob(pattern, flags = 0, base: nil, sort: true) -> [String]
これは Dir クラスの glob メソッドがどういう形で使えるのか を表したものです。
以下ではそれぞれの引数の意味を分解して説明しています。
(引数とはDir.globに続くカッコ内の部分のことです)
| 引数 | 意味 |
pattern(必須) | 探したいファイル名のパターンのこと(例:"*.rb" や "lib/**/*.rb"など) |
flags(省略可) | 検索時の細かいオプションを数値で指定します。通常は 0(=指定なし)でOKです。 |
base(省略可) | 検索の基準とするディレクトリを文字列で指定できます。通常は現在のディレクトリ ( "." )となっています。 |
sort(省略可) | true とした場合は結果をソート(並び替え)して返します。なおデフォルトは trueです。 |
基本的な使用例のご紹介
文字だけの説明では使用するイメージが掴みにくいと思いますので、よく使う基本パターンをご紹介していきます。
一番よく使うパターン(基本形)
Dir.glob("*.rb")今いるフォルダの中にある
.rbファイルだけを配列で返します
サブディレクトリも含めて再帰的に探すパターン(応用編その1)
Dir.glob("lib/**/*.rb")
libディレクトリ以下すべての.rbファイルを再帰的に探しますなお「再帰的に探す」とは、あるディレクトリ(フォルダ)の中だけでなく、その中にあるサブディレクトリ(またはさらにその中のサブディレクトリも…)をどんどんたどって深く深く調べていくことを意味しています。
つまり
**/*.rbは「下の階層も全部含めて .rb ファイルを探してくれ」という命令になっています。
並び順をソートせずにそのまま返す(応用編その2)
Dir.glob("*.rb", sort: false)
.rbファイルを探しますが、sort: falseになっていますので、順番は並び替えせず、見つけたまま返します
検索の基準ディレクトリを変更て探します(応用編その3)
Dir.glob("*.md", base: "docs")
docsフォルダの中で、.mdファイルを探します
応用編含めて使用例を確認したことで、使い方のイメージが掴みやすくなったのではないかと思います。
おわりに
Dir.entriesメソッドとDir.globメソッドは、Rubyでファイル操作をするうえでとてもに便利なメソッドです。
Ruby初心者でも扱いやすいメソッドなので、ぜひ実際に手を動かして活用してみてください!
