==== ## Laravel のマクロ機能を使ったコレクションの拡張 多くの開発者が知らない高度なテクニックとして、**Collectionクラスへのカスタムメソッド追加(マクロ)**があります。 ### 実装方法 `AppServiceProvider`の`boot`メソッドで、独自のコレクションメソッドを定義できます: ```php use Illuminate\Support\Collection; use Illuminate\Support\ServiceProvider; class AppServiceProvider extends ServiceProvider { public function boot() { Collection::macro('toUpper', function () { return $this->map(function ($value) { return strtoupper($value); }); }); Collection::macro('takeWhileInclusive', function ($callback) { $result = collect(); foreach ($this as $item) { $result->push($item); if ($callback($item)) { break; } } return $result; }); } } ``` ### 使用例 ```php // 通常のコレクションとして使用 $names = collect(['john', 'jane', 'bob']); $upperNames = $names->toUpper(); // ['JOHN', 'JANE', 'BOB'] // 条件付き取得 $numbers = collect([1, 2, 3, 4, 5, 6]); $result = $numbers->takeWhileInclusive(fn($n) => $n >= 4); // [1, 2, 3, 4] ``` ### メリット - コードの再利用性が向上 - チェーンメソッドとして自然に使える - プロジェクト全体で統一されたロジックを共有できる - Eloquentのコレクションでも使用可能 この機能により、プロジェクト固有のビジネスロジックをエレガントに実装できます。