記事内にはプロモーションが含まれています

【Ruby】ファイルを読み込む方法!一括・1行ずつ・配列化まで徹底解説

【Ruby】ファイルを読み込む方法!一括・1行ずつ・配列化まで徹底解説 Ruby

Rubyでツールやアプリケーションを開発していると、ログファイルの中身を調べたり、CSVデータを読み込んで集計したりといった「ファイル操作」を行う場面が訪れることがあります。

Rubyにはファイルを扱うための標準クラス File が用意されており、非常に直感的に記述できるのが特徴です。

しかし、一言で「読み込み」と言っても、「ファイルの中身を全部まとめて取得したい」「1行ずつ順番に処理したい」「配列として扱いたい」など、やりたいことによって使うべきメソッドは異なります。

適切なメソッドを選ばないと、巨大なファイルを読み込んだ際にメモリ不足でプログラムが停止してしまうリスクもあります。

この記事では、Rubyにおけるファイル読み込みの主要なパターンについて、基本の一括取得から、安全な行単位の処理、そして書き込み方法まで、現場で使えるコード例とともに詳しく解説します。

【本記事の信頼性】
プロフィール
執筆者:マヒロ
  • 執筆者は元エンジニア
  • SES⇒大手の社内SE⇒独立
  • 現在はプログラミングスクールを運営
  • モットーは「利他の精神」
💻 本記事の検証環境(2026年2月確認)
  • OS:Windows 11 / macOS Sequoia
  • IDE:Visual Studio / VS Code / IntelliJ IDEA
  • その他:Chrome DevTools / 各言語最新安定版

※本メディアでは、上記環境にてコードの動作と情報の正確性を検証済みです。

ファイルの中身を「一括」で読み込む File.read

テキストファイルの内容を、ひとつの長い文字列としてまとめて取得したい場合は、File.read メソッドを使用するのが最も簡単です。

設定ファイルや、それほど大きくないテキストデータを扱う場合に適しています。

基本的な使い方

# 読み込むファイル (sample.txt) があると仮定します
# 中身:
# Hello
# Ruby
# World

# ファイルパスを指定して読み込む
content = File.read("sample.txt")

puts content

実行結果

Hello
Ruby
World

File.read("ファイルパス") と記述するだけで、ファイルの中身をすべて読み込み、文字列(String)として返します。

ファイルを開いて(open)、読み込んで(read)、閉じる(close)という一連の処理をこのメソッド一つで自動的に行ってくれるため、非常にコードがシンプルになります。

ただし、数GBもあるような巨大なファイルを読み込むと、メモリを一気に消費してしまうため注意が必要です。

ファイルを「配列」として読み込む File.readlines

ファイルの中身を、1行ごとに分割された「配列(Array)」として取得したい場合は、File.readlines メソッドを使用します。

行ごとにデータが分かれている場合や、インデックスを指定して特定の行だけ取り出したい場合に便利です。

配列として取得するコード

# 配列として一括読み込み
lines = File.readlines("sample.txt")

p lines
puts "---"
puts "1行目: #{lines[0]}"

実行結果

["Hello\n", "Ruby\n", "World\n"]
---
1行目: Hello

File.readlines は、ファイルの各行を要素とする配列を返します。

注意点として、各要素の末尾には改行コード(\nが含まれたままになっています。
もし改行コードが不要な場合は、chomp オプションを指定するか、取得後に map(&:chomp) などで削除する処理が必要です。

# chomp: true オプションで改行コードを削除して読み込む
lines = File.readlines("sample.txt", chomp: true)
p lines
# => ["Hello", "Ruby", "World"]

メモリに優しく「1行ずつ」処理する File.foreach

ログファイルのような巨大なデータを扱う場合、一括で読み込むとメモリがパンクしてしまいます。

そんな時は、File.foreach を使って、1行読み込んでは処理し、メモリから破棄するというストリーム処理を行います。

1行ずつ順番に処理する

# 1行ずつ読み込んでブロック内で処理する
File.foreach("sample.txt") do |line|
  # line には1行分の文字列が入る
  puts "読み込み中: #{line.chomp}"
end

実行結果

読み込み中: Hello
読み込み中: Ruby
読み込み中: World

File.foreach はファイルを一行ずつ読み込み、その都度ブロック(do ... end)内の処理を実行します。

一度にファイル全体をメモリに展開しないため、何百万行もあるような巨大なファイルでも、少ないメモリ消費量で安定して処理することができます。

実務でのデータ処理バッチなどでは、この方法が最も推奨されます。

File.open を使った基本的な読み込み

ここまで紹介した便利メソッド(read, readlines, foreach)は、内部的に File.open を使用しています。

より細かい制御をしたい場合や、読み込みと書き込みを同時に行いたい場合などは、基本となる File.open を使います。

ブロックを使った安全なファイル操作

# ブロックを使うことで、処理終了後に自動でcloseされる
File.open("sample.txt", "r") do |file|
  # ファイルオブジェクトから読み込む
  file.each_line do |line|
    puts line.chomp
  end
end

File.open("ファイル名", "モード") でファイルを開きます。

モードの "r" は「読み込み専用(Read)」を意味します。

ブロック do |file| ... end を使うことで、ブロックを抜けたタイミングで自動的に file.close が実行されます。

open して close を忘れると、ファイルを開きっぱなしにしてしまいエラーの原因になるため、基本的にはこのブロック記法を使います。

【応用】ファイルへの「書き込み」方法(File.write)

読み込みとセットで覚えておきたいのが、ファイルへの書き込みです。
簡単な書き込みであれば、File.write メソッドが便利です。

テキストファイルを作成・上書きする

text = "新しい内容です。\n上書きされます。"

# ファイルに書き込む(存在しない場合は作成、ある場合は上書き)
File.write("output.txt", text)

# 追記したい場合(モードを 'a' (append) にする)
File.write("output.txt", "\n追記しました。", mode: "a")

File.write は、指定したファイルに文字列を書き込みます。
デフォルトでは上書きとなり、元の内容は消えてしまうので注意してください。

既存のファイルの内容を残したまま、末尾に追加したい場合は、オプションで mode: "a"(追記モード)を指定します。

ファイルが存在しない場合のエラー処理

指定したファイルが見つからない場合、プログラムは Errno::ENOENT という例外を発生させて停止します。

予期せぬ停止を防ぐために、事前にファイルの存在チェックを行うか、例外処理を組み込むのが良いでしょう。

File.exist? で存在確認をする

file_path = "nothing.txt"

if File.exist?(file_path)
  puts File.read(file_path)
else
  puts "エラー: ファイルが見つかりません。"
end

File.exist?("パス") メソッドは、ファイルが存在すれば true、なければ false を返します。
読み込み処理を行う前にこのチェックを入れることで、安全にプログラムを動かすことができます。

Rubyのスキルを活かして年収を上げる方法

以上、Rubyでファイルを読み込む方法について解説してきました。

なお、Rubyのスキルがある場合には、「転職して年収をアップさせる」「副業で稼ぐ」といった方法を検討するのがおすすめです。

Rubyエンジニアの年収や単価は高い傾向にあるため、転職によって数十万円の年収アップはザラで、100万円以上年収が上がることも珍しくありません。

なお、転職によって年収を上げたい場合は、エンジニア専門の転職エージェントサービスを利用するのが最適です。
今すぐ転職する気がなくとも、とりあえず転職エージェントに無料登録しておくだけで、スカウトが届いたり、思わぬ好待遇の求人情報が送られてきたりするというメリットがあります。
併せて、副業案件を獲得できるエージェントにも登録しておくと、空いている時間を活かして稼げるようなRubyの案件を探しやすくなります。

転職エージェントも副業エージェントも、登録・利用は完全無料なので、どんな求人や副業案件があるのか気になる方は、気軽に利用してみるとよいでしょう。
エンジニアのキャリア・スキルアップ相談窓口
当ブログの読者に選ばれている、実績豊富な転職エージェントを厳選しました。
【転職】年収・環境を改善したい
年収アップにこだわりたい方 (平均アップ額138万円の実績)
未経験・経験者問わず幅広く探したい方
業界に精通した担当者に相談したい方
ゲーム業界への転職を志望する方
エンジニア未経験からキャリアを築く方
【独立】フリーランスとして稼ぎたい
国内最大級のフリーランス案件数から比較したい方
週1〜3日など柔軟な働き方を希望する方
【学習】スキルに不安のある方向け(格安スクール「デイトラ」)