富山のシステム開発・Web制作会社

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

この記事を書いた人
Chief Technology Officer

よく読まれている記事

iOS16.4のWebプッシュ通知を試す

Laravel Sailで開発環境を構築する

【jQuery】アクセスごとに動画とポスター画像をランダム表示させる方法

iPhoneのSafariでデバッグする方法

TensorFlow Lite Model Makerでカスタムモデルを作成する

LaravelとBackpackで構築した管理画面をカスタマイズする

【CSS】コンテンツ量が少ない時だけフッターを下部に固定する方法

LaravelとBackpackで管理画面を爆速で構築する

アクセス数バク上がり!MARBLEのアクセス数増加方法を大公開!

Flutter SDKのバージョンをプロジェクト別に指定する

関連記事

Laravel Sailで開発環境を構築する

LaravelとBackpackで構築した管理画面をカスタマイズする

LaravelとBackpackで管理画面を爆速で構築する