Skip to main content

tap() とは

tap() は「値を使いながら、その値をそのまま返す」ためのヘルパーです。副作用を挟みたいときに使います。 Illuminate\Support\helpers.php の実装はシンプルです。
tap() はコールバックの戻り値を無視します。戻り値は常に元の値です。

基本的な使い方

もっとも基本的な使い方は、値を受け取って処理したあと、そのまま返す形です。
コールバックを省略すると HigherOrderTapProxy が返るので、メソッド呼び出しをそのままつなげられます。

よくある使い所

デバッグ出力を挟む

チェーン中にログやイベント送信を挿入する

返り値を変えずに副作用だけ実行する

返り値を加工したいなら with() や通常の変数代入を使います。tap() は副作用に限定すると読みやすくなります。

Tappable トレイトとは

Illuminate\Support\Traits\Tappableuse すると、クラスに tap() メソッドを追加できます。
つまりインスタンスメソッド版の tap() を提供するだけです。

パッケージ開発での活用

Tappable は Fluent API の途中で副作用を差し込みたいときに便利です。MacroableConditionable を組み合わせると、Laravelらしい拡張可能なビルダーを作れます。
1

フルーエントなクラスを作る

2

Macroable・Conditionable・Tappable を組み合わせて使う

関連ページ:

Laravelコア内での使用例

Laravel本体でも tap() / Tappable は実際に使われています。
  • Illuminate\Routing\RouterMacroableTappable を併用しています
  • Router::respondWithRoute() ではコールバックなしの tap($route)->bind(...) を使い、bind() 実行後も元の $route を返しています
  • Router::prepareResponse() ではレスポンス変換後に tap(..., fn (...) => event(...)) でイベントを発火しています
  • Illuminate\Testing\Fluent\Concerns\Has では ->tap(...)->first(...)->etc() というチェーンでアサーション補助を実装しています
tap() は単体だと小さなヘルパーですが、MacroableConditionable と合わせると Laravel でよく見る読みやすいメソッドチェーンを作りやすくなります。

次のステップ

Macroableトレイト

既存クラスに独自メソッドを追加する設計を学びます。

Conditionableトレイト

when() / unless() による条件分岐チェーンを学びます。
最終更新日 2026年5月19日