コントラクト
Laravel の「コントラクト」(機能の約束事を決めたインターフェース)とは何か、ファサードとの違い、使い分け、使い方と、コントラクトとファサードの対応表を説明します。
Laravel の「コントラクト」は、フレームワークが持つ主な機能の約束事を決めた、インターフェース(クラスが守る約束事)の集まりです。たとえば、Illuminate\Contracts\Queue\Queue は、ジョブ(時間のかかる仕事)をキューに入れるために必要なメソッドを決めています。Illuminate\Contracts\Mail\Mailer は、メールを送るために必要なメソッドを決めています。
それぞれのコントラクトには、フレームワークが用意した、実際に動くクラス(実装)があります。たとえば、いろいろなドライバー(使う方式)に対応したキューの実装や、Symfony Mailer で動くメールの実装があります。
Laravel のコントラクトは、すべて、専用の GitHub のリポジトリ(illuminate/contracts)にまとまっています。使えるコントラクトを手早く調べたいときは、ここを見ます。また、このリポジトリは、それだけで使える1つのパッケージにもなっています。Laravel の機能とやり取りするパッケージを作るときに使えます。
コントラクトとファサードの違い#
ファサード(Route::get() のようにクラス名と :: で機能を呼べる窓口)やヘルパー関数を使えば、コントラクトの型を書いてサービスコンテナから取り出さなくても、Laravel の機能を使えます。たいていのファサードには、対応するコントラクトがあります。
ファサードは、クラスのコンストラクタに書かなくても使えます。それに対して、コントラクトを使うと、「このクラスは何の道具を使うか」をはっきり書けます。はっきり書くのが好きな人はコントラクトを、手軽さが好きな人はファサードを選びます。たいていのアプリは、開発のあいだずっとファサードを使っても困りません。
コントラクトを使うとき#
どちらを使うかは、自分とチームの好みで決めます。どちらでも、しっかりしたアプリを作れます。両方を混ぜてもかまいません。クラスの役目を絞ってあれば、どちらを使っても違いはほとんど出ません。
いくつもの PHP のフレームワークで使うパッケージを作るなら、illuminate/contracts パッケージが役に立ちます。Laravel の機能とのつなぎ方を、インターフェースだけで決められるからです。パッケージの composer.json に、Laravel の実装(中身のあるクラス)を入れなくて済みます。
コントラクトの使い方#
では、コントラクトの実装は、どうやって手に入れるのでしょうか。じつは、とても簡単です。
Laravel では、いろいろな種類のクラスがサービスコンテナを通して作られます。コントローラー・イベントのリスナー・ミドルウェア・キューのジョブ、ルートのクロージャ(名前のない関数)まで、そうです。だから、コントラクトの実装がほしいときは、そのクラスのコンストラクタに、インターフェースの型を書くだけで済みます。
たとえば、次のイベントのリスナーを見てください。
<?php
namespace App\Listeners;
use App\Events\OrderWasPlaced;
use App\Models\User;
use Illuminate\Contracts\Redis\Factory;
class CacheOrderInformation
{
/**
* Create the event listener.
*/
public function __construct(
protected Factory $redis,
) {}
/**
* Handle the event.
*/
public function handle(OrderWasPlaced $event): void
{
// ...
}
}
リスナーが作られるとき、サービスコンテナは、コンストラクタに書かれた型を読み取って、ふさわしい値を渡します。サービスコンテナへの登録のしかたは、サービスコンテナのページにあります。
コントラクトの一覧#
次の表は、Laravel のコントラクトと、同じ役目のファサードの対応です。コントラクトの名前は、Illuminate\Contracts\ より後ろの部分だけを書いています。たとえば Auth\Guard は Illuminate\Contracts\Auth\Guard です。ファサードが「なし」のものは、対応するファサードがありません。
| コントラクト | 対応するファサード |
|---|---|
Auth\Access\Authorizable |
なし |
Auth\Access\Gate |
Gate |
Auth\Authenticatable |
なし |
Auth\CanResetPassword |
なし |
Auth\Factory |
Auth |
Auth\Guard |
Auth::guard() |
Auth\PasswordBroker |
Password::broker() |
Auth\PasswordBrokerFactory |
Password |
Auth\StatefulGuard |
なし |
Auth\SupportsBasicAuth |
なし |
Auth\UserProvider |
なし |
Broadcasting\Broadcaster |
Broadcast::connection() |
Broadcasting\Factory |
Broadcast |
Broadcasting\ShouldBroadcast |
なし |
Broadcasting\ShouldBroadcastNow |
なし |
Bus\Dispatcher |
Bus |
Bus\QueueingDispatcher |
Bus::dispatchToQueue() |
Cache\Factory |
Cache |
Cache\Lock |
なし |
Cache\LockProvider |
なし |
Cache\Repository |
Cache::driver() |
Cache\Store |
なし |
Config\Repository |
Config |
Console\Application |
なし |
Console\Kernel |
Artisan |
Container\Container |
App |
Cookie\Factory |
Cookie |
Cookie\QueueingFactory |
Cookie::queue() |
Database\ModelIdentifier |
なし |
Debug\ExceptionHandler |
なし |
Encryption\Encrypter |
Crypt |
Events\Dispatcher |
Event |
Filesystem\Cloud |
Storage::cloud() |
Filesystem\Factory |
Storage |
Filesystem\Filesystem |
Storage::disk() |
Foundation\Application |
App |
Hashing\Hasher |
Hash |
Http\Kernel |
なし |
Mail\Mailable |
なし |
Mail\Mailer |
Mail |
Mail\MailQueue |
Mail::queue() |
Notifications\Dispatcher |
Notification |
Notifications\Factory |
Notification |
Pagination\LengthAwarePaginator |
なし |
Pagination\Paginator |
なし |
Pipeline\Hub |
なし |
Pipeline\Pipeline |
Pipeline |
Queue\EntityResolver |
なし |
Queue\Factory |
Queue |
Queue\Job |
なし |
Queue\Monitor |
Queue |
Queue\Queue |
Queue::connection() |
Queue\QueueableCollection |
なし |
Queue\QueueableEntity |
なし |
Queue\ShouldQueue |
なし |
Redis\Factory |
Redis |
Routing\BindingRegistrar |
Route |
Routing\Registrar |
Route |
Routing\ResponseFactory |
Response |
Routing\UrlGenerator |
URL |
Routing\UrlRoutable |
なし |
Session\Session |
Session::driver() |
Support\Arrayable |
なし |
Support\Htmlable |
なし |
Support\Jsonable |
なし |
Support\MessageBag |
なし |
Support\MessageProvider |
なし |
Support\Renderable |
なし |
Support\Responsable |
なし |
Translation\Loader |
なし |
Translation\Translator |
Lang |
Validation\Factory |
Validator |
Validation\ValidatesWhenResolved |
なし |
Validation\ValidationRule |
なし |
Validation\Validator |
Validator::make() |
View\Engine |
なし |
View\Factory |
View |
View\View |
View::make() |
関連するページ#
公式ドキュメント(英語)
2026年10月5日時点の内容をもとに、日本語でまとめています。