Rubyでファイル操作を極める
Ruby実践でファイル操作を始める
Rubyでファイルを扱う際の基本は、File.openメソッドを使ってファイルを開き、readやwriteで入出力を行うことです。ファイルを開くときは、モードを明示的に指定し、操作が終わったら必ず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.readやFile.writeは一括で読み書きできる便利メソッドです。大量データを扱う場合は、IO.foreachやIO.copy_streamを検討するとメモリ効率が向上します。
最後に、Ruby 3.0以降ではFile.openのブロック形式が推奨され、例外が発生しても自動的にcloseされるため、リソースリークのリスクが低減します。ファイル操作を行う際は、常に例外処理とリソース管理を意識しましょう。
コメント
コメントを投稿