• Laravel

LaravelとFast ExcelでCSVエクスポートする

LaravelとFast ExcelでCSVエクスポートする

LaravelでCSVをエクスポートする際、Fast-Excelを使うと簡単にエクスポートできます。
また、出力件数が多い場合でも、ちょっとした工夫でメモリ使用量を抑えることができます。
Fast-ExcelのREADMEに書いてある通りですが、サンプルのリポジトリも公開してあるので合わせて確認いただければと思います。

Fast-Excelのインストール

Composerコマンドでインストールするだけです。

    
composer require rap2hpoutre/fast-excel 
    

CSVダウンロード

次のソースはサンプルリポジトリの「app/Http/Controllers/Controller.php」から抜粋したソースです。
「downloadCsv」により「SampleItem」モデルを通じて「sample_items」テーブルから取得したデータがCSVエクスポートされます。

    
    function sampleItemsGenerator()
    {
        /*
         出力対象のモデル、条件などを指定します
         cursor()とyieldによりメモリ使用量を抑えます
        */ 
        foreach (SampleItem::where('price', '>', 10000)->orderBy('id')->cursor() as $entry) {
            yield [
                '名前' => $entry->name,
                'UUID' => $entry->uuid,
                '概要文' => $entry->description,
                'カラー' => $entry->color,
                '価格' => $entry->price,
            ];
        }
    }

    function downloadCsv()
    {
        return (new FastExcel($this->sampleItemsGenerator()))->download('sample.csv');
    }
    

Fast-ExcelのREADMEに記載がありますが、メモリ使用量を抑えるために「sampleItemsGenerator」のforeachでは「cursor()」を使用しています。
「cursor()」ではなく「get()」でも動作しますが、出力件数に応じてメモリ使用量が大幅に増えてしまいます。
なお、Laravelの公式ドキュメントに記載の通り、「cursor()」でもPDOドライバなどがキャッシュしてしまうため、出力件数に比例してメモリ使用量は多くなります。

サンプルリポジトリについて

実際に触って確かめたい方はサンプルリポジトリのソースをご確認いただくか、README.mdに記載の手順にてセットアップしてご確認いただけます。
READMEの手順でセットアップする際はDockerが必要なので、予めDocker Desktopなどのインストールをお願いします。

なお、サンプルリポジトリにはテストデータ作成用のSeederも用意してあるので確認しやすいと思います。

まとめ

Fast-Excelを使ってCSVファイルをエクスポートする方法についてご紹介しました。
Fast-Excelはシンプルで軽量なCSVエクスポートが可能ですが、その名の通り、Excelファイルを扱うことも可能です。
シンプルな反面、機能が少なめなので、Excelファイルを扱う際はLaravel Excelも合わせて検討したほうが良いと思います。

  • Laravel
宮野 比伊呂

MIYANO HIIRO Chief Technology Officer / 宮野 比伊呂

記事をもっと見る

Our Signature Products, Born from Insight.

提案から生まれた、
MARBLEの代表プロダクト

お客様の課題を起点に、MARBLEが自ら構想し、
仕組みからデザイン、開発、運用まで一貫してつくり上げたプロダクト群です。
業務改善、運営効率化、新たな顧客体験の創出など、
企業の事業成長に直結する“実装された解決策”を形にしています。

  1. 01 入退場システム

    Entry System

    入退場システムのイメージ

    全国15店舗、会員数50万人以上のこども向けパークで稼働する入退場・決済・顧客管理システム。
    受付の効率化と回転率の向上を実現し、運営データの一元管理を可能にしています。

  2. 02 自動配送システム

    Delivery Routing

    50台のトラック、年間350日の配送を最適化する自動ルート生成システム。
    紙のFAXで届く約500件の配送情報をデジタル化し、最適ルートを自動で算出することで、大幅な業務効率化を実現しました。

  3. 03 会話型コマース連携

    Auto Routing

    ライブチャットでの接客からEC購入までを一つの導線でつなぐ会話型コマースシステム。
    リアルタイムの対話で顧客の購買意欲を高め、高いコンバージョン率につながる仕組みを構築しています。