RubyでCSV出力!エンコーディングの指定方法などを詳しく解説
  • facebookページ
  • twitterページ
  • 2020.12.18

    RubyでCSV出力!エンコーディングの指定方法などを詳しく解説

    システム開発において、CSVファイルの入出力をするシーンは多々あります。

    この記事では、RubyでCSVファイルを出力する方法を解説していきます。

    CSVとは?

    最初に、CSVとはどんなファイルなのかを説明しておきましょう。

    CSVは Comma Separated Valueの略で、その名の通り、項目をカンマで区切ったファイルです。データが複数ある場合は、改行して複数行に渡って記述します。

    以下は、実際のCSVのサンプルです。

    このように、CSVは表形式のデータを扱うことができ、項目(列)をカンマ区切り、レコード(行)を改行で区切ったシンプルなデータ形式のファイルです。

    Excelなどでも表形式のデータが扱えすが、プログラムから入出力する場合は、CSVのほうが簡単で汎用性も高いため、システム開発の現場ではCSVを入出力するプログラムをよく見かけます。

    RubyでCSVファイルを出力

    Rubyには、標準で「csvライブラリ」が用意されており、簡単なコードでCSVの入出力ができるようになっています。

    CSV出力時に、csvライブラリの openメソッドを使用し、引数にファイルの出力先と、出力モードを指定します。

    そして openメソッドで作成したCSV オブジェクトに対し、出力するデータを書き込みます。

    実行すると、次のようなCSVファイルが出力されます。

    ポテパンダの一言メモ

    csvライブラリを使用するための、先頭の require "csv"を忘れないようにしましょう。 requireの指定がないと、エラーになります。

    出力モードについて

    CSV.openメソッドの第2引数に指定する出力モードは、次のようなものが指定できます。

    w:ファイルを書き込みモードで開きます。ファイルがすでに存在していれば内容が置き換えられます。(上書き)

    a:ファイルを書き込みモードで開きます。ファイルがすでに存在していれば末尾に出力されます。(追記)

    wbw指定した時の動作に加え、改行コードの LFをそのまま LFとして書き込みます。

    ポテパンダの一言メモ

    出力モードに waを指定した時は、改行コードはプラットフォーム依存の改行コードで出力されます。(UNIX、Linuxであれば LF、Windowsであれば CR+LFとなる)

    エンコーディングを指定してCSVを出力

    CSVファイルを出力する時に文字エンコーディングを指定する場合は、次のように openメソッドの引数に指定します。

    エンコーディングの指定を省略した場合は、デフォルトの utf-8"が適用されます。

    BOM付きのUnicodeで出力する場合は、次のように記述します。

    `utf-8以外のエンコーディングも指定可能で、例えば shift-jisでCSVを出力する場合は、次のように指定します。

    内部と外部エンコーディングを両方指定する場合は、 <外部エンコーディング>:<内部エンコーディング>のように指定します。

    CSVに限らず、テキストファイルに出力する時には「文字化け」に注意が必要です。

    例えば、内部コードが utf-8なのに、 sjis:sjisのような指定をしてしまうと、文字化けが発生します。

    ファイルを出力するときは、内部コードと外部コードが想定通りか確認をするようにしましょう。

    変数にCSVを出力

    Rubyのcsvライブラリは、CSVをファイルだけでなく、変数に文字列と出力することも可能です。

    変数にCSVを出力するときは、csvライブラリの generateメソッドを使用します。

    ダブルクォーテーションで文字を囲う

    CSVでは数値以外の文字は、 "値1","値2"のようにダブルクォーテーションで囲むのが一般的です。

    Rubyでは、 :force_quotesオプションを指定することで、文字をダブルクォーテーションで囲むことができます。

    上のコードを実行すると、次のCSVファイルが出力されます。

    出力されたファイルを見ると、文字だけでなく数値の値までダブルクォーテーションで囲まれています。

    :force_quotesオプションは、数値と文字列すべてをダブルクォーテーションで囲むオプションのため、このような結果になります。

    しかし一般的なCSVは、数値はダブルクォーテーションで囲まないこと多いようです。

    文字のみダブルクォーテーションで囲む場合は、自前のコードで前後にダブルクォーテーションを付加して出力します。

    ダブルクォーテーションを指定した文字列をCSVライブラリに渡すと、そのままでは """値"""のような文字になってしまうため、 :quote_char => ''オプションを指定します。

    さいごに

    RubyでCSVファイルを出力する方法を解説してきました。

    Rubyでは、標準のcsvライブラリを使用するとこで、簡単コードがCSVファイルが出力できため、是非試してみましょう。

    【関連記事】
    【Rubyの基礎】配列の検索で使われるfindメソッドの使い方



    優良フリーランス案件多数掲載中!
    フリーランスエンジニアの案件をお探しなら
    ポテパンフリーランス

    この記事をシェア

    • Facebookシェア
    • Twitterシェア
    • Hatenaシェア
    • Lineシェア
    pickup









    ABOUT US

    ポテパンはエンジニアと企業の最適なマッチングを追求する企業です。

    READ MORE