バナー画像

Rubyでファイルを読み込み処理を作るには、ファイルポインタの仕組みを理解してなければなりません。そしてRubyのFileオブジェクトがファイルポインタとして働き、さらにそのメソッドをファイルの読み込みに利用します。

さらに読み込みしたいファイルのフォーマットに合わせて便利がライブラリが用意されています。ぜひ、そのようなライブラリをうまく利用しましょう。今回は、Rubyのファイル読み込みプログラムの作り方を紹介します。

Rubyでファイルを読み込む


Rubyでは、標準で組み込まれているFileクラスを利用することで、ファイル読み込み処理を作ったりファイルに書き込む処理を作ることが可能です。まずはRubyでファイル読み込み処理の基本について解説します。

open処理とread処理が必要

プログラムの中でファイルを読み込む場合、まず対象のファイルを開く処理を実施し、続いてそのファイルの内容を読み込みます。

なおFileクラスにはファイルにアクセスするための多くのメソッドが用意されていますが、ファイルを開く処理がopenメソッドで、この処理によりファイルポインタにあたるオブジェクトが作られす。そしてファイルを読み込みする処理がopenメソッドで、先ほどのオブジェクトでreadメソッドなどを利用してファイルを読み込みます。

このようにファイルを読み込みには次の2つの処理が必要です。

ファイルポインタを使うには

先ほど、まずopenメソッドでファイルポインタに相当するオブジェクトを作成するを説明しましたが、プログラムからファイルにアクセスするにはファイルポインタを理解しなければなりません。

ファイルポインタとは、アクセスしたファイルのデータが格納されたアドレスを示すオブジェクトです。例えばopenメソッドで新規にファイルポインタが作られたら、そのファイルの先頭のアドレスを指しています。

そしてファイルからデータを読み込みするとそのアドレスに読み込んだデータのサイズに応じて加算されます。またファイルポインタを操作すれば、ファイルの先頭ではなく末尾からアクセスしたり、ファイルの途中からアクセスするプログラム作成も可能です。

ファイルポインタを操作するには

Rubyではファイルポインタもオブジェクトで、openメソッドで作られます。そしてopenメソッドのモードにより、ファイル先頭アドレスに設定したりファイルの末尾に設定することが可能です。

そしてopenメソッドで作られたオブジェクトのメソッドを利用してファイルを一括して読み込んだり、1行単位などで読み込めます。

またseekメソッドを使用すれば、ファイルポインタを指定したアドレスに移動させることが可能です。この機能を使ってファイル内の特定のデータのみ読み込み、処理に利用するプログラムも作れます。

Rubyのファイル読み込み方法


プログラムでファイルを読み込みしたらそれで終わりではありません。読み込んだデータから必要は情報を取り出して処理を利用します。そのためでRubyのプログラムからファイルを読み込む処理を作る場合、読み込んだデータからどうやって情報を取り出すかが重要です。

次からRubyのファイル読み込み方法について紹介します。

一括で読み込み処理する方法

もし読み込みするファイルが比較的小さい場合はファイルを一括して文字列として読み込み、その文字列を解析して利用するデータを抽出します。

例えばファイルに書かれた内容をそのままWebアプリケーションで表示する場合、一括して文字列として読み込み、そのまま表示するケースで利用可能です。

一括で読み込みする例

f = File.open("message.txt", "r")
message = f.read
f.close
puts message

1行単位で読み込む方法

設定ファイルなど、テキストファイルをRubyのプログラムで読み込んで利用する場合、一旦行単位で読み込み、そこから必要なデータを取り出す方法をよく利用します。

このように1行単位で読み込む際に使うメソッドがeach_lineです。each_lineメソッドではブロックを使用するので、ブロック内で文字列を解析し、抽出した情報を配列やハッシュに格納しておけばプログラム内で利用できます。

1行単位で読み込み、読み込んだ文字列を配列に格納する例

lines = []
File.open("sample.txt", "r") do |f|
  f.each_line do |l|
    lines.push(l)
  end
end
p lines

1行単位で配列に読み込む別の方法

先ほどeach_lineメソッドを使った1行単位でファイルを読み込む方法を紹介しましたが、Fileクラスのforeachメソッドでも1行単位で読み込むことも可能です。

ただし、先ほどのeach_lineメソッドやforeachメソッドを使うと改行コードを含む文字列として読み込んでしまいます。改行コードが不要な場合は対策が必要なので注意してください。

foreachメソッドを使って1行単位で読み込む例

lines = []
File.foreach("sample.txt") do |l|
  s = l.chomp
  lines.push(s)
end
p lines

上の例は、foreachメソッドで読み込んだ1行分の文字列に対して、chompを適用して改行コードを削除して配列に取り組んでいます。

特定フォーマットのファイル読み込み方法


Webアプリケーションでは、特定のフォーマットに従ったファイルがよく読み込みされます。そしてRubyにはそういったよく使われるフォーマットを読み込み用メソッドが用意されているので、ぜひ、活用してください。次から代表的なフォーマットの読み込み用メソッドを紹介します。

CSVファイルの読み込み方法

CSVファイルのCSVとは「Comma Separated Value」の略で、そのまま日本語にすると「コンマで区切った値」という意味です。

このCSVファイルは、テキストで書かれた値を「,(コンマ)」で区切っただけのシンプルなフォーマットで、メーカーの違う表計算ソフト間でデータをやり取りしたり、表計算ソフトのデータをWebアプリケーションに取り込むケースなどで使わます。

RubyでCSVファイルを扱うためのライブラリがCSVクラスです。なおこのCSVクラスにはCSVファイル読み込みメソッドが複数ありますが、その中のforeachメソッドを使った例が次のとおりです。

require "csv"

arr = []
CSV.foreach("data.csv") do |row|
  arr.push(row)
end
p arr

JSONファイルの読み込み方法

JSONファイルのJSONとは、「JavaScript Object Notation」の略で「JavaScriptのオブジェクト表記」という意味です。JavaScriptのオブジェクトをテキスト形式で記述できるフォーマットとして、Webブラウザの非同期通信などに使われることが多く、Webアプリケーションでもよく使われます。

そしてRubyにはJSONクラスが用意されているので、JSONファイルを利用する場合はこれを利用してください。なお、JSONクラスを利用する場合、ファイルポインタを使用します。Fileクラスを合わせてJSONファイル読み込みする例を次に紹介します。

require "json"

arr = []
File.open("data.json") do |json|
  hash = JSON.load(json)
  arr.push(hash)
end
p arr

YAMLファイルの読み込み方法

YAMLファイルとは、構造化データやオブジェクトをテキストで簡潔に記述できる新しいフォーマット形式です。スペースのみのインデントで階層構造を表現するシンプルさが特徴で、Ruby on Railsの設定ファイルにも使われています。ぜひ、Webアプリケーションでも利用してください。

RubyにはYAMLクラスが用意されているので、YAMLファイルの読み込みにはこれを利用してください。次にYAMLクラスを利用した例を紹介します。

require 'yaml'

arr = []
File.open("data.yml") do |yml|
  arr = YAML.load(yml)
end
p arr

まとめ


これまで紹介したようにファイルの読み込みにはファイルポインタを利用し、RubyではFileクラスのオブジェクトがこれにあたります。Rubyではこのオブジェクトを利用して一括で読み込む方法や1行毎に読む方法などのプログラムを作れます。

さらにRubyにはCSVやJSONなど、Webアプリケーションでよく使われるフォーマットに対応したクラスが用意されています。そのようなファイルの読み込み処理に利用してください。

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

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

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

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

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

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

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

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

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

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

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