RubyでCSVファイルを操作する方法を現役エンジニアが解説【初心者向け】

初心者向けにRubyでCSVファイルを操作する方法について現役エンジニアが解説しています。CSVファイルとは何かの文字や空白で区切られてた文字列のファイルのことです。カンマ,が良く使われます。RubyではあらかじめCSV形式のファイルを読み込むメソッドなどが用意されています。

TechAcademyマガジンはオンラインのプログラミングスクールTechAcademy [テックアカデミー]が運営する教育×テクノロジーのWebメディアです。初心者でもすぐ勉強できる記事が2,000以上あります。

RubyでCSVファイルを操作する方法について解説します。

Rubyについてそもそもよく分からないという方は、Rubyとは何なのか解説した記事をまずご覧ください。

 

なお本記事は、TechAcademyのWebアプリケーションオンラインブートキャンプの内容をもとに紹介しています。

田島悠介

今回は、Rubyに関する内容だね!

大石ゆかり

どういう内容でしょうか?

田島悠介

RubyでCSVファイルを操作する方法について詳しく説明していくね!

大石ゆかり

お願いします!

 

CSVファイルとは

CSVファイルとは、カンマ「,」で区切られたテキストファイルのことを指します。

sample.csvなどのファイル名で保存されており、以下のような形式で書かれます。

分類,名前,値段,
野菜,トマト,100,
野菜,レタス,250,
果物,りんご,200,
飲料,コーヒー,120,

 

RubyのCSVクラスとは

Rubyには、CSVファイルを扱うためにCSVクラスが用意されています。これを使用することで、CSVファイルを読み込んだり、書き出したりすることができます。

 

[PR] Rubyのプログラミングで挫折しない学習方法を動画で公開中

CSVファイルを操作するための主なメソッド

CSVを読み込むメソッドとして、一度で読み込む「read」と1行づつ読み込む「foreach」があります。どちらもCSVファイルの存在するパスを引数にとります。

CSVを書き出すメソッドには、「open」があり、csvファイルに追記したり、新しく作成することができます。

 

実際に書いてみよう

では、実際に書いてみましょう。まず、下準備にsample.csvファイルを作成して、以下のCSVをコピーしてして貼り付けてみてください。

分類,名前,値段,
野菜,トマト,100,
野菜,レタス,250,
果物,りんご,200,
飲料,コーヒー,120,

そして、同じディレクトリに今回使用するmain.rbを作成してください。以下のような構成になるはずです。

-main.rb
-sample.csv

 

それでは読み込みからやります。

require 'csv'
# sample.csvを読み込む
csv_data = CSV.read("sample.csv")
# 返り値は2次元の配列になるので、以下のようにアクセスできる
puts csv_data[0][0] # => 分類
puts csv_data[1][1] # => トマト

# headersをtrueにすると、1行目の値をindexの代わりに割り当てられる
csv_data_with_header = CSV.read("sample.csv", headers: true)
puts csv_data_with_header["分類"].join(",")
puts csv_data_with_header["名前"][3] # => コーヒー

# foreachでcsvファイルを1行づつ読み込める
CSV.foreach("sample.csv") do |row|
    puts row.join(",")
end

 

実行結果は、以下の通りです。

 

分類
トマト
野菜,野菜,果物,飲料
コーヒー
分類,名前,値段
野菜,トマト,100
野菜,レタス,250
果物,りんご,200
飲料,コーヒー,120

 

次に書き込みです。

# openで"w"を引数にすることで書き込みモードでCSVを開く
CSV.open("sample2.csv","w")do |csv|
    csv << ["分類","名前","値段"]
    csv << ["肉", "牛ひき肉","500"]
end

 

sample2.csvが作成できていれば、成功です。

以上で、解説を終わります。csvはよく使うので、ぜひマスターしましょう。

 

筆者プロフィール

メンター金成さん

フリーランスエンジニア。
Railsの案件を中心に、様々なアプリケーションを開発してます。

使える言語は、ruby python go 。最近はgoにハマってます。

 

大石ゆかり

内容分かりやすくて良かったです!

田島悠介

ゆかりちゃんも分からないことがあったら質問してね!

大石ゆかり

分かりました。ありがとうございます!

TechAcademyでは初心者でも最短4週間でエンジニアになれるRuby on Railsオンラインブートキャンプを開催しています。

現役エンジニアがパーソナルメンターとして受講生に1人ずつつき、マンツーマンのメンタリングで学習をサポートし、最短4週間でオリジナルWebサービスを開発することが可能です。

また、現役エンジニアから学べる無料のプログラミング体験会も実施しているので、ぜひ参加してみてください。