Laravel Filamentで久々の実装作業
最近は設計や導入支援に比重が偏っていたのですが、久しぶりにLaravelで手を動かす機会がありました。
「特殊案件管理システム」にCSV出力機能を追加する作業です。
久々に「エンジニアっぽいこと」をやれて、少しうれしくなりました。
FilamentのExport Actionは使わない方針
FilamentにはCSVを出力する「Export Action」という便利な機能があります。
公式ドキュメントでも紹介されていますが、今回は使用を見送りました。
理由はシンプルで、出力形式を細かくコントロールしたかったからです。
分析用途で利用するCSVなので、文字エンコードや列構成の自由度が重要になります。
Export Actionでは対応が難しそうだったため、自作することにしました。
実装の仕様と現時点の進捗
今回のCSV出力機能は以下のような仕様です。
- 一覧画面の検索条件をそのまま出力対象の絞り込みに使用
- 一覧上部に「CSVダウンロード」ボタンを配置
- ボタンをクリックすると別タブが開いてCSVのダウンロードが始まり、終了後にタブが自動で閉じる


現時点では、出力対象のデータを集めて、一覧画面に「CSVダウンロード」ボタンを表示するところまで実装しました。
データ構造の整備に一番時間を使った
今回対象としているデータは以下のようなリレーション構造になっています。
- 「業務情報」 → 「見積明細」(1:多)
- 「業務情報」 → 「請求情報」 → 「請求明細」(1:多 → 1:多)
つまり、「業務情報」を起点として複数の明細が紐づく構造です。
この複雑な構造を1行のCSVにどう落とし込むかを考えるのに、2時間ほど使いました。
JOINだけでは済まず、ある程度データを分解・変形しながら整える必要があります。
今後の予定
現時点では、まだCSVとしての出力処理は完成していません。
今後の作業としては以下のような流れを予定しています。
- 集めたデータをエクセルで開ける形式(Shift-JIS、BOM付きなど)に整形
- 実際にCSVファイルとして出力する処理の作成
- ダウンロード処理の動作確認とテスト
分析に使える形にするため、整形処理にはある程度の工夫が必要です。
明日以降で順次対応していく予定です。
地味だけど大事な作業
派手な機能ではありませんが、業務データを扱う以上、最終的に「出力して分析できる」ことは重要です。
今回はそのための一歩として、CSV出力処理の実装に着手しました。
こういう作業を黙々とこなしていると、「コンサルって言ってるけど、たぶん何でも屋です」というブログタイトルがしっくり来ます。