バナー画像

Rubyにはファイルを操作するライブラリがあり、これを利用することで不要なファイルを削除するプログラムを作れます。そしてファイル削除に使えるライブラリとしてよく利用されるのがFileUtilsモジュールです。

今回はFileUtilsモジュールのrmメソッドを利用した、ファイルを削除するプログラムの作り方を紹介します。

Rubyでファイルを削除するには


ファイルの作成、変更、削除は、LinuxをはじめとするOSの基本機能です。そして、このOSの機能を利用するためのコマンドが用意されています。しかしこの機能はプログラムからでも利用可能です。

プログラミング言語RubyにもOSの機能を利用できることから、ファイルを削除するプログラムを作成できます。さらにRubyでファイルを削除する処理を作る方法は1つではありません。まずはRubyでファイルを削除する複数の手順について紹介します。

rmコマンドを実行する

CentOSやUbuntuなどのLinuxではファイルを削除するrmコマンドを使えます。そしてRubyには外部コマンドを実行する機能があるので、このrmコマンドを使ってファイルを削除することが可能です。

この場合、rmコマンドでファイルを削除するコマンドの文字列を用意し、これを実行します。なおRubyにはコマンドを実行する方法が複数用意されているので、単純に削除するだけなら簡単に作れるでしょう。ただし、エラーが発生することもあるので、実行結果をチェックするなどの例外処理が必要です。

IOクラスのメソッドを利用する

Rubyにおけるファイルを操作するライブラリがFileクラスです。そしてFileクラスには、ファイルを削除するためのdeleteメソッドが用意されており、これを使うことでファイルを削除できます。

Fileクラスのdeleteメソッドの使い方

File.delete( ファイルのパス )

ただし、このメソッドはファイル専用であり、ディレクトリの削除はできません。ディレクトリを削除するには、Dirクラスのrmdirメソッドを利用します。また、ファイル削除の際にエラーが発生した場合、Rubyはその時点で処理を中断します。そのためエラーが発生した場合を考慮してbegin~rescueによる例外処理も必要です。

FileUtilsモジュールを使う

Rubyでは、削除などのファイルへの操作をFileクラスのメソッドで行う他に、より便利に使えるFileUtilsモジュールも利用できます。ただし、このFileUtilsモジュールはRubyの標準ライブラリのため、Rubyをインストールすれば利用できますが、requireで読み込む必要があるので注意してください。

なお、FileUtilsモジュールのファイル削除の代表的なメソッドがrmですが、これを使うことでファイルだけでなくディレクトリの削除も可能です。もしファイルのみまたはディレクトリのみを削除する場合は、FileUtilsモジュールの他のメソッドの利用も検討してください。

FileUtilsモジュールの使い方は次に詳しく紹介します。

FileUtilsモジュールによるファイル削除


先ほど、Rubyでファイル削除のプログラムを書くなら、FileUtilsモジュールのrmメソッドが使えると紹介しましたが、FileUtilsモジュールにあるファイル削除のメソッドはそれだけではありません。目的に応じたメソッドが利用できます。

次からFileUtilsモジュールによるファイル削除に使えるメソッドを紹介します。

FileUtilsモジュールの削除用メソッド

FileUtilsモジュールで利用できるファイルおよびディレクトリ削除用のメソッドは次のとおりです。

rm, remove
リストで指定された対象を削除する。オプションを指定可能。
remove_dir
指定したパスのディレクトリを削除する。
remove_entry
指定したファイルを削除し、もしディレクトリなら再帰的に削除する。
remove_entry_secure
効果はremove_entryと同じで、セキュリティに配慮した削除処理を実現する。
remove_file
指定したファイルを削除する。
rm_f
rmメソッドで「:force => true」オプションを指定した場合と同じ。
rm_r
ファイルまたはディレクトリ list を再帰的に消去する。
rm_rf
ファイルまたはディレクトリ list を再帰的に消去し、rm_rに「:force => true」オプションを指定した場合と同じ。
rmdir
ディレクトリを削除する。ただしディレクトリにファイルが残っていた場合は削除に失敗する。

rmメソッドの文法

先ほど紹介したようにFileUtilsモジュールには削除用メソッドが幾つもありますが、よく使われるのはrmメソッドです。まずはrmメソッドの使い方をマスターしましょう。

rmメソッドは、1つまたは複数のファイルを指定することで、そのファイルを削除します。なお、削除するファイルが1つなら文字列で、複数のファイルを指定する場合は配列で指定します。さらに、強制的に削除するなどのオプションを指定することが可能です。

rmメソッドの文法

FileUtils.rm( 削除対象ファイル名 )

または

FileUtils.rm( 削除対象ファイル名, オプション )

rmメソッドの使用例

次にFileUtilsモジュールのrmメソッドの使用例を紹介します。

require 'fileutils'
fname = "tmp.txt"
begin
  FileUtils.rm(fname)
  puts "#{fname}を削除しました"
rescue
  puts "#{fname}を削除できません"
end

これはtmp.txtというファイルを削除する例ですが、最初に「require ‘fileutils’」でFileUtilsモジュールを読み込み、rmメソッドを実行しています。そして、rmメソッドは、begin~rescue構文に記述することで、エラーが発生してもそこでプログラムが中断しないように対策しています。

rmメソッドのオプション


先ほど紹介したRubyでファイル削除のプログラム作成に使われるrmメソッドでは、「:force」「:noop」「:verbose」の3つオプションを利用できます。これらのオプションの使い方について紹介します。

rmメソッドのオプション

rmメソッドのオプションは次の3つです。

:noop
trueを指定すると実際にはファイルを削除しない。
:verbose
trueを指定すると詳細を出力する。
:force
trueを指定するとエラーを無視する。なおこのエラーとは、begin~rescue構文の例外処理でキャッチできるエラーです。

オプションを指定した例

次に、:noopオプションを指定したrmメソッドの例を紹介します。

require 'fileutils'
fname = "tmp.txt"
rm_mode = true
begin
  FileUtils.rm(fname, :noop => rm_mode )
  puts "#{fname}を削除しました"
rescue
  puts "#{fname}を削除できません"
end

上の例は、先ほど紹介した例に、「:noop => rm_mode」を追加し、「rm_mode = true」により、rmメソッドのオプションの:noopにtrueを指定することで、実際にはファイルを削除しないでプログラムを実行しています。そして、この例では、「rm_mode = false」と書き直すことでファイル削除を実行します。

:forceオプションに注意

先ほどrmメソッドで:forceオプションを使うとエラーを無視できると紹介しましたが、このオプションはrmコマンドの-fオプションとは違います。Rubyをエラーで止めないだけで、消せないファイルを強制的に削除する機能ではありません。

rmメソッドのエラーを無視するのではなく、エラーが発生した場合は例外処理で適切に処理するプログラムを作成してください。

まとめ


これまで紹介したようにFileUtilsモジュールのrmメソッドを利用することで、Rubyのプログラムの中でファイルを削除する処理を作れます。そしてrmメソッドではオプションを使えば、実際にファイルを削除しない、といったテスト実行も可能です。

さらにFileUtilsモジュールには他にもファイルやディレクトリを削除するメソッドがあるので、必要に応じて利用してください。

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

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

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

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

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

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

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

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

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

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

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