メインコンテンツまでスキップ

ディレクトリ構造

はじめに

デフォルトのLaravelアプリケーション構造は、大規模なアプリケーションや小規模なアプリケーションの両方に最適なスタート地点を提供することを意図しています。ただし、アプリケーションを好きなように整理することができます。Laravelは、クラスがどこにあっても構いません - Composerがクラスをオートロードできればほとんど制限を課しません。

注記

Laravel初心者ですか?最初のLaravelアプリケーションの構築を歩みながら、フレームワークの実演ツアーを提供するLaravel Bootcampをチェックしてみてください。

ルートディレクトリ

Appディレクトリ

appディレクトリには、アプリケーションのコアコードが含まれています。このディレクトリについては近々詳しく調査しますが、ほとんどのクラスはこのディレクトリに含まれます。

ブートストラップディレクトリ

bootstrapディレクトリには、フレームワークをブートストラップするapp.phpファイルが含まれています。このディレクトリには、ルートやサービスのキャッシュファイルなど、パフォーマンス最適化のためのフレームワーク生成ファイルが含まれています。

設定ディレクトリ

configディレクトリは、その名前が示すように、アプリケーションのすべての設定ファイルが含まれています。これらのファイルをすべて読んで、利用可能なすべてのオプションに精通することは素晴らしいアイデアです。

データベースディレクトリ

databaseディレクトリには、データベースのマイグレーション、モデルファクトリ、およびシードが含まれています。必要であれば、このディレクトリを使用してSQLiteデータベースを保持することもできます。

パブリックディレクトリ

publicディレクトリには、すべてのリクエストのエントリーポイントであるindex.phpファイルが含まれており、オートローディングを構成します。このディレクトリには、画像、JavaScript、CSSなどのアセットも含まれています。

リソースディレクトリ

resourcesディレクトリには、ビューと、CSSやJavaScriptなどの生のコンパイルされていないアセットが含まれています。

ルートディレクトリ

routesディレクトリには、アプリケーションのすべてのルート定義が含まれています。デフォルトでは、Laravelにはweb.phpconsole.phpの2つのルートファイルが含まれています。

web.phpファイルには、Laravelがwebミドルウェアグループに配置するルートが含まれており、セッション状態、CSRF保護、およびクッキーの暗号化を提供します。アプリケーションがステートレスでRESTfulなAPIを提供していない場合、ほとんどのルートはおそらくweb.phpファイルで定義されているでしょう。

console.phpファイルは、クロージャベースのコンソールコマンドをすべて定義する場所です。各クロージャはコマンドインスタンスにバインドされ、各コマンドのIOメソッドとの簡単なやり取りを可能にします。このファイルはHTTPルートを定義していないものの、アプリケーションへのコンソールベースのエントリーポイント(ルート)を定義します。console.phpファイルでスケジュールタスクを実行することもできます。

オプションで、install:api および install:broadcasting Artisan コマンドを使用して、API ルート (api.php) およびブロードキャスト チャンネル (channels.php) の追加ルートファイルをインストールすることができます。

api.php ファイルにはステートレスであることが意図されているルートが含まれており、これらのルートを介してアプリケーションに入るリクエストは、トークンを介して認証されることが意図されており、セッション状態にアクセスすることはできません。

channels.php ファイルでは、アプリケーションがサポートするすべての イベントブロードキャスト チャンネルを登録できます。

ストレージディレクトリ

storage ディレクトリには、ログ、コンパイルされた Blade テンプレート、ファイルベースのセッション、ファイルキャッシュ、およびフレームワークによって生成されたその他のファイルが含まれています。このディレクトリは appframeworklogs ディレクトリに分割されています。app ディレクトリは、アプリケーションによって生成されたファイルを保存するために使用できます。framework ディレクトリは、フレームワークによって生成されたファイルとキャッシュを保存するために使用されます。最後に、logs ディレクトリにはアプリケーションのログファイルが含まれています。

storage/app/public ディレクトリは、プロフィールのアバターや他の公開されるべきユーザー生成ファイルを保存するために使用できます。このディレクトリを指す public/storage へのシンボリックリンクを作成する必要があります。このリンクは php artisan storage:link Artisan コマンドを使用して作成できます。

テストディレクトリ

tests ディレクトリには、自動化されたテストが含まれています。例として、PestPHPUnit のユニットテストおよび機能テストが最初から提供されています。各テストクラスは Test という単語で終わる必要があります。テストは /vendor/bin/pest または /vendor/bin/phpunit コマンドを使用して実行できます。また、より詳細で美しいテスト結果を表示したい場合は、php artisan test Artisan コマンドを使用してテストを実行できます。

ベンダーディレクトリ

vendor ディレクトリには、Composer の依存関係が含まれています。

アプリケーションディレクトリ

ほとんどのアプリケーションは app ディレクトリに格納されています。デフォルトでは、このディレクトリは App の名前空間の下にあり、PSR-4 オートローディング標準を使用して Composer によって自動読み込みされます。

デフォルトでは、app ディレクトリには HttpModelsProviders ディレクトリが含まれています。ただし、時間の経過とともに、make Artisan コマンドを使用してクラスを生成すると、app ディレクトリ内にさまざまな他のディレクトリが生成されます。たとえば、app/Console ディレクトリは、make:command Artisan コマンドを実行してコマンドクラスを生成するまで存在しません。

Console ディレクトリと Http ディレクトリについては、それぞれのセクションで詳しく説明しますが、Console ディレクトリと Http ディレクトリは、アプリケーションのコアへの API を提供するものと考えてください。HTTP プロトコルと CLI は、どちらもアプリケーションとやり取りするメカニズムですが、実際にアプリケーションロジックを含んでいません。つまり、これらはアプリケーションにコマンドを発行するための2つの方法です。Console ディレクトリにはすべての Artisan コマンドが含まれ、Http ディレクトリにはコントローラ、ミドルウェア、およびリクエストが含まれます。

注記

app ディレクトリの多くのクラスは、Artisan を介してコマンドを使用して生成することができます。利用可能なコマンドを確認するには、ターミナルで php artisan list make コマンドを実行してください。

ブロードキャストディレクトリ

Broadcasting ディレクトリには、アプリケーションのブロードキャストチャンネルクラスがすべて含まれています。これらのクラスは make:channel コマンドを使用して生成されます。このディレクトリはデフォルトでは存在しませんが、最初のチャンネルを作成すると自動的に作成されます。チャンネルについて詳しくは、イベントブロードキャストのドキュメントを参照してください。

コンソールディレクトリ

Console ディレクトリには、アプリケーションのカスタム Artisan コマンドがすべて含まれています。これらのコマンドは make:command コマンドを使用して生成することができます。

イベントディレクトリ

このディレクトリはデフォルトでは存在しませんが、event:generate および make:event Artisan コマンドによって作成されます。Events ディレクトリには イベントクラス が格納されます。イベントは、特定のアクションが発生したことを他のアプリケーションの部分に通知するために使用され、柔軟性と疎結合性を提供します。

例外ディレクトリ

Exceptions ディレクトリには、アプリケーションのカスタム例外がすべて含まれています。これらの例外は make:exception コマンドを使用して生成することができます。

HTTP ディレクトリ

Http ディレクトリには、コントローラー、ミドルウェア、およびフォームリクエストが含まれています。アプリケーションに入力されるリクエストを処理するためのほとんどのロジックは、このディレクトリに配置されます。

ジョブディレクトリ

このディレクトリはデフォルトでは存在しませんが、make:job Artisan コマンドを実行すると作成されます。Jobs ディレクトリには、アプリケーションの キュー可能なジョブ が格納されます。ジョブはアプリケーションによってキューに入れられるか、現在のリクエストライフサイクル内で同期的に実行されることがあります。現在のリクエスト中に同期的に実行されるジョブは、しばしば「コマンド」と呼ばれます。なぜなら、それらは コマンドパターン の実装であるからです。

リスナーディレクトリ

このディレクトリはデフォルトでは存在しませんが、event:generate または make:listener Artisan コマンドを実行すると作成されます。Listeners ディレクトリには、イベント を処理するクラスが含まれています。イベントリスナーはイベントインスタンスを受け取り、イベントが発生した際にロジックを実行します。たとえば、UserRegistered イベントは SendWelcomeEmail リスナーによって処理されるかもしれません。

メールディレクトリ

このディレクトリはデフォルトでは存在しませんが、make:mail Artisan コマンドを実行すると作成されます。Mail ディレクトリには、アプリケーションから送信される メールを表すクラス がすべて含まれています。メールオブジェクトを使用すると、単一のシンプルなクラスでメールの構築ロジックをカプセル化し、Mail::send メソッドを使用して送信することができます。

モデルディレクトリ

Modelsディレクトリには、Eloquentモデルクラスがすべて含まれています。Laravelに含まれるEloquent ORMは、データベースと連携するための美しい、シンプルなActiveRecord実装を提供します。各データベーステーブルには、そのテーブルとやり取りするために使用される対応する「モデル」があります。モデルを使用すると、テーブル内のデータをクエリしたり、新しいレコードをテーブルに挿入したりできます。

通知ディレクトリ

このディレクトリはデフォルトでは存在しませんが、make:notification Artisanコマンドを実行すると作成されます。Notificationsディレクトリには、アプリケーションから送信される「トランザクション」通知がすべて含まれています。これは、アプリケーション内で発生するイベントに関するシンプルな通知など、さまざまなドライバーを介して通知を送信するLaravelの通知機能を抽象化します。例えば、メール、Slack、SMS、またはデータベースに保存するなどのドライバーがあります。

ポリシーディレクトリ

このディレクトリはデフォルトでは存在しませんが、make:policy Artisanコマンドを実行すると作成されます。Policiesディレクトリには、アプリケーションの認可ポリシークラスが含まれています。ポリシーは、ユーザーがリソースに対して特定のアクションを実行できるかどうかを決定するために使用されます。

プロバイダディレクトリ

Providersディレクトリには、アプリケーションのサービスプロバイダがすべて含まれています。サービスプロバイダは、サービスコンテナ内でサービスをバインドしたり、イベントを登録したり、着信リクエストに備えるためのその他のタスクを実行したりして、アプリケーションを起動します。

新しいLaravelアプリケーションでは、このディレクトリには既にAppServiceProviderが含まれています。必要に応じて、独自のプロバイダをこのディレクトリに追加することができます。

ルールディレクトリ

このディレクトリはデフォルトでは存在しませんが、make:rule Artisanコマンドを実行すると作成されます。Rulesディレクトリには、アプリケーションのカスタムバリデーションルールオブジェクトが含まれています。ルールは、複雑なバリデーションロジックをシンプルなオブジェクトでカプセル化するために使用されます。詳細については、バリデーションドキュメントを参照してください。