Rubyでファイルの操作をしてみよう①


Rubyでファイルの操作をしてみよう①

RubyはWebアプリケーションを作る以外にも、様々な用途で使用されています。その中でも使用頻度が高いのが、「ファイルの操作」です。

今回はRubyを使って、ファイルの読み込み・書き込みなど基本操作について解説していきます。

目次
  1. 準備編
  2. ファイル操作用のRubyファイルを作成しよう
  3. 空のテキストファイルを作成しよう
  4. Rubyでファイルの書き込みをしてみよう(基礎編)
  5. Rubyでファイルの書き込みをしてみよう(応用編①)
  6. Rubyでファイルの書き込みをしてみよう(応用編②)
  7. Rubyでファイルの内容を読み込もう(基礎編)
  8. Rubyでファイルの内容を読み込もう(応用編)
  9. まとめ

準備編

本記事では、テキストファイルの操作について解説していきます。ファイルの種類がCSVやJSONなどになったとしても、以降で紹介する考え方は応用できるので、しっかりと基本操作を理解していきましょう。

ファイル操作用のRubyファイルを作成しよう

テキストファイルを操作するRubyのファイルを作成していきます。ターミナルで下記コマンドを実行してください。

$mkdir file_practice
$cd file_practice/
$touch file_write.rb
$ls

//実行結果
file_write.rb

ここまででファイル操作用のコードを書くファイルが完成しました。Visual studio code(以降VScodeと呼ぶ)など、お使いのコードエディタで「file_practice」ディレクトリを開いてください。

次章から先程作成した「file_read.rb」にコードを書いていきます。

空のテキストファイルを作成しよう

次にターミナル(コマンドプロンプト)を使い、サンプル用のテキストファイルを作ってください。ファイルの作成場所は「file_practice」ディレクトリの直下にしましょう。

下記コマンドの「touch」は、Linuxで用意されているファイルを作成するコマンドです。(「$」は入力不要です。)

$cd
$cd file_practice
$touch sample.txt

またRubyがインストールされているか、下記コマンドを実行して確認してください。バージョンが表示されれていればOKです。

$ruby -v

//実行結果
ruby 2.6.5p114 (2019-10-01 revision 67812) [x86_64-darwin19]

Rubyでファイルの書き込みをしてみよう(基礎編)

本章では、特定のテキストファイルに書き込みを行う方法について解説していきます。まずは、コードエディタで「file_write.rb」を開き、下記コードを貼り付けてください。

File.open('sample.txt', 'w') do |f|
  f.puts('ファイルを書き込む練習です。')
end

コードを貼り付けられたら、ターミナルで下記コマンドを実行してください。注意点としては、必ず「file_practice」ディレクトリに移動した状態でおこないましょう。

ruby file_write.rb

これで、「file_write.rb」ファイルの内容が実行されて、「sample.txt」に文章が書き込まれたはずです。「sample.txt」を開き、「ファイルを書き込む練習です。」が入力されていることを確認してください。

「file_wtite.rb」で使用した「File」は自分で定義していないにも関わらず、問題なく使用できています。このように読み込みや定義無しでしようできる物が『組み込みライブラリ』です。

次は先程書き込んだ文章の下に、別の文章を書き込んでみましょう。そのためには「file_write.rb」の内容を変える必要があります。

次のコードを「file_write.rb」に貼り付けてください。

File.open('sample.txt', 'a') do |f|
  f.puts('これは追記した文章です。')
end

「a」というオプションは、「追記で書き込みをおこなう」という意味です。これで最初に書き込んだ文章が上書きせずに残せます。

Rubyでファイルの書き込みをしてみよう(応用編①)

本章ではもう少し複雑なファイルの書き込みを行ってみましょう。冒頭で作成した「file_practice」ディレクトリ配下に、「file_write2.rb」と「sample2.txt」いうファイルを作成しましょう。

ファイルを作成できたら、「file_write2.rb」ファイルに下記コードを貼り付けてください。今回はmembersという配列の中から、1つずつ要素を取り出し、その要素をテキストファイルに書き込むというものです。

members = ["山下", "大野", "古川", "本田"]

File.open("sample2.txt", "w") do |f|
    members.each do |member|
        f.puts("初めまして!#{member}さん。")
    end
end

「sample2.txt」を開き、下記のように文章が書き込まれたか確認してみましょう。

初めまして!山下さん。
初めまして!大野さん。
初めまして!古川さん。
初めまして!本田さん。

Rubyでファイルの書き込みをしてみよう(応用編②)

次はハッシュに格納されたデータを取り出して、ファイルに書き込む方法について解説していきます。「file_practice」ディレクトリに、「sample3.txt」と「file_write.rb」を作成しましょう。

ファイルを作成できたら、「file_write.rb」ファイルを開き、下記コードを貼り付けてください。

taro = { name: 'Taro', age: 23, country: 'Japan' }

File.open('sample3.txt', 'w') do |f|
  taro.keys.each do |key|
    f.puts("#{key}は#{taro[key]}です。")
  end
end

コードを貼り付けられたら、ターミナルで下記コマンドを実行して結果を確認してみましょう。

ruby file_write3.rb 

//実行結果
nameはTaroです。
ageは23です。
countryはJapanです。

ここまで解説してきたように、Rubyでファイルを書き込む場合、データは配列やハッシュで格納されている場合が多いです。この機会に、配列やハッシュから要素を取り出す「each」や「keys」などのメソッドについて理解しておきましょう。

Rubyでファイルの内容を読み込もう(基礎編)

本章では、ファイルの読み込みについて解説していきます。まずは「file_practice」ディレクトリ配下に「file_read.rb」と「sample4.txt」を作成してみましょう。

ファイルを作成できたら、「file_read.rb」を開き、下記コードを貼り付けてください。

File.open('sample4.txt', 'r') do |f|
  f.each_line do |row|
    puts row
  end
end

次に「sample.txt」ファイルに下記文章を貼り付けましょう。貼り付ける文章には、空白が含まれますが、ひとまずこのまま進めていきます。

        名前:Mike,年齢:23,身長:180
                名前:Josh,年齢:18,身長:186
 名前:Yuki,年齢:25,身長:160
         名前:Amanda,年齢:24,身長:165 

ここまで完了した段階で、下記コマンドをターミナルで実行して結果を確認してみましょう。

ruby file_read.rb 

//実行結果
    名前:Mike,年齢:23,身長:180
        名前:Josh,年齢:18,身長:186
 名前:Yuki,年齢:25,身長:160
         名前:Amanda,年齢:24,身長:165

現状、出力結果に無駄な空白が含まれてしまっているのが分かるかと思います。「file_read.rb」のコードを下記のように修正してみましょう。

File.open('sample4.txt', 'r') do |f|
  f.each_line do |row|
    puts row.strip
  end
end

コードを修正できたら、再度ターミナルで実行してみましょう。

ruby file_read.rb 

//実行結果
名前:Mike,年齢:23,身長:180
名前:Josh,年齢:18,身長:186
名前:Yuki,年齢:25,身長:160
名前:Amanda,年齢:24,身長:165

「strip」メソッドを使うことで、元データに含まれる空白を削除できました。Rubyでファイルの操作をする場合、データには無駄な空白が含まれたりするので、事前に排除しておきましょう。

Rubyでファイルの内容を読み込もう(応用編)

次はもう少し応用的なファイル操作をおこないます。まずは「file_practice」ディレクトリに「sample5.txt」と「file_read2.rb」ファイルを作成してください。

作成できたら、下記コードを貼り付けてみましょう。

[sample.txt]

唐揚げ弁当,200
焼肉弁当,800
ハンバーグ弁当,750
のり弁当,350
シャケ弁当,400

[file_read2.rb]

File.open('sample5.txt', 'r') do |f|
  f.each_line do |row|
    row_string = row.strip.split(',')
    name = row_string[0]
    price = row_string[1].to_i

    price *= 0.8 if name == '焼肉弁当'

    puts "#{name}は#{price.floor}円です。"
  end
end

コードの内容は、「焼肉弁当」であれば2割引き、それ以外はもとの価格を表示するというものです。

ターミナルで下記コマンドを実行して、結果を確認してください。

ruby file_read2.rb 

//実行結果
唐揚げ弁当は200円です。
焼肉弁当は640円です。
ハンバーグ弁当は750円です。
のり弁当は350円です。
シャケ弁当は400円です。

Rubyでのサービス開発スキルが身に付く

CodeCampの無料体験はこちら

まとめ

Rubyを使ったファイル操作について解説しました。ファイルの操作を上手く使えば、普段の業務を効率化できます。ぜひご自身でも、実際にコードを書いて実践してみてはいかがでしょうか?


関連記事

ヤマモト
この記事を書いた人
ヤマモト
\ 無料体験開催中!/自分のペースで確実に習得!
オンライン・プログラミングレッスンNo.1のCodeCamp