🕌

RubyスクリプトでCSVからYAMLファイルにデータを書き出す

2024/07/15に公開

プロダクトオーナーから共有されたCSVファイルをseedデータとして投入するために、YAMLファイルへデータを記述する必要がありました。

手作業で1つずつコピペするのは面倒なので、CSVファイルを読み込んでYAMLファイルへ書き出すためのカンタンなRubyスクリプトを書きました。

似たようなケースで使えるように、備忘録としてまとめます。

RubyスクリプトでCSVからYAMLファイルにデータを書き出す

結論として、今回は以下のようなRubyスクリプトで書き出しました。

require 'csv'
require 'yaml'

csv_file_path = '読み込むCSVファイルのパス.csv'

csv_data = CSV.read(csv_file_path, headers: true)
keywords = csv_data.map(&:to_h)

File.open('書き出すYAMLファイルのパス.yml', 'w') do |file|
  YAML.dump(keywords, file)
end

自分がよく分からなかったところを中心に詳細を書きます。

CSVクラスのreadメソッド

第1引数に読み込むファイルのパスを、第2引数にオプションを指定します。

今回のheadersオプションはCSVファイルの1行目をヘッダーとして扱うためのオプションです。

その他に指定できるオプションは、Ruby 3.3 リファレンスマニュアルにまとまっています。

Fileクラスのopenメソッド

第1引数に書き込むファイルのパスを、第2引数にモードを指定します。

指定できるモードとその機能は次のとおり。

モード 説明
r ファイルを読み取り専用で開く
w ファイルを書き込みモードで開く。書き込む内容でファイルは上書きされる
a ファイルを書き込みモードで開く。書き込む内容はファイルの末尾に追加される

詳細はRuby 3.3 リファレンスマニュアルにまとまっています。

YAMLクラスの dump メソッド

第1引数にYAML形式に変換したいオブジェクトを、第2引数に出力先を指定します(今回はファイル)

なお、第2引数を指定しない場合は、YAML形式に変換した文字列を返してくれます。

まとめ

CSVクラスのreadメソッド、Fileクラスのopenメソッド、YAMLクラスのdumpメソッドを組み合わせることで、CSVファイルの読み込み〜YAMLファイルへの書き込みまで実現できることを学びました。

参考文献

Discussion