Webサイト制作コースのお申し込みはこちら Webサイト制作コースのお申し込みはこちら

あるシステムから別のシステムへデータを送ることはよくあります。同じサーバー内にあれば問題ないのですが、別のサーバーや異なる会社間であれば大変です。

開発言語やフレームワーク、データベース製品が異なることもあれば、OSからちがうことは普通にあります。しかしどんな開発言語、フレームワーク、OSであれ、物理ファイルくらいは操作できますので、システム間でデータを受け渡しするときはこれを使わない手はありません。

また物理ファイルに書く内容も、お互いでルール決めをしておくと大変使いやすく便利です。

本記事では、システム間連携において非常によく使われるCSVについて解説します。

CSVとは何か?

CSVとは、データをカンマ区切りにして、ファイルに保存したものです。

CSVの正式名称はComma Separated Valueの略ですので、名前からもカンマ区切りであることがもうかがえます。

CSVはRubyに限らず、一般的によく使われているファイル形式です。

ExcelでもCSV形式で保存することができますし、家計簿ソフトや年賀状ソフトにおけるデータのインポート・エクスポートでもCSVはよく使われています。

何らかのWebサービスにおいても「CSVで出力」というボタンがついているのを見かけます。

カード会社のサービスにて、利用情報をExcelに取り込むときに使えます。

「・・・そういえば何か見たことがあるような気が?」と思われた方も多いことでしょう。

CSVの具体的な内容

イメージしやすいように、Rubyでのあつかいを解説する前に、Excelだけで解説を完結してみます。

まずはExcelの表形式で、生徒の点数表を例にして解説します。

以下のようなデータがあったとしましょう。ファイル名を「点数表.xlsx」とします。

「ファイル」「名前を付けて保存」を選択し、保存ダイアログを開きます。ここでファイル形式を「CSV(コンマ区切り)(.csv)」してください。

エラーダイアログが開いたりいろいろしますが、気にせず保存です。

ファイル名を指定しないかぎり、Excelのファイル名+.csvでファイルができます。

メモ帳やNotepad、お好みのテキストエディタでそのファイルを開いてください。

生徒番号,名前,国語,算数,理科,社会
1,生徒 太郎,65,70,80,50
2,生徒 花子,80,90,100,95
3,生徒 二郎,45,55,65,35
4,生徒 美香,100,100,100,100

いかがでしょうか?CSVという名前どおり、カンマ区切りでファイルが保存されたのが分かりましたね。

実際のシステム間連携では、1つめのデータが何で、2つめが何で・・・と事前に合意をとるので、通常は一番上の項目名はCSVファイルに出力しません。

CSVファイルから読み込む(パース)

CSVファイルからデータを読み込みましょう。全行を一度に読み込み方法と、1行づつ読み込む方法があります。

全行を一度に読み込む

上記で使用した点数表.csvを使います。

データを読み込んでカンマごとでデータを取り出して・・・という解析をパースといいます。

ではCSVをパースしてみます。

require "csv"

score_list = CSV.read("点数表.csv")

p score_list

[実行結果]

[["生徒番号", "名前", "国語", "算数", "理科", "社会"], 
["1", "生徒 太郎", "65", "70", "80", "50"], 
["2", "生徒 花子", "80", "90", "100", "95"], 
["3", "生徒 二郎", "45", "55", "65", "35"], 
["4", "生徒 美香", "100", "100", "100", "100"]]

1行1行が配列になっているのが分かります。もちろん要素番号を指定することも可能です。

require "csv"

score_list = CSV.read("点数表.csv")

p score_list[1]

[実行結果]

["1", "生徒 太郎", "65", "70", "80", "50"]

配列の要素番号は0からです。1を指定すれば2行目を指定することになるので注意してください。

1行づつ読み込む

今度は1行づつ読み込む方法です。

require "csv"
 
CSV.foreach("点数表.csv") do |row|
    p row
end

[実行結果]

["生徒番号", "名前", "国語", "算数", "理科", "社会"]
["1", "生徒 太郎", "65", "70", "80", "50"]
["2", "生徒 花子", "80", "90", "100", "95"]
["3", "生徒 二郎", "45", "55", "65", "35"]
["4", "生徒 美香", "100", "100", "100", "100"]

同じ結果が得られました。

1行づつ何かの処理をしたいときには便利ですね。

注意:

環境によってはExcelからShift_JIS形式でファイル出力されてしまい、Rubyで読み込み時にエラーが発生します。その場合はお手持ちのエディターでエンコードをUTF-8に変換してください。

CSVファイルを書き出す

先ほどとは逆に、CSVファイルを書き出す方法を解説します。

require "csv"

CSV.open("点数表2.csv", "w") do |test|
	test << ["1", "生徒 太郎", "65", "70", "80", "50"]
	test << ["2", "生徒 花子", "80", "90", "100", "95"]
	test << ["3", "生徒 二郎", "45", "55", "65", "35"]
	test << ["4", "生徒 美香", "100", "100", "100", "100"]
end

先ほど出た結果をそのまま、点数表2.csvという名前で書き出してみました。

CSVクラスのopenメソッドに、第一引数にファイル名、第二引数にモードを指定して書き込むことができました。

まとめ

本記事ではCSVファイルとは何か、その基本的なあつかい方を解説しました。

CSVライブラリにはもっとたくさんの機能があります。詳しくはこちらをご覧いただき、CSVの効率的なあつかい方を探してみてくださいね!

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

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

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

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

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

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

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

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

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

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

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