お役立ち情報

Rubyでディレクトリ内のファイルを一覧出来るようにする方法

ディレクトリファイル一覧は?

このページではRubyでディレクトリ内のファイルを一覧取得する方法を紹介します。それだけでわかれば問題ないのですが、その他のディレクトリ操作についても知っておきたい、という方も多いかと思います。

そこで、まずはディレクトリ内のファイルを一覧取得する方法を紹介し、それだけだといまいちピンと来ない、周辺知識も知っておきたいという方に向けて後半ではディレクトリ操作全般について解説していきます。

ディレクトリのファイルを一覧取得するコード

先にディレクトリのファイルを一覧取得するコードを紹介しておきます。これだけで用が済んだという方はこの先は読み進める必要がないかと思いますが、背景知識や周辺知識に興味のある方はぜひ読み進めてみてください。ディレクトリのファイル一覧取得のコードは以下です。

Dir::entries("pass")

このコードで、「pass」というディレクトリのファイルを一覧取得できます。またカレントディレクトリのファイルを一覧取得したい場合、以下のコードです。

Dir::entries(".")

これで一覧取得できます。ディレクトリのファイルを一覧取得するコードだと以上で終了で、これをRubyのソースコード内に実装するだけです。ディレクトリやファイル操作はコマンドプロンプトやターミナルのコマンドでも簡単にできるものなので、プログラミング言語でも基本的に簡単です。

せっかくなので、その他のコードについても紹介していきます。

いろいろなディレクトリやファイル操作

ディレクトリの作成

ディレクトリを作成する際は、相対パスで記述します。相対パスと絶対パスについては知っている方が多いかと思いますが、相対パスは現在の階層から見た位置関係で、絶対パスは現在の階層は関係ないパスです。サンプルコードは以下です。

Dir::mkdir("pass")

ディレクトリの書き方は、同じ階層なら「./」、一つ上のディレクトリであれば「../」といった書き方です。

現在のディレクトリの取得

現在のディレクトリを取得するコードはディレクトリの作成よりも簡単で、以下のようになります。

Dir::pwd

pwdは「Print Working Directory」の略です。現在作業中のディレクトリを取得するコードで、非常にシンプルです。

ディレクトリの削除

ディレクトリを削除するコードは3つありますが、いずれもディレクトリに中身がない場合のみ実行可能なものです。ディレクトリにファイルが置かれている場合、誤ってファイルを消すのを防ぐためにディレクトリを削除できない仕様になっています。コードは以下です。

Dir::rmdir("pass")
Dir::delete("pass")
Dir::unlink("pass")

どのコードでも同じ結果になり、ディレクトリにファイルがなければディレクトリ削除、ファイルがある場合は削除が実行されません。

ディレクトリのコピー

ディレクトリをコピーするコードは以下のようになります。

require 'fileutils'
FileUtils.cp_r("pass","pass2")

ディレクトリの移動

ディレクトリを移動するコードは以下です。

require 'fileutils'
FileUtils.mv("pass","pass2")

ディレクトリの名称変更

ディレクトリの名称変更は以下のコードです。

File.rename("pass","change")

第一引数が変更前の名称、第二引数が変更後の名称となっています。なので、第一引数に存在しないディレクトリ名を指定すると実行されません。

ディレクトリの名前の取得

ディレクトリの名前を取得するコードは以下です。

File.dirname("pass")

また、ファイルが存在するディレクトリを取得することも可能です。たとえば「pass.txt」というファイルがあったとして、このテキストファイルのディレクトリを取得するコードは以下になります。

puts File.dirname("pass.txt")

上記のコードを実行すると、たとえばカレントディレクトリなら「.」と出力されます。カレントディレクトリからの相対パスが取得されます。

カレントディレクトリの移動

カレントディレクトリを移動するコードは以下です。

Dir::chdir("pass")

カレントディレクトリから一つ上のディレクトリに移動して出力するコードは以下です。

Dir::chdir("..")
puts Dir::pwd

pwdは上で紹介した通り、現在のディレクトリです。

ディレクトリが存在するか確認する

指定したディレクトリが存在するかどうかを確認することができます。具体的なコードは以下です。

Dir::exist?("pass")

上記のコードを実行すると、TrueかFalseが返ってきます。

ホームディレクトリの取得

ホームディレクトリを取得するコードは以下です。

Dir::home

まさにそのままで、一回見たら忘れなさそうなほどシンプルです。

ディレクトリかどうかを判断する

ディレクトリだったらTrueを返し、そうでない場合はFalseを返します。サンプルコードは以下です。

File::ftype("pass")

ファイル名をディレクトリの部分だけにする

たとえば以下のコードを実行すると、ディレクトリ部分のみが抽出されます。

p File::dirname("/usr/local/bin/ruby/pass")
p File::dirname("/etc/pass/main")

それぞれ、「/usr/local/bin/ruby」「/etc/pass」となりました。

ディレクトリ内のファイルすべてに処理をする

ディレクトリ内のファイルすべてに処理をするコードは2種類あります。具体的には以下の2種類です。

Dir::foreach("pass"){
    処理

もしくは、

Dir::open("pass"){|d|
    d.each{
        処理
}

です。

任意の文字列を含むファイルを取得

ワイルドカードを使って特定のパターンに合致したファイルのみを取得することが可能です。以下のコードのようになります。

p Dir.glob("*")

このコードだとすべてのファイルが該当しますが、以下のように書けばhから始まるファイル名のファイルだけが取得されます。

p Dir.glob("h*")

これでhから始まるファイル名のファイルのみ取得できました。同様に、複数の条件を指定することも可能です。

p Dir.glob(["h*","i*"])

このように書くと、hから始まるファイルとiから始まるファイルを取得することができます。条件はandではなくorになっていることに注意してください。

まとめ

以上、Rubyでディレクトリ内のファイルを一覧表示する方法や、その他いろいろなディレクトリやファイル操作について紹介してきました。ほとんど単発かつ単純なコードなので、見て理解できないということはないかと思います。

しかしコマンドの種類が多いため、覚えようとすると難しいです。こういったコマンドはざっくりとどのようなものがあるか把握しておけば良いので、覚える必要はなく、もっと言えば忘れてしまってもまったく問題ありません。

仮にほぼ完全にコマンドを忘れていても、一度でも見たことがあれば次に見たときにパッと見で理解しやすくなります。今回複数のコマンドを紹介しましたが、なんとなくでも把握しておけば役立つ可能性は高いでしょう。

Ruby関連記事
1, Rubyフリーランスの仕事や単価、ruby on railsの在宅案件まで
2, Rubyとは?学習方法や将来性、perlやphp、Pythonの比較はどう?
3, Ruby on RailsでMySQLを使用する際の接続手順
4, あるiOSアプリのエンジニアがRuby on Railsのプロジェクトに加わった話
5, 小学生でも数時間でアプリを作れたRuby on railsの入門書3選
6, 【決定版!】Rubyでできることとは?
7, Ruby開発の新卒採用している会社まとめ
8, Rubyで文字列から数値へ変換する方法まとめ
9, RubyのWebサーバ「puma」を使ってみた感想
10, Rubyでのmecabの使い方を徹底解説します
11, Rubyでハッシュに対する繰り返し処理を行うeachの3つのメソッドの使い方
12, Rubyのyardを使ってソースからドキュメントを生成する方法
13, (この記事)Rubyでディレクトリ内のファイルを一覧出来るようにする方法

キャリアカウンセリングのプロとして
あなたに合った案件をご案内します。

まずはお気軽にお問い合わせください!

イメージ