RailsでCSV出力を行う方法を現役エンジニアが解説【初心者向け】
初心者向けにRailsでCSV出力を行う方法について現役エンジニアが解説しています。CSVファイルはデータがカンマで区切られているコンピュータに扱いやすい形式になります。RailsでCSV出力を行う方法には、CSVのライブラリとsend_dataヘルパーを使用します。
テックアカデミーマガジンは受講者数No.1のプログラミングスクール「テックアカデミー」が運営。初心者向けにプロが解説した記事を公開中。現役エンジニアの方はこちらをご覧ください。 ※ アンケートモニター提供元:GMOリサーチ株式会社 調査期間:2021年8月12日~8月16日 調査対象:2020年8月以降にプログラミングスクールを受講した18~80歳の男女1,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(送るデータ,オプション)
実際に書いてみよう
それでは実際に書いてみましょう。
今回は、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ファイルがダウンロードされます。
以上で解説を終わります。
筆者プロフィール
メンター金成さん
フリーランスエンジニア。 使える言語は、ruby python go 。最近はgoにハマってます。 |
内容分かりやすくて良かったです!
ゆかりちゃんも分からないことがあったら質問してね!
分かりました。ありがとうございます!
TechAcademyでは、初心者でもRuby on Railsを使ったプログラミングを習得できるオンラインブートキャンプRuby講座を開催しています。
挫折しない学習方法を知れる説明動画や、現役エンジニアとのビデオ通話とチャットサポート、学習用カリキュラムを体験できる無料体験も実施しているので、ぜひ参加してみてください。