RailsでCSV出力を行う方法を現役エンジニアが解説【初心者向け】

初心者向けにRailsでCSV出力を行う方法について現役エンジニアが解説しています。CSVファイルはデータがカンマで区切られているコンピュータに扱いやすい形式になります。RailsでCSV出力を行う方法には、CSVのライブラリとsend_dataヘルパーを使用します。

TechAcademyマガジンはオンラインのプログラミングスクールTechAcademy [テックアカデミー]が運営。初心者向けに解説した記事が4,000以上あります。現役エンジニアの方はこちらをご覧ください。

RailsでCSV出力を行う方法について解説します。

 
そもそもRubyについてよく分からないという方は、Rubyとは何なのか解説した記事を読むとさらに理解が深まります。

なお本記事は、TechAcademyのオンラインブートキャンプRuby講座の内容をもとに紹介しています。
 

田島悠介

今回は、Rubyに関する内容だね!

大石ゆかり

どういう内容でしょうか?

田島悠介

RailsでCSV出力を行う方法について詳しく説明していくね!

大石ゆかり

お願いします!

 

CSVとは

CSVとは、comma-separated valuesの略で「,」で区切られたテキストデータのことを指します。

Webアプリケーション開発では、CSVでの出力機能を作成することがよくあります。
これを期にCSV出力機能の作成方法を覚えて、作れるようになりましょう。

RailsでCSV出力を行う方法

RailsでCSV出力を行う方法には、CSVのライブラリとsend_dataヘルパーを使用します。
CSVのライブラリは、CSVファイルの作成を行うことができ、send_dataヘルパーでダウンロード機能を作成できます。

今回はCSVのgenerateメソッドを使用してCSVを作成します。

使い方は以下の通りです。

CSV.generate do |csv|
   処理
end

また、send_dataヘルパーでユーザーがCSVファイルをダウンロードできるようにします。
第1引数で送信するデータを指定し、第2引数以降でファイルの名前やデータタイプの指定を行います。

使い方は以下のようになります。

send_data(送るデータ,オプション)

 

[PR] Rubyのプログラミングで挫折しない学習方法を動画で公開中

実際に書いてみよう

それでは実際に書いてみましょう。

今回は、textとauthorというフィールドを持つPostモデルをCSVで出力する方法を書いていきます。
まずは、posts_controllerで以下のコードを書きます。忘れずにCSVのライブラリをrequireしてください。

 

require 'csv'

class PostsController < ApplicationController
  def index
    @posts = Post.all
  end
end

 

次にrespond_toでcsvで出力するときの処理を追加します。

 

require 'csv'

class PostsController < ApplicationController
  def index
    @posts = Post.all

    respond_to do |format|
      format.html
      format.csv
    end
  end
end

CSVを出力する処理を追加して、CSVのリクエストが来た時にCSVファイルをダウンロードできるようにします。

 

require 'csv'

class PostsController < ApplicationController
  def index
    @posts = Post.all

    respond_to do |format|
      format.html
      format.csv do |csv|
        send_posts_csv(@posts)
      end
    end
  end

  def send_posts_csv(posts)
    csv_data = CSV.generate do |csv|
      header = %w(id text author)
      csv << header

      posts.each do |post|
        values = [post.id,post.text,post.author]
        csv << values
      end

    end
    send_data(csv_data, filename: "posts.csv")
  end
end

これでコントローラーの準備は終わりです。

最後にviewで以下のボタンを設置すれば完成です。

<%= link_to "csvで出力する",posts_path(format: :csv) %>

クリックすると、CSVファイルがダウンロードされます。

以上で解説を終わります。

 

筆者プロフィール

メンター金成さん

フリーランスエンジニア。
Railsの案件を中心に、様々なアプリケーションを開発してます。

使える言語は、ruby python go 。最近はgoにハマってます。

 

大石ゆかり

内容分かりやすくて良かったです!

田島悠介

ゆかりちゃんも分からないことがあったら質問してね!

大石ゆかり

分かりました。ありがとうございます!

 

TechAcademyでは、初心者でも最短4週間でRuby on Railsを使ったプログラミングを習得できるオンラインブートキャンプRuby講座を開催しています。

挫折しない学習方法を知れる説明動画や、現役エンジニアとのビデオ通話とチャットサポート、学習用カリキュラムを体験できる無料体験も実施しているので、ぜひ参加してみてください。