今回は、【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',
]);
});
$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);
}
$white_list = [
'○○.○○○.○○.○○○',
'○○.○○○.○○.○○○',
'○○.○○○.○○.○○○',
];
if (config('app.env') != 'local' && ! in_array(request()->ip(), $white_list)) {
abort(403);
}
以上でLaravelにてトロッコを使用したデータの出力機能の完成です!!
いつの日か、トロッコについてもまとめてみようと思います。