日本語Englishイントロダクションなぜ契約?契約リファレンス契約使用法イントロダクションLaravelの契約とはインターフェイスのことで、フレームワークにより提供されているコアサービスを定義したものです。Illuminate\Contracts\Queue\Queue契約はジョブをキューするために必要なメソッドを定義しており、一方Illuminate\Contracts\Mail\Mailer契約はメール送信に必要なメソッドを定義しています。それぞれの契約はフレームワークにより提供されている実装と対応しています。Laravelは多様なドライバーと共に、キューの実装を提供しており、メーラーの実装は、SwiftMailerです。Laravelの全契約はGitHubのリポジトリーで参照できます。これは全契約を素早く参照する方法であり、同時にパッケージ開発者は個別に独立したパッケージを利用する際、参考にできるでしょう。ファサードLaravelのファサードはサービスコンテナをタイプヒントや契約の解決を必要とせず、Laravelのサービスを簡単に使用してもらう手段を提供しています。契約を使うことでクラスの依存を明確に定義することができます。ほとんどのアプリケーションではファサードの使用は問題になりません。緩い結合が本当に必要であれば契約が役に立ちます。続けて読み進めてください!なぜ契約?契約については皆さん多くの質問をお持ちでしょう。インターフェイスを利用する理由を突き詰めれば次の2つになります。緩い結合と単純さです。最初にキャッシュの実装とがっちり結合したコードをレビューしてみましょう。次のコードをご覧ください。}}このクラスにおけるコードは使用しているキャッシュの実装ときつく結合しています。パッケージベンダーの具象キャッシュクラスに依存しているために、結合が強くなっています。パッケージのAPIが変更されたら、同時にこのコードも変更しなくてはなりません。キャッシュの裏で動作している技術(Memcached)を別のもの(Redis)へ置き換えたくなれば、リポジトリーを修正する必要があるというのは起こり得ます。リポジトリーは誰がデータを提供しているかとか、どのように提供しているかという知識を沢山持っていてはいけません。このようなアプローチを取る代わりに、ベンダーと関連がないシンプルなインターフェイスへ依存するコードにより向上できます。}}これでコードは特定のベンダー、しかもLaravelにさえ依存しなくなりました。契約パッケージは実装も依存も含んでいないため、与えられた契約の異なった実装を簡単に記述できます。キャッシュを使用するコードを変更することなく、キャッシュ実装を置き換えることができるようになりました。単純さLaravelのサービスは全てシンプルなインターフェイスの中で適切に定義されているので、サービスが提供する機能も簡単に定義できています。契約はフレームワークの機能の簡単なドキュメントとして使えます。それに加え、シンプルなインターフェイスに基づけばあなたのコードは簡単に理解でき、メンテナンスできるようにもなります。大きくて複雑なクラスの中でどのメソッドが使用可能かを探し求めるよりも、シンプルでクリーンなインターフェイスを参照できます。契約リファレンスLaravelのほぼ全ての契約と、Laravelファサードとの比較一覧です。対応するファサードIlluminate\Contracts\Auth\GuardAuthIlluminate\Contracts\Auth\PasswordBrokerPasswordIlluminate\Contracts\Bus\DispatcherBusIlluminate\Contracts\Broadcasting\BroadcasterIlluminate\Contracts\Cache\RepositoryCacheIlluminate\Contracts\Cache\FactoryCache::driver()Illuminate\Contracts\Config\RepositoryConfigIlluminate\Contracts\Container\ContainerAppIlluminate\Contracts\Cookie\FactoryCookieIlluminate\Contracts\Cookie\QueueingFactoryCookie::queue()Illuminate\Contracts\Encryption\EncrypterCryptIlluminate\Contracts\Events\DispatcherEventIlluminate\Contracts\Filesystem\CloudIlluminate\Contracts\Filesystem\FactoryFileIlluminate\Contracts\Filesystem\FilesystemFileIlluminate\Contracts\Foundation\ApplicationAppIlluminate\Contracts\Hashing\HasherHashIlluminate\Contracts\Logging\LogLogIlluminate\Contracts\Mail\MailQueueMail::queue()Illuminate\Contracts\Mail\MailerMailIlluminate\Contracts\Queue\FactoryQueue::driver()Illuminate\Contracts\Queue\QueueQueueIlluminate\Contracts\Redis\DatabaseRedisIlluminate\Contracts\Routing\RegistrarRouteIlluminate\Contracts\Routing\ResponseFactoryResponseIlluminate\Contracts\Routing\UrlGeneratorURLIlluminate\Contracts\Support\ArrayableIlluminate\Contracts\Support\JsonableIlluminate\Contracts\Support\RenderableIlluminate\Contracts\Validation\FactoryValidator::make()Illuminate\Contracts\Validation\ValidatorIlluminate\Contracts\View\FactoryView::make()Illuminate\Contracts\View\View契約使用法では、契約の実装はどうやって入手するのでしょうか?とてもシンプルです。Laravelでは多くのタイプのクラスがサービスコンテナを利用して依存解決されています。コントローラーを始め、イベントリスナー、フィルター、キュージョブ、それにルートクロージャーもそうです。契約の実装を手に入れるには、依存を解決するクラスのコンストラクターで「タイプヒント」を指定するだけです。例として、次のイベントハンドラーをご覧ください。}}イベントリスナーの依存解決時に、サービスコンテナはクラスのコンストラクターで指定されているタイプヒントを読み取り、適切な値を注入します。サービスコンテナへ何かを登録する方法を学ぶには、ドキュメントを参照してください。kawase(Translation).。