個人的に好きなRubyのファイル操作

最近Rubyで簡単なスクリプトを書くことが多かったのですが、Rubyでファイル操作系の処理をすると、その快適さに改めて気づかされます。

個人的に好きなのはFile::openメソッドにブロックを渡すと処理終了時に勝手にcloseしてくれる部分。Javaだと7でtry-with-resourceという機能が加わりようやく同じことをできるようになりましたが、Rubyではずいぶん前からあったような。

File::open("hoge.txt") do |f|
  f.each { |line| puts line }
end

#getsバージョン
File::open("hoge.txt") do |f|
  while line = f.gets
    puts line
  end
end

あと個人的には一時ファイルを作成する機能も好きです。(というか、使いどころを間違えなければかなり便利。)

require 'tempfile'

# 第2引数は一時ファイルを作成するディレクトリパス
temp = Tempfile::new("mytemp.txt", "./")

#とりあえず10回ループして数字を一時ファイルに書き込む
10.times do |i|
  s = "Number.#{i}"
  temp.puts(s)
end
#いったんクローズして再オープン
temp.close
temp.open
#一時ファイルの内容を出力
temp.each { |line| puts line}

#closeメソッドの引数にtrueを渡すと、ファイルクローズと同時に一時ファイルを削除
temp.close(true)

たったこれだけです。特にcloseメソッドにtrueを渡すだけでファイルのクローズと一時ファイルの削除までしてくれるので楽。

Tempfileクラスを利用するときは必ずrequire "temple"を記述する必要があります。

ちなみに一時ファイルはGC時、およびプログラム終了時にも削除されるようです。終了時に削除されるのはいいですが、GC時にも削除されるようなので利用する際はその考慮が必要です。