Documentation Index
Fetch the complete documentation index at: https://kawax.biz/llms.txt
Use this file to discover all available pages before exploring further.
Contractとは
Laravelの「Contracts」は、フレームワークが提供するコアサービスを定義するインターフェースのセットです。例えば、Illuminate\Contracts\Queue\Queue Contractはジョブのキューイングに必要なメソッドを定義し、Illuminate\Contracts\Mail\Mailer Contractはメール送信に必要なメソッドを定義しています。
各Contractにはフレームワークが提供する対応する実装があります。例えば、Laravelはさまざまなドライバーのキュー実装と、Symfony Mailerを使ったメーラー実装を提供しています。
すべてのLaravel Contractsは専用のGitHubリポジトリにあります。これはすべての利用可能なContractへのクイックリファレンスを提供し、Laravelサービスと連携するパッケージを構築する際に利用できる単一の分離されたパッケージです。
Contractはただのインターフェースです。PHPのインターフェースと全く同じ仕組みで動作します。Laravelはこのインターフェースへの実装を提供し、サービスコンテナを通じて注入します。
ContractとFacadeの違い
ファサードとヘルパー関数は、サービスコンテナからContractを型ヒントで解決する必要なく、Laravelのサービスを簡単に利用する方法を提供しています。ほとんどの場合、各ファサードには対応するContractがあります。 ファサードとContractの主な違いは次のとおりです。| 観点 | ファサード | Contract |
|---|---|---|
| 依存の宣言 | 不要(どこからでも呼び出せる) | コンストラクターで明示的に宣言 |
| テスト | shouldReceive() でモック | 標準的なモックライブラリで差し替え |
| 主な用途 | アプリケーション内の手軽な使用 | パッケージ開発、明示的な依存管理 |
| コードの可読性 | インポートが1行で済む | コンストラクターで依存が一目瞭然 |
Contractをいつ使うか
ContractとFacadeのどちらを使うかは、個人の好みや開発チームの好みによります。ContractとFacadeはどちらも堅牢でテストしやすいLaravelアプリケーションを作成するために使えます。ContractとFacadeは相互に排他的ではありません。アプリケーションの一部ではFacadeを使い、他の部分ではContractに依存することも可能です。 特にContractが有用な場面は次のとおりです。- 複数のPHPフレームワークと連携するパッケージを構築する場合 —
illuminate/contractsパッケージを使ってLaravelサービスとの連携を定義することで、composer.jsonにLaravelの具体的な実装を要求せずに済みます。 - 依存を明示的にしたい場合 — コンストラクターを見るだけでクラスが何に依存しているか一目でわかります。
- 実装を差し替えたい場合 — サービスコンテナを通じて別の実装に差し替えることが容易になります。
Contractの使い方
Contractの実装を取得するにはどうすればよいでしょうか。実はとても簡単です。 コントローラー、イベントリスナー、ミドルウェア、キュージョブ、ルートクロージャなど、Laravelの多くの種類のクラスはサービスコンテナを通じて解決されます。そのため、Contractの実装を取得するには、解決されているクラスのコンストラクターでインターフェースを「型ヒント」するだけです。 例えば、次のイベントリスナーを見てください。カスタムContractの作成
独自のContractを作成することで、アプリケーションのコンポーネント間の依存を明確にできます。サービスプロバイダでバインドする
サービスプロバイダでContractと実装をバインドします。
Stripe から別のプロバイダに切り替える場合も、バインディングを1か所変更するだけで対応でき、コントローラーのコードは変更不要です。
主要なContract一覧
よく使うContractとその対応するファサードの対応表です(一部抜粋)。| Contract | 対応するファサード |
|---|---|
Illuminate\Contracts\Auth\Access\Gate | Gate |
Illuminate\Contracts\Auth\Factory | Auth |
Illuminate\Contracts\Bus\Dispatcher | Bus |
Illuminate\Contracts\Cache\Factory | Cache |
Illuminate\Contracts\Cache\Repository | Cache::driver() |
Illuminate\Contracts\Config\Repository | Config |
Illuminate\Contracts\Console\Kernel | Artisan |
Illuminate\Contracts\Container\Container | App |
Illuminate\Contracts\Encryption\Encrypter | Crypt |
Illuminate\Contracts\Events\Dispatcher | Event |
Illuminate\Contracts\Filesystem\Factory | Storage |
Illuminate\Contracts\Filesystem\Filesystem | Storage::disk() |
Illuminate\Contracts\Hashing\Hasher | Hash |
Illuminate\Contracts\Mail\Mailer | Mail |
Illuminate\Contracts\Notifications\Dispatcher | Notification |
Illuminate\Contracts\Queue\Factory | Queue |
Illuminate\Contracts\Queue\Queue | Queue::connection() |
Illuminate\Contracts\Queue\ShouldQueue | — |
Illuminate\Contracts\Redis\Factory | Redis |
Illuminate\Contracts\Routing\ResponseFactory | Response |
Illuminate\Contracts\Routing\UrlGenerator | URL |
Illuminate\Contracts\Session\Session | Session::driver() |
Illuminate\Contracts\Translation\Translator | Lang |
Illuminate\Contracts\Validation\Factory | Validator |
Illuminate\Contracts\View\Factory | View |
次のステップ
ファサード
ファサードの仕組みとテスト方法を確認します。