Article Blog / Article

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

  • Laravel
Date 2022.05.27 Author 宮野 比伊呂

Marble//Blog//Article

Scroll
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も合わせて検討したほうが良いと思います。

RRelated

関連記事

25年使い続けたAdobeを解約した日のイメージ

25年使い続けたAdobeを解約した日

25年使い続けたAdobeを解約し、今は1日14時間Claudeと向き合っています。デザイン、コーディング、プログラミングという制作の順...

  • MARBLE通信
Adobe XDデザインを見てCSS設計を決めるときに考えていることのイメージ

Adobe XDデザインを見てCSS設計を決めるときに考えていること

Adobe XDのデザインデータを見てからCSS設計を決める際に、普段確認しているポイントをまとめました。コーディング前に意識して...

  • HTML/CSS
Adobe XDデータを受け取ったら最初に確認していることのイメージ

Adobe XDデータを受け取ったら最初に確認していること

Adobe XDデータを受け取ったあと、コーディング前に確認しているポイントを実務目線で整理。アートボードサイズやフォント、余白...

  • HTML/CSS