この記事では、Laravel開発の中心的な要素の一つである「Facades」に焦点を当てます。
初心者から上級者まで、Laravel Facadesの概念、利点、そして効果的な使い方を徹底解説していきます。
Laravelを使った開発が初めての方でも、この記事を通じてFacadesの基本的な理解を深めることができるでしょう。
また、既にLaravel開発に慣れ親しんでいる方にとっても、Facadesをより効率的に活用するための洞察を提供します。
Facades(ファサード)とは?
Facadeの語源は、「建物の正面」という意味があるようです。
また、Facadeパターンというデザインパターンも存在しています。
Facadeパターンでは、「窓口」という意味で用いられています。
LaravelにおけるFacadesは、この「窓口」の意味が最もあてはまります。
では、次はLaravelでFacadesを利用する目的ですね。
それは、コードがわかりやすくなるということになります。
難しく言うと、「コードの可読性の向上」ということです。
例えば、次のようなコードはわかりやすいですよね。
Cache::get('key')
でも、Facadesを利用しない場合は次の二つの方法を取ることになります。
- 依存性注入を使用する方法
- サービスコンテナを直接利用する方法
依存性注入を使用する方法
Illuminate\Contracts\Cache\Repository インターフェース(または Cache ファサードに対応する具体的なクラス)を注入します。
その後、このインスタンスを使用してキャッシュから値を取得します。
use Illuminate\Contracts\Cache\Repository as Cache; class MyController extends Controller { protected $cache; public function __construct(Cache $cache) { $this->cache = $cache; } public function getIndex() { $value = $this->cache->get('key'); // ... その他の処理 ... } }
Facadesを使用すると、モックを作成しテスト用の状態を設定するのが難しくなります。
そのような場合に、この方法が意味を成すことがあるようです。
サービスコンテナを直接利用する方法
Laravelの app() ヘルパ関数を使用します。
サービスコンテナから直接キャッシュサービスを取得し、値を取得します。
$cache = app('cache'); $value = $cache->get('key');
この方法は任意の場所で使用できます。
ただ、依存関係が明示的ではないため、コードのテストや保守性に影響を与える可能性があります。
ご覧の通り、Facadesを使わない手はありません。
おそらく、無意識にFacadesを利用しているとは思いますけどね。
Facades一覧
Laravel では多くのファサードが利用可能です。
一般的に良く利用されるモノは、以下。
- Cache: キャッシュ操作を提供します。
- Route: ルーティングの定義と操作を提供します。
- DB: データベース操作のためのクエリビルダーを提供します。
- Log: ロギング機能を提供します。
- View: ビューのレンダリングとデータの渡しを提供します。
- Storage: ファイルストレージ操作を提供します。
- Response: HTTPレスポンスの生成を提供します。
- Redirect: リダイレクトレスポンスの生成を提供します。
- Request: HTTPリクエストの情報にアクセスします。
- Session: セッション操作を提供します。
- Auth: 認証操作を提供します。
- Validator: データ検証を提供します。
- Event: イベントのディスパッチとリスニングを提供します。
- Gate: 認可ポリシーの定義と評価を提供します。
- Mail: メール送信を提供します。
- Queue: ジョブキューの操作を提供します。
- Artisan: コマンドラインからのArtisanコマンド実行を提供します。
- Broadcast: ブロードキャストイベントを提供します。
- Config: 設定情報へのアクセスを提供します。
- Lang: ローカライゼーション(多言語対応)を提供します。
なお、ファサードを自作することも可能です。
でも、ある程度は既存のファサードで十分に事足りるとは思いますけどね。
基本的には、ファサードはインフラストラクチャ層に関連する機能を提供するために使用されます。
インフラストラクチャ層は、キャッシュ、セッション、ログなどを指しています。
一覧を見ればわかりますよね?
インフラストラクチャ層がどんなモノであるかを。
つまり、アプリケーションのビジネスロジックは無関係です。
また、Facadesの利点は、静的(Static)にクラスの関数を呼び出せることにあります。
だからと言って、安易にファサードを自作するのはNGとも言えます。
あくまで、Facadesはインフラストラクチャ層へのアクセスや操作を対象にしています。
他のシステムやアプリケーションでも再利用可能なら、自作ファサードもありでしょうね。