プロダクトオーナーから共有された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行目をヘッダーとして扱うためのオプションです。
その他に指定できるオプションは、こちらのドキュメントにまとまっています。
Fileクラスの open メソッド
第1引数に書き込むファイルのパスを、第2引数にモードを指定します。指定できるモードとその機能は次のとおり。
モード | 説明 |
r | ファイルを読み取り専用で開く |
w | ファイルを書き込みモードで開く。書き込む内容でファイルは上書きされる |
a | ファイルを書き込みモードで開く。書き込む内容はファイルの末尾に追加される |
詳細はこのドキュメントにまとまっています。
YAMLクラスの dump メソッド
第1引数にYAML形式に変換したいオブジェクトを、第2引数に出力先を指定します(今回はファイル)なお、第2引数を指定しない場合は、YAML形式に変換した文字列を返してくれます。
このドキュメントを参考にしました。
まとめ
CSVクラスのread
メソッド、Fileクラスのopen
メソッド、YAMLクラスのdump
メソッドを組み合わせることで、CSVファイルの読み込み〜YAMLファイルへの書き込みまで実現できることを学びました。
コメント