🕌
RubyスクリプトでCSVからYAMLファイルにデータを書き出す
プロダクトオーナーから共有された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