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

Rubyをはじめとしたプログラム開発において、ファイル操作は頻出処理の1つです。

本記事では、Rubyのファイル操作における基本である「作成」「移動」「コピー」「削除」の方法について、サンプルコードを掲載しながらご紹介していきます。

前記事「【Ruby入門】入力と出力」では、標準入出力やファイルへの出力を解説しているので合わせてご覧ください。

この記事の結論
  • ファイルの作成には「File.open」を利用
  • ファイルの移動には「File.rename」を利用
  • ファイルのコピーには「FileUtils.cp」を利用
  • ファイルの削除には「FileUtils.rm」を利用
  • FileUtilsには他にも便利な機能がたくさん

ファイルの作成

ファイルの作成は、すでに前記事「【Ruby入門】入力と出力」で解説しましたので、おさらいにサラッと見てみましょう。

新規にファイルを作り、その中にabcdeという文字列を書き込みましょう。

File.open("sample1.txt", "w") do |io|
  io.puts "abcde"
end

sample1.txtというファイル名でファイルができ、中身はabcdeという文字列が書き込まれます。

Rubyでプログラミングしてみたいけれど「全くプログラミングの知識もないし不安だ」といった方は、「ポテパンキャンプ」での無料カウンセリングがおすすめです。

ファイルの移動

ファイルを移動してみましょう。

現在の場所から「back」というフォルダに移動してみます。

移動というよりは、Fileクラスのrenameメソッドを使い、移動先のパスを指定するというイメージです。

実際に試す前に、現在のフォルダの中にbackというフォルダを作っておいてください。

File.rename("sample1.txt","back/sample1.txt")

上記を実行後、backというフォルダにファイルが移動されているのがわかります。

実際に実行するときには、以下を守る必要がありますので注意してください。

例えば上記をsample.rbというファイル名で実行する場合です。

 

 

また、ライブラリfileutilsを使っても可能です。

require "fileutils"

FileUtils.mv("sample1.txt","back/sample1.txt")

いずれの方法も、同じファイル名で移動しましたが、移動と同時にファイル名を変えることも可能です。

require "fileutils"

FileUtils.mv("sample1.txt","back/sample1_1.txt")

こうすれば、移動と同時にファイル名がsample1_1.txtに変更されます。

もうちょっとアレンジして、日付を含んだファイル名でコピーしてみましょう。

require "fileutils"

t = Time.now
filename = "back/sample1_" + t.strftime("%Y%m%d") + ".txt"

FileUtils.cp("sample1.txt",filename)

これで、実行時が2017年11月29日ならば、backというフォルダに「sample1_20171129.txt」というファイル名で移動できます。
ファイル操作以外にもRuby言語を効率的に学べるスクールならこちら

ファイルのコピー

ファイルのコピーも、fileutilsを使います。

require "fileutils"

FileUtils.cp("sample1.txt","back/sample1.txt")

ここもちょっと工夫して、同じフォルダに2から10まで連番をつけてファイルをコピーしてみましょう。

require "fileutils"

(2..10).each do |i|
	FileUtils.cp("sample1.txt","sample" + i.to_s + ".txt")
end

sample2.txtからsample10.txtが作成されます。

特定のフォルダの中身をすべてコピー

今までの解説は、すべて1本のファイルばかりでした。では特定のフォルダ以下すべてを選択するにはどうすればよいでしょうか?

Dir.globを使うと、指定したフォルダ内のファイル名が、リスト形式で得られます。

以下を実行してみてください。

require "fileutils"

puts Dir.glob('*.*')

ソースファイルが存在しているフォルダのファイル名の一覧が表示されたはずです。

フォルダを指定したい場合は、Dir.chdirでカレントディレクトリを変更します。’フォルダ’は、お使いの環境に合わせて変更してください。

require "fileutils"

Dir.chdir 'フォルダ'
puts Dir.glob('*.*')

*.*で、ファイル名や拡張子ともにワイルドカードを指定していますので、指定したフォルダ以下すべてが対象となっています。

もちろん、ファイル名や拡張子を指定して、対象を絞ることも可能です。

早速、ソースファイルがあるフォルダ内部のファイルをすべてコピーしてみましょう。

require "fileutils"

Dir.glob('*.*').each do |filename|
	FileUtils.cp(filename, "back/" + filename)
end

フォルダ内部のファイルがすべて、同一フォルダ内のbackフォルダにコピーされます。

何も考えず、特定のフォルダから別のフォルダにコピーするだけなら、FileUtils.cp_rを使います。

require "fileutils"

FileUtils.cp_r(Dir.glob('*.*'), "back/")

これで、ソースファイルの直下のすべてが、backフォルダへとコピーされます。

またfileutilには、cp_rに限らず「_r」がついたコマンドがいくつかあります。これは再帰的という意味を持ちます。

フォルダの中身全部、という意味になります。

便利なので覚えておきましょう。
ファイル操作以外にもRuby言語を効率的に学べるスクールならこちら

ファイルの削除

削除もfileutilsのFileUtils.rmを使います。

まずは基本形です。

FileUtils.rm("sample1.txt")

フォルダ以下すべてを削除

ソースファイルの存在しているフォルダの中身を、すべて削除します。

require "fileutils"

Dir.glob('*.*').each do |filename|
	FileUtils.rm(filename)
end

上記をそのまま実行すると、ソースファイルのあるフォルダの中身、つまりソースファイルまで消えるのでご注意ください。

特知恵のフォルダを指定したい場合は、コピーの節で出てきた「Dir.chdir」をDir.globの前で実行してフォルダを変更してください。

Rubyでファイル操作以外のプログラミングもしてみたい、ただ「自分一人で何を開発したら良いのか分からない」といった方は、「ポテパンキャンプ」での無料カウンセリングがおすすめです。

まとめ

本記事では、Rubyでのファイル操作について、基本となるメソッドの使い方から少し応用編にまで触れてご紹介してきました。

今回ご紹介した内容はごく一部であり、FileUtilsを利用すればファイル操作に関するもっと複雑な処理も実現させることが可能です。

Rubyでのファイル操作の基本を抑えて、実現したい処理を効率的に実現出来るよう学習を進めていきましょう。
ファイル操作以外にもRuby言語を効率的に学べるスクールならこちら

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

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

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

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

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

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

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

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

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

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

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