Webサイト制作コースのお申し込みはこちら Webサイト制作コースのお申し込みはこちら

Rubyにはディレクトリを操作したり検索したりするDirクラスが標準で組み込まれています。そしてこれは、Webシステムで画像などのファイルを扱ったり、Rubyでサーバーの設定を自動化するプログラムなどで使える機能です。

今回はDirクラスで利用できるメソッドの使い方について、例を使い詳しく解説します。

Dirクラスで使える機能とは

Rubyには、ファイルシステムを操作するための標準クラスとして、FileクラスとDirクラスが用意されています。このうちDirクラスは、ファイルそのものを扱うのではなく、ディレクトリを操作したりファイルを検索するのに使われるクラスです。

次から、このDirクラスの基本について解説します。

Dirクラスは標準クラス

Dirクラスは、Rubyをイストールすると同時に組み込まれる標準クラスで、Rubyのスクリプトを実行しているホストのストレージでディレクトリを操作するための使われます。

なお、ディレクトリとは、UNIXのファイルシステムが基になったLinuxでの呼び方で、WindowsやmacOSのフォルダと同じものです。ファイルを格納するための階層構造を持つ入れ物と言えば理解してもらえるでしょうか。

またDirクラスのメソッドは、パッケージの追加やrequireによる読み込みは不要です。

Dirクラスの役割

Dirクラスには、ディレクトリを操作するメソッドや、ディレクトリ内のファイルを検索するメソッドが用意されています。具体的には、ディレクトリを作ったり、変更したり、削除するメソッドはもちろん、ディレクトリの有無をチェックしたり、特定のファイルを検索するメソッドなどです。

また、Rubyのプログラムの中でカレントディレクトリを設定するとこで、ディレクトリパスの指定を省略できるメソッドもあります。そのためDirクラスには、カレントディレクトリを変更したり、カレントデフィレクトリ内のファイルを検索するためのメソッドも用意されています。

Dirクラスのメソッドの使い方

Dirクラスのメソッドを利用する場合、「Dir.メソッド名」のように直接Dirクラスのメソッド名を記述してください。

また特定のディレクトリを指定する場合、絶対パスと相対パスのどちらも使用できます。絶対パスとはディレクトリ階層の最も上から書く方法で、相対パスとは今のディレクトリから見た位置を指定する方法です。

絶対パスでディレクトリを指定する例

Dir.mkdir('/home/project/datas/test', 0666)

これはLinuxのファイルシステムに新しいディレクトリ/home/project/datas/testを作成する例です。

相対パスでディレクトリを指定する例

Dir.mkdir('../datas/test', 0666)

これはLinuxのファイルシステムで、今のディレクトリから1つ上のディレクトリにあるdatasの下に、新しいディレクトリtestを作成する例です。

Dirクラスで特定のディレクトリを操作する例

先ほど紹介したように、RubyのプログラムでDirクラスを利用する際、特定のディレクトリを操作ケースとカレントディレクトリを使うケースがあります。このうち、特定のディレクトリを操作する例を紹介します。

ディレクトリを作ったり削除する

RubyのDirクラスにはLinuxのコマンド名と同じディレクトリを操作するメソッドがあります。例えばディレクトリを作るメソッドがmkdirメソッドで、ディレクトリを削除するメソッドがrmdirメソッドです。なお、ディレクトリを削除するメソッドは3つあるので使い易いメソッドを利用してください。

ディレクトリを作るメソッドの例

Dir.mkdir('/home/project/datas/test', 0666)

ディレクトリを削除するメソッドの例

Dir.rmdir('/home/project/datas/test')
Dir.delete('/home/project/datas/test')
Dir.unlink('/home/project/datas/test')

特定のディレクトリ内を調べる

Dirクラスには、特定のディレクトリ名を指定してそのディレクトリを調べるメソッドが幾つも用意されています。例えば、特定のディレクトリの有無をチェックしたり、特定のディレクトリにあるファイル一覧を取得するなどです。

特定のディレクトリ内を調べる例

dir_name = '/home/project/list'
if Dir.exitst?(dir_name)
  files = Dir.entries(dir_name)
else
  p dirname + 'はありません'
end

この例は、Dir.exists?で、特定のディレクトリの有無を調べ、Dir.entriesでそのディレクトリにあるファイルの一覧の配列filesを作るプログラムです。

特定のファイルの一覧を作る例

特定のディレクトリを指定し、その中からファイル名が条件に一致するもののみリストを作成する例を次に紹介します。

each_childメソッドを使いファイルの一覧を作る例

dir_name = '/home/project/list'
files = []
if Dir.exitst?(dir_name)
  Dir.each_child(dir_name) { |f|
    if f.include?(".rb") then
      files.push(f)
    end
  }
else
  p dirname + 'はありません'
end

この例で使用しているeach_childメソッドは、特定のディレクトリの”.”と”..”をのぞくファイル名をブロックで評価します。そして、ブロック内のinclude?メソッドで”.rb”に該当するファイルを、配列filesに追加します。

Dirクラスでカレントディレクトリを操作する例

Dirクラスには、ディレクトリを指定するメソッドと指定しないメソッドとがあり、後者はカレントディレクトリに対する操作や検索などのメソッドです。次から、カレントディレクトリを操作する例を紹介します。

カレントデフィレクトリを変更する

Dirクラスにはカレントディレクトリを対象としたメソッドが幾つもあります。そして、そのようなメソッドを使うためには、先にカレントディレクトリを目的のディレクトリに移動し、その後で続いて使いたいメソッドを実行します。

また、カレントディレクトリのパスを調べるメソッドもあるので、何か処理する前にカレントディレクトリをチェックして、対象のディレクトリと違っていたら移動する処理も作れます。

カレントディレクトリのパスを調べる処理

dir_name = '/home/project/list'
if Dir.pwd != dir_name then
  Dir.chdir(dir_name)
end

この例は、Dirクラスのpwdメソッドでカレントディレクトリのパスを調べ、もし、変数dir_nameのパスと一致しない場合は、カレントディレクトリのパスを変更する処理です。

カレントディレクトリのファイルリストを作る

先ほど、特定のディレクトリにあるファイルのリストを作る例を紹介しましたが、カレントディレクトリで実行するglobメソッドを使えば、もっと簡単に作れます。その例を次に紹介します。

Dirクラスのglobメソッドを使った例

dir_name = './images'
Dir.chdir(dir_name)
lists = Dir.glob('*.png')
if lists.size > 0 then
  lists.each { |file|
    p file
  }
else
  p '該当するファイルはありません'
end

この例は、Dir.chdirメソッドでカレントディレクトリを移動し、Dir.globメソッドでそこにある*.pngファイルの一覧を作るプログラムです。なお、Dir.globメソッドは、テキストの配列を返すので、配列のメソッドを使ったプログラムで利用できます。

まとめ

今回紹介したDirクラスは、ディレクトリを操作したり検索したりする機能を提供する、Rubyに最初から組み込まれたクラスです。そしてWebシステムのサーバーでファイルを管理したり、サーバー管理の自動化などで利用できます。

なおDirクラスには、絶対パスや相対パスで指定するメソッドとカレントディレクトリに対して処理するメソッドがあるので、目的に応じて使い分けてください。

エンジニアになりたい人に選ばれるプログラミングスクール「ポテパンキャンプ 」

ポテパンキャンプは卒業生の多くがWebエンジニアとして活躍している実践型プログラミングスクールです。 1000名以上が受講しており、その多くが上場企業、ベンチャー企業のWebエンジニアとして活躍しています。

基礎的な学習だけで満足せず、実際にプログラミングを覚えて実践で使えるレベルまで学習したいという方に人気です。 プログラミングを学習し実践で使うには様々な要素が必要です。

それがマルっと詰まっているポテパンキャンプでプログラミングを学習してみませんか?

卒業生の多くがWebエンジニアとして活躍

卒業生の多くがWeb企業で活躍しております。
実践的なカリキュラムをこなしているからこそ現場でも戦力となっております。
活躍する卒業生のインタビューもございますので是非御覧ください。

経験豊富なエンジニア陣が直接指導

実践的なカリキュラムと経験豊富なエンジニアが直接指導にあたります。
有名企業のエンジニアも多数在籍し品質高いWebアプリケーションを作れるようサポートします。

満足度高くコスパの高いプログラミングスクール「ポテパンキャンプ」

運営する株式会社ポテパンは10,000人以上のエンジニアのキャリアサポートを行ってきております。
そのノウハウを活かして実践的なカリキュラムを随時アップデートしております。

代表の宮崎もプログラミングを覚えサイトを作りポテパンを創業しました。
本気でプログラミングを身につけたいという方にコスパ良く受講していただきたいと思っておりますので、気になる方はぜひスクール詳細をのぞいてくださいませ。