Skip to main content

Fluentクラスとは

Fluent クラスは、配列をオブジェクトのように扱える汎用ユーティリティクラスです。Illuminate\Support\Fluent に実装されており、Laravel 初期バージョンから存在していながら、公式ドキュメントにはほとんど記載されていません。 内部的には配列をプロパティで管理し、マジックメソッド(__get / __set / __call)を通じてプロパティのような読み書きを実現しています。
Laravel 11 で fluent() ヘルパーが追加され、Fluent クラスも機能強化されたため、今こそ活用すべき優れたクラスです。

インスタンス作成

コンストラクタ

make() ファクトリメソッド

fluent() ヘルパー関数

Laravel 11 では fluent() ヘルパーが追加されました。Fluent::make() と同等です。

プロパティへのアクセス

動的プロパティの読み書き

メソッドチェーン

__call マジックメソッドによって、存在しないメソッドを呼び出すとプロパティが設定されます。メソッドは $this を返すため、チェーンできます。
この仕組みにより、配列の代わりに流暢なAPI(Fluent Interface)で値を設定できます。

主要なメソッド

get() — ドット記法でアクセス

set() — ドット記法でセット

fill() — 複数プロパティを一度に設定

all() — すべてのプロパティを配列で取得

scope() — ネストされた値を新しい Fluent に変換

これにより、ネストされた配列を別の Fluent オブジェクトとして扱えます。

value() — デフォルト値をコールバックで動的に指定

配列操作

toArray() — 配列に変換

getAttributes() — 内部属性を直接アクセス

ArrayAccess インターフェース

Fluent は ArrayAccess を実装しているため、配列のように操作できます。

IteratorAggregate インターフェース

Fluent は foreach でループできます。

JSON 処理

toJson() — JSON 文字列に変換

toPrettyJson() — 整形した JSON に変換

JsonSerializable インターフェース

Fluent は JsonSerializable を実装しているため、json_encode() で直接変換できます。

状態確認

isEmpty() / isNotEmpty()

Conditionable トレイト

Fluent は Conditionable トレイトを使用しており、条件付き処理をサポートします。
when() / unless() メソッドを使うことで、条件に基づいた設定を流暢に記述できます。

Macroable トレイト

Fluent は Macroable トレイトも使用しており、動的にメソッドを追加できます。

実践的なユースケース

API レスポンスビルダー

コンフィグビルダー

リクエストパラメーターの検証・変換

モデルと Fluent の組み合わせ

フォームデータの正規化

他のクラスとの比較

Fluent vs Array

Fluent vs Model

内部実装の詳細

__call メソッドは、マクロが登録されていない場合、メソッド名をプロパティキーとして属性に値を設定し、$this を返します。これがメソッドチェーンを可能にしています。
Fluent は以下のトレイトを使用しており、それぞれ異なる機能を提供しています:
  • Conditionablewhen() / unless() で条件付き処理
  • InteractsWithDatadata() などのデータ操作メソッド
  • Macroable — 動的メソッド追加

次のステップ

Collection クラス

複数要素を扱う Collection クラスを深掘りします。

Conditionable トレイト

条件付き処理を流暢に記述する Conditionable トレイトを学びます。

Macroable トレイト

既存クラスに動的メソッドを追加する Macroable トレイトを学びます。
最終更新日 2026年6月15日