Skip to main content

Manager とは

Illuminate\Support\Manager は Laravel 4.0 の頃から存在する抽象クラスです。キャッシュ・セッション・メールなど、複数の「ドライバー」を切り替えて使えるシステムを簡単に構築するための基盤を提供します。 「ドライバー」とは、同じインターフェースを持ちながら内部実装が異なるバックエンドのことです。たとえばセッションなら filecookiedatabaseredis といったドライバーがあり、設定ファイルの driver キーで切り替えます。

フレームワーク内での利用状況

Manager という名前が付いていても Illuminate\Support\Manager を継承していないクラスが存在します。 継承していないクラスも extend() で拡張する基本的な考え方は同じです。そのため、Manager パターンを理解することがフレームワーク全体の動作理解につながります。

基本的な仕組み

driver() — ドライバーを取得する

driver() を呼ぶと、次の手順でドライバーが解決されます。 実際のソースコードを見ると、ドライバー名から Str::studly() でメソッド名を組み立てています。
つまり file ドライバーなら createFileDriver() が、my-custom ドライバーなら createMyCustomDriver() が呼ばれます。

extend() — カスタムドライバーを登録する

extend() にドライバー名とクロージャを渡すことで、独自のドライバーを登録できます。クロージャの引数はコンテナインスタンスです。
extend() はクロージャを $this にバインドするため、クロージャ内で Manager のプロパティやメソッドにアクセスできます。

__call — デフォルトドライバーへの委譲

Manager クラスには __call が実装されており、Manager 自身に存在しないメソッド呼び出しはデフォルトドライバーに自動的に委譲されます。
これにより SessionManager::get('key') のように Manager を直接使いつつ、実際の処理はドライバーに任せるという流れが実現しています。

SessionManager の実装例

Illuminate\Session\SessionManager を見ると、Manager の使い方が具体的にわかります。

自作パッケージで Manager を使う

基本的な実装

通知サービスを例に、Manager を継承したカスタムクラスを作ります。
1

Manager を継承したクラスを作る

2

サービスプロバイダーで登録する

3

カスタムドライバーを追加する

4

使用する

MultipleInstanceManager

Illuminate\Support\MultipleInstanceManager は Laravel 10 で追加されたクラスです。Manager がドライバーの「種類」を管理するのに対し、MultipleInstanceManager は名前付きの「インスタンス」を複数管理できます。

Manager との違い

必須メソッド

MultipleInstanceManager を継承する場合は、3つのメソッドを実装する必要があります。
getInstanceConfig() は名前に対応する設定配列を返します。設定には必ず driver(または $driverKey で指定したキー)が含まれている必要があります。

解決フロー

自作パッケージでの実装例

複数の SMS ゲートウェイに同時対応するパッケージを例にします。
対応する設定ファイル:
使用時は instance() で名前を指定します。
MultipleInstanceManagerManager と同じように extend() でカスタムドライバーを追加できます。また __call も実装されているため、インスタンス自体に存在しないメソッドはデフォルトインスタンスに委譲されます。

ドライバーキャッシュの管理

Manager のキャッシュ操作

MultipleInstanceManager のキャッシュ操作

まとめ

  • Manager はドライバーの「種類」を管理する。createXxxDriver() メソッドを実装し、extend() で拡張する
  • MultipleInstanceManager はドライバーの「インスタンス」を名前ごとに管理する。複数の接続設定が必要なパッケージに適している
  • Manager という名前のクラスがすべて Illuminate\Support\Manager を継承しているわけではない。CacheManagerQueueManager は独自実装

Macroableトレイト

既存クラスに独自メソッドを追加するMacroableトレイトの使い方を学びます。
最終更新日 2026年4月11日