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

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

TechAcademyマガジンはオンラインのプログラミングスクールTechAcademy [テックアカデミー]が運営する教育×テクノロジーのWebメディアです。初心者でもすぐ勉強できる記事が2,000以上あります。

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

Rubyについてそもそもよく分からないという方は、Rubyとは何なのか解説した記事をまずご覧ください。

 

なお本記事は、TechAcademyのWebアプリケーションオンラインブートキャンプの内容をもとに紹介しています。

田島悠介

今回は、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オンラインブートキャンプを開催しています。

現役エンジニアがパーソナルメンターとして受講生に1人ずつつき、マンツーマンのメンタリングで学習をサポートし、最短4週間でオリジナルWebサービスを開発することが可能です。

また、現役エンジニアから学べる無料のプログラミング体験会も実施しているので、ぜひ参加してみてください。