Skip to main content

tap() とは

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

基本的な使い方

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

よくある使い所

デバッグ出力を挟む

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

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

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

Tappable トレイトとは

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

パッケージ開発での活用

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

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

2

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

関連ページ:

Laravelコア内での使用例

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

次のステップ

Macroableトレイト

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

Conditionableトレイト

when() / unless() による条件分岐チェーンを学びます。

once() ヘルパーの内部実装

WeakMapを使ったキャッシュの仕組みと循環参照防止への応用を学びます。
最終更新日 2026年9月6日