Qiita Conference 2025

鹿野壮 (@tonkotsuboy_com)

アウトプットは最強の自己投資 〜発信が人生とキャリアを変えた話〜

3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Ruby on Rails】caxlsx_railsを使用して簡単にExcel出力!

Last updated at Posted at 2024-10-03

はじめに

こんにちは、未経験エンジニア3年目の嶋田です。

今回は、RailsアプリケーションでExcelファイル(.xlsx形式)を生成するためのGem
caxlsx_railsについてご紹介します。

Webサービスの管理画面によくある「ダウンロード」機能ですが、
皆さんも見たことあるのではないでしょうか??

csvダウンロード.png

CSVでの実装が多かったのですが、
初めてExcel形式での出力を実装する機会がありました。

調べてみると…

CSVデータですが、昨今ではダウンロード機能を廃止するサイトが増加傾向にある

そうです。(参考)

そのため、今回はExcel出力をするGemであるcaxlsx_railsを利用して、
RailsアプリケーションでExcelファイルを生成する方法をご紹介します。

ユーザーや依頼者の要望に応えられるように新しい技術を取り入れ、
柔軟に対応できるようになるのはエンジニアにとってすごく嬉しいことですね😄

目次

caxlsx_railsとは

caxlsx_rails(旧称:axlsx_rails)は、Ruby on RailsアプリケーションでExcelファイル(.xlsx形式)を生成するためのGemです。
このGemを利用すると、Railsのビューから直接Excelスプレッドシートを作成し、
データのエクスポート機能を簡単に実装することができます。

RailsでExcel出力の方法について調べると、axlsx_railsというGemの情報がよく出てきます。
しかし、公式サイトを見ると現在はcaxlsx_railsとして提供されていることがわかります。

(ちなみに私も最初、英語をあまり読まずにaxlsx_railsを使っていたのはここだけの話です…😅)

公式リンク→https://github.com/caxlsx/caxlsx_rails

以下に、caxlsx_railsを使ってExcelファイルを生成する手順を説明します。

準備

Gemインストール

まず、Gemをインストールします。Gemfileに以下を追加し、bundle installを実行します。

gem 'caxlsx_rails', '~> 0.6.4'

caxlsx_railscaxlsxに依存しているため、両方のGemをインストールする必要があると公式には書いてありました。

調べてみると…
gem 'caxlsx_rails'のみで自動的にインストールされたという人がいたり、
自動的にはインストールされなかったという人がいるようです。(2023年12月の発言)
更新履歴をみる感じ2人とも0.6.3がリリースされた後ですが
gemのバージョン、環境(特にRubyやRailsのバージョン)による違いでは依存関係が自動的に解決されない可能性があるのかもしれません。

caxlsx_railsは、caxlsxというGemに依存していますが、
環境によっては自動的にインストールされないことがあるため、必要に応じて以下の行も追加してください。

gem 'caxlsx'

ちなみに以下の環境では、gem 'caxlsx_rails', '~> 0.6.4'のみで依存関係のインストールに成功しました。

ruby 3.2.2
Rails 7.1.3.4
caxlsx (4.1.0)
      htmlentities (~> 4.3, >= 4.3.4)
      marcel (~> 1.0)
      nokogiri (~> 1.10, >= 1.10.4)
      rubyzip (>= 1.3.0, < 3)
    caxlsx_rails (0.6.4)
      actionpack (>= 3.1)
      caxlsx (>= 3.0)

依存関係の詳細

  • caxlsx_railsバージョン0.6.4
  • 依存関係:actionpack(>= 3.1)、caxlsx(>= 3.0)

参考:https://rubygems.org/gems/caxlsx_rails?locale=ja

MIMEタイプ登録

次に、MIMEタイプを登録します。
Excelファイルを正しく扱うために、config/initializers/mime_types.rbに以下を追加してください。

Mime::Type.register 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', :xlsx

これでExcelファイル(.xlsx形式)のMIMEタイプが正しく登録されます。

Excelファイルの生成

コントローラーの設定

まず、Excelファイルを生成するためのコントローラーを設定します。
以下は、ProductsControllerの例です。データを取得し、.xlsx形式でレスポンスを返す設定を行います。

class ProductsController < ApplicationController
  def index
    @products = Product.all
    respond_to do |format|
      format.html
      format.xlsx do
        response.headers['Content-Disposition'] = 'attachment; filename="products.xlsx"'
      end
    end
  end
end

ビューの作成

次に、app/views/productsディレクトリにindex.xlsx.axlsxというファイルを作成し、Excelのテンプレートを定義します。

wb = xlsx_package.workbook
wb.add_worksheet(name: "商品一覧") do |sheet|
  sheet.add_row ["商品ID", "商品名", "価格"]
  @products.each do |product|
    sheet.add_row [product.id, product.name, product.price]
  end
end

このテンプレートでは、@productsのデータをExcelシートに書き込んでいます。add_rowメソッドで各行を追加し、データを挿入します。

ダウンロードリンクの追加

ユーザーがExcelファイルをダウンロードできるように、ビューにリンクを追加します。
app/views/products/index.html.hamlに以下のコードを挿入してください。

= link_to 'Excelでダウンロード', products_path(format: :xlsx)

これにより、ユーザーがリンクをクリックすると、products.xlsxファイルがダウンロードされます。

今回はDBやモデルの箇所の紹介はしていませんが、
私の環境で実装した画面とproducts.xlsxファイルは以下です。

実装画面.png

Excel.png

まとめ

今回は、caxlsx_railsを使用してRailsアプリケーションでExcelファイルを生成する方法をまとめてみました。

このGemはシンプルかつ柔軟にExcelファイルを生成できるため、さまざまなデータ形式にも対応可能です。
今後、管理画面でのレポート出力やデータエクスポート機能を実装する際には、ぜひcaxlsx_railsを試してみてください。

最後までお読みいただきありがとうございました。
フィードバックがあれば、気軽にコメントお願いします!
私自身まだまだ勉強中ですので、コメントいただけると勉強になりありがたいです。

3
1
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up

Qiita Conference 2025 will be held!: 4/23(wed) - 4/25(Fri)

Qiita Conference is the largest tech conference in Qiita!

Keynote Speaker

ymrl、Masanobu Naruse, Takeshi Kano, Junichi Ito, uhyo, Hiroshi Tokumaru, MinoDriven, Minorun, Hiroyuki Sakuraba, tenntenn, drken, konifar

View event details
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?