スキップしてメイン コンテンツに移動

Rubyでファイル操作を極める

Rubyでファイル操作を極める

Ruby実践でファイル操作を始める

Rubyでファイルを扱う際の基本は、File.openメソッドを使ってファイルを開き、readwriteで入出力を行うことです。ファイルを開くときは、モードを明示的に指定し、操作が終わったら必ずcloseで閉じるようにしましょう。以下は、テキストファイルを読み込む最小例です。

file = File.open('sample.txt', 'r')
content = file.read
puts content
file.close

このコードは、sample.txtを読み取り専用で開き、内容を文字列として取得し、コンソールに出力します。最後にcloseでファイルハンドルを解放しています。

File.openで読み書き

書き込みモードは'w'(上書き)や'a'(追記)を使います。以下は、追記モードでログファイルにメッセージを書き込む例です。

File.open('log.txt', 'a') do |f|
  f.write("[#{Time.now}] アプリケーション起動\n")
end

ブロック形式を使うと、ブロックが終了した時点で自動的にcloseが呼ばれるため、リソースリークを防げます。File.openの第2引数に'r+'を渡すと読み書き両方が可能です。

FileUtilsでディレクトリ操作

ファイルだけでなくディレクトリの作成・削除・コピーも頻繁に行います。Ruby標準ライブラリのFileUtilsモジュールを使うと、簡潔に操作できます。

require 'fileutils'

# ディレクトリ作成
FileUtils.mkdir_p('data/output')

# ファイルコピー
FileUtils.cp('data/input.txt', 'data/output/input_copy.txt')

# ディレクトリ削除
FileUtils.rm_rf('data/output')

mkdir_pは途中のディレクトリが存在しない場合に自動で作成します。rm_rfは再帰的に削除するので注意が必要です。

存在確認と入出力のベストプラクティス

ファイルやディレクトリを操作する前に、File.exist?Dir.exist?で存在確認を行うと、エラーを未然に防げます。

if File.exist?('config.yml')
  puts '設定ファイルが見つかりました。'
else
  puts '設定ファイルがありません。デフォルトを使用します。'
end

また、File.readFile.writeは一括で読み書きできる便利メソッドです。大量データを扱う場合は、IO.foreachIO.copy_streamを検討するとメモリ効率が向上します。

最後に、Ruby 3.0以降ではFile.openのブロック形式が推奨され、例外が発生しても自動的にcloseされるため、リソースリークのリスクが低減します。ファイル操作を行う際は、常に例外処理とリソース管理を意識しましょう。

この記事はAIによって作成されました。

コメント