【Laravelとトロッコを連携させてデータをExcelに出力する方法】

今回は、【Laravelにてトロッコを使用したデータの出力】について実装していきましょう。

※Laravel バージョンは9をベースにしております。

目次

――――――――――――――――――――――――――――

①前提

②実装

③発展

――――――――――――――――――――――――――――

①前提に

トロッコとは?・・・trocco®は、ETL/データ転送・データマート生成・ジョブ管理・データガバナンスなどの
データエンジニアリング領域をカバーした、分析基盤構築・運用の支援SaaSです。

・「/trocco」のアクセスにて処理の実行していきます。
 ※シンプルに実装したいため、今回はControllerなどは使わずにRouteの中で実装します。

・トロッコにcsvでデータを渡し、そこからExcelにデータを渡し出力していきます。

・文字コードは「UTF-8」を使用します。※Laravelではcsvの出力はデフォルトで「UTF-8」になってます。

②実装

では、実際に処理を見ていきましょう。

Route::get('/trocco', function () {
$callback = function() {
$csv = fopen('php://output', 'w');
$users = User::get(['id','name','email']);
foreach ($users as $user) {
fputcsv($csv, [
$user->id,
$user->name,
$user->email,
]);
}
fclose($csv);
};
return response()->stream($callback, 200, [
'Content-Type' => 'text/csv',
]);
});
Route::get(‘/trocco’, function () {
┗https://○○/troccoにアクセスがあった時の処理を記載します。

$callbackの中でcsvファイルを作成していきます。
$csv = fopen(‘php://output’, ‘w’);
┗ファイルを開きます。

$users = User::get([‘id’,’name’,’email’]);
┗Modelを使用し、userテーブルのidと名前、メールアドレスを取得します。

foreach ($users as $user) {
┗件数分繰り返し処理を行います。

fputcsv($csv, [$user->id,$user->name,$user->email,]);
┗開いたファイルに第二引数の配列を書き込みます。

fclose($csv);
┗ファイルを閉じてcsvファイルの完成です。

最後にreturn response()->stream($callback, 200, [‘Content-Type’ => ‘text/csv’,]);  にてcsvのファイルを『$callback』にて作成し返します。

③発展

このまま実装したままだと、誰でもアクセスされるとユーザー情報が取れてしまいます。

セキュリティ的に問題が大ありなので、アクセスにIP制限をかけたいとおもいます。

IP制限の実装は簡単で、【Route::get(‘/trocco’, function () {】の中の一番上に以下の処理の追加で制限をかけることができます。

// IPアドレス許可リスト


$white_list = [

'○○.○○○.○○.○○○',
'○○.○○○.○○.○○○',
'○○.○○○.○○.○○○',

];

if (config('app.env') != 'local' && ! in_array(request()->ip(), $white_list)) {
abort(403);
}

 

以上でLaravelにてトロッコを使用したデータの出力機能の完成です!!
いつの日か、トロッコについてもまとめてみようと思います。