PHP 8.5 パイプ演算子 vs Laravel Collections

PHP 8.5でパイプ演算子が導入されました。ほとんどのLaravel開発者はこれを無視してきました。私たちは長年 collect()->filter()->map() を使用してきました。それで十分に機能します。

その後、SpatieがPiperをリリースしました。これは、パイプ演算子にLaravelスタイルのヘルパーをもたらすライブラリです。配列や文字列に対してスタンドアロンの関数を使用します。

PiperはCollectionsの代わりになるものか? いいえ。目的が異なります。

Piperが優れている点

• ネイティブな値。Collectionsはデータをオブジェクトでラップします。そのため、配列をCollectionsに変換し、また元に戻す必要があります。Piperはプレーンな配列や文字列で動作します。データはネイティブな形式で入力され、ネイティブな形式で出力されます。

• 関数の混在。Collectionのチェーンは、Collectionクラスのメソッドしか呼び出せません。一方、パイプのチェーンはあらゆる関数を受け入れます。Piperのヘルパー、PHPのネイティブ関数、そして独自のカスタム関数を一つのフローの中で混在させることができます。

• 依存関係ゼロ。PiperはLaravelフレームワークを必要としません。そのため、重い依存関係なしにクリーンなコードを書きたいパッケージ開発者にとって最適です。

Collectionsが優れている点

• 機能の深さ。Collectionsには groupBy()pluck() など、100以上のメソッドがあります。Piperには最も一般的なものしかありません。

• 遅延評価(Lazy evaluation)。LazyCollectionsは、メモリ消費を抑えながら大規模なデータセットを処理できます。Piperはステップごとに新しい配列を作成します。これは、大量のデータを扱う際にアプリの速度を低下させる可能性があります。

• エコシステムへの適合性。EloquentはCollectionsを返します。クエリビルダーもCollectionsを返します。Piperを使うためにフレームワークと戦うことは、多くの場合、余計な手間を生むことになります。

• 発見しやすさ(Discoverability)。Collectionの後に -> を入力すると、IDEがすべてのメソッドを表示してくれます。Piperの場合、すべての関数を手動でインポートする必要があります。

大きな落とし穴

PHP 8.5を実行している必要があります。ほとんどのプロダクションサーバーは、まだ8.2または8.4で動作しています。もし8.5を使用していないのであれば、現時点ではPiperは役に立ちません。

導入のアドバイス

パッケージやフレームワークに依存しないコードを書く場合は、Piperを使用してください。オブジェクトのオーバーヘッドなしに、ネイティブな配列を変換したい場合に適しています。

Laravelアプリ内ではCollectionsを使い続けましょう。それらは統合されており、強力で、チームが期待するものです。

Piperは代わりになるものではありません。プロジェクト間の隙間を埋めるためのツールです。

出典: https://dev.to/hafiz619/php-85s-pipe-operator-vs-laravel-collections-where-piper-fits-and-where-it-doesnt-1bkl