Ruby で 複数ファイルを 結合する 処理

仕事をしていると、ヘッダーが同じ複数のファイルをまとめたいことってたまにあるんですが、その時の書き方をかんがえてみました。 バイナリベースで読み込みを行うので、基本的には、どんな文字コードのファイルでも大丈夫です。 僕はCSV や TSV をまとめる処理を行う際にこのメソッドを使っています。 注意点: ヘッダに改行コードが含まれている場合(そんな邪悪なファイルは触りたくない。。。)、このメソッドはうまく働かないです。

# @param [Array<String>] file_paths 配列でファイルパスを渡します.
# @param [Stiring] to_path 書き出す先のファイルパスを指定します.
def merge_files(file_paths, to_path)
  FileUtils.rm(to_path, force: true)
  file_paths.each_with_index do |file_path, file_i|
    open(file_path, 'rb').each_line.with_index do |row, row_i|
      next if file_i.nonzero? && row_i.zero?
      open(to_path, 'a') { |f| f << row }
    end
  end
end

参考 公式ドキュメント module function Kernel.#open