この記事はアピリッツの技術ブログ「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