はじめに
自分が理解できていない部分を整理しながら、知識を少しずつ深めていくことを目的にこの記事を書いています。
そのため、内容の中には誤りが含まれている可能性もありますが、その点はご容赦ください。
間違いなどがあれば、ぜひコメントなどで教えていただけると嬉しいです!🙇
今日整理していく内容
- chunkById(200, ...)
- Storage::disk('s3')
- xxx::class
chunkById(200, ...)
これはまだ理解できていない部分が多く、雰囲気で使ってしまっている気がしたので整理していきます!
簡単に言うと、データを一度に大量に取得せず、指定した件数ずつ分割して処理するメソッドのようです。
簡単なサンプルコードです:
->chunkById(200, function ($rows) use ($modelClass) {
// 200件ずつ処理
});
1回に200件ずつデータベースから取得して処理しています。全件を一気に読むとメモリが足りなくなるため、分割(チャンク)して処理するテクニックのようですね。
ここでの $rows は200件分のレコードの集まりで、use はクロージャ(無名関数)に外部の変数を渡すための構文です。
今の案件ではあまり使っていませんが、今回使ってPRを出してみようと思います!笑
Storage::disk('s3')
これはなんとなく理解できています!
サンプルコード:
use Illuminate\Support\Facades\Storage;
Storage::disk('s3')->put('uploads/test.txt', 'Hello S3!');
Laravelのファイルストレージ機能(Storageファサード)を使って、S3やローカルなどの保存先を指定する構文です。
ここでは put() でファイルをアップロードしていますが、get(), delete(), exists() なども利用できます。
xxx::class
これはちょっと説明不足だったので、実際のコードを見たほうが早いですね。
use App\Http\Controllers\UserController;
Route::get('/users', [UserController::class, 'index']);
::class は、クラス名を文字列として取得するPHPの構文です。これを使うと、クラス名を文字列で直接書かずに済みます。
つまり、
UserController::class
は内部的に、
"App\\Http\\Controllers\\UserController"
という文字列に展開されます。
クラス名を直接文字列で書かないことで、リファクタリングやIDE補完がしやすくなります。
まとめ
ここまで読んでいただきありがとうございました!
今回の記事では、
- chunkById(200, ...)
- Storage::disk('s3')
- xxx::class
について整理しました。
今までなんとなく使っていた部分を改めて調べてみると、仕組みや意図が少しずつ理解できてきました。引き続きドキュメントを読みながら、しっかりと理解を深めていきたいと思います!💪