ホーム DoRuby ruby on railsでデータをCSV形式で出力する。 to_csv Plugin編

ruby on railsでデータをCSV形式で出力する。 to_csv Plugin編

この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

こんにちは、KBMJの中平@railsエンジニアです。

今回は、ruby on railsでデータをCSVファイル出力が簡単にできる プラグインついて書きます。

前回、ruby on railsでデータをExcelファイルに出力する方法を書きましたが

ExcelファイルよりCSVファイルに出力する機会が多いだろうと思います。

また、railsでCSVファイルを出力するのは、さまざまな方法がありますが、

今回は設定も簡単で、コードの記述も比較的少なくてすむ to_csvというpluginの使い方について書こうと思います。

環境

OS : Windows Vista
Ruby : 1.8.6
ruby on rails : 2.1 (2系以上ならto_csvが使えると思います)

to_csvのインストール

ruby script/plugin install git://github.com/arydjmal/to_csv.git

fastercsvのインストール

to_csv はfastercsvが必要なため
gem install fastercsv

コントローラーのメソッドに以下のコードを記述

def index
    @users = User.all

    respond_to do |format|
            format.html
            format.xml { render :xml => @users }
            format.csv { send_data @users.to_csv }
    end
end

@users.to_csv で取得したデータをCSV形式にしています。
また README.rdocに書いているオプションを解説すると

 @users.to_csv  
 すべてのカラムを出力

 @users.to_csv(:only => [:last_name, :role]) 
 onlyで指定したカラムを出力 

  @users.to_csv(:headers => false) 
 先頭行にカラム名を出力しない

  @users.to_csv(:except => [:last_name, :role]) 
 exceptで指定したカラム以外を出力

  @users.to_csv(:except => :role, :methods => :admin?) 
 :methodsはカラム名?で記述したカラムのデータのnullを判定しているぽい

 nullだったらfalse null以外はtrueを表示している

このような動作をするようです。
このあたりは、find時に出力データをrails側で制御してもいいかもしれません。

実際にruby on railsでデータをCSVに出力する


コントローラー名/index/hoge.csv

というようにアクション名の後ろにファイル名をつけてブラウザでアクセスすると
データがCSV形式で出力されますので、ファイルに保存後エディタ等で開くとデータを見ることができます。

なお、この出力したファイルをExcelで表示してみるとわかるのですが、
なんと日本語が文字化けします。これはto_csvの出力がUTF8になっているためで、Excelはsjisでないと日本語が文字化けしてしまいます。

原因は出力時の文字コードですので、kconvなどを利用して、CSVデータを出力している部分に tosjis をしてあげればいいでしょう。

この to_csvというplugin は簡単に導入できてコードも数行で済みますので、ruby on rails から CSV形式でデータ出力 を簡単にしたい場合には試してみてはいかがでしょうか?

Ary Djmal / to_csv plugin: Better Excel Compatibility
 http://arydjmal.com/2008/6/11/to_csv-plugin-better-excel-compatibility

arydjmal’s to_csv at master – GitHub
 http://github.com/arydjmal/to_csv

記事を共有

最近人気な記事