ディレクトリ構造
イントロダクション
デフォルトのLaravelアプリケーション構造は、大規模なアプリケーションと小規模なアプリケーションの両方にとって、素晴らしい出発点となることを目的としています。しかし、アプリケーションは好きなように自由に構成してください。Laravelは、Composerがクラスをオートロードできる限り、特定のクラスがどこに配置されるかについて、ほとんど制限を課しません。
ルートディレクトリ
Appディレクトリ
appディレクトリには、アプリケーションのコアコードが含まれています。このディレクトリについては、後ほど詳しく説明しますが、アプリケーションのほとんどすべてのクラスがこのディレクトリに配置されます。
Bootstrapディレクトリ
bootstrapディレクトリには、フレームワークを起動するapp.phpファイルが含まれています。このディレクトリには、ルートやサービスのキャッシュファイルなど、パフォーマンスを最適化するためにフレームワークが生成するファイルを格納するcacheディレクトリもあります。
Configディレクトリ
configディレクトリは、その名の通り、アプリケーションのすべての設定ファイルを含んでいます。これらのファイルをすべて読み、利用可能なすべてのオプションをよく理解しておくことを強くお勧めします。
Databaseディレクトリ
databaseディレクトリには、データベースのマイグレーション、モデルファクトリ、シーダーが含まれています。必要であれば、このディレクトリをSQLiteデータベースの保持に使用することもできます。
Publicディレクトリ
publicディレクトリには、アプリケーションに入るすべてのリクエストのエントリポイントであり、オートローディングを設定するindex.phpファイルが含まれています。このディレクトリには、画像、JavaScript、CSSなどのアセットも格納します。
Resourcesディレクトリ
resourcesディレクトリには、ビューと、CSSやJavaScriptなどのコンパイルされていない素のアセットが含まれます。
Routesディレクトリ
routesディレクトリには、アプリケーションのすべてのルート定義が含まれています。デフォルトでは、Laravelにはweb.phpとconsole.phpの2つのルートファイルが用意されています。
web.phpファイルには、セッション状態、CSRF保護、Cookie暗号化を提供するwebミドルウェアグループにLaravelが配置するルートが含まれています。アプリケーションがステートレスなRESTful APIを提供しない場合、すべてのルートはweb.phpファイルで定義される可能性が最も高いでしょう。
console.phpファイルでは、クロージャベースのコンソールコマンドをすべて定義します。各クロージャはコマンドインスタンスに束縛され、各コマンドのI/Oメソッドを操作するためのシンプルなアプローチを可能にします。このファイルはHTTPルートを定義しませんが、アプリケーションへのコンソールベースのエントリポイント(ルート)を定義します。console.phpファイルでタスクのスケジュールもできます。
オプションで、install:apiおよびinstall:broadcasting Artisanコマンドを使用して、APIルート(api.php)およびブロードキャストチャネル(channels.php)の追加ルートファイルをインストールできます。
api.phpファイルには、ステートレスであることを意図したルートが含まれているため、これらのルートを介してアプリケーションに入るリクエストはトークンを介して認証されることを意図しており、セッション状態にアクセスできません。
channels.phpファイルは、アプリケーションがサポートするすべてのイベントブロードキャストチャネルを登録する場所です。
Storageディレクトリ
storageディレクトリには、ログ、コンパイル済みBladeテンプレート、ファイルベースのセッション、ファイルキャッシュ、およびフレームワークによって生成されたその他のファイルが含まれています。このディレクトリは、app、framework、logsディレクトリに分かれています。appディレクトリは、アプリケーションによって生成されたファイルを保存するために使用できます。frameworkディレクトリは、フレームワークが生成したファイルとキャッシュを保存するために使用します。最後に、logsディレクトリにはアプリケーションのログファイルが含まれます。
storage/app/publicディレクトリは、プロファイルアバターなど、一般にアクセス可能であるべきユーザー生成ファイルを保存するために使用できます。このディレクトリを指すシンボリックリンクをpublic/storageに作成する必要があります。php artisan storage:link Artisanコマンドを使用してリンクを作成できます。
Testsディレクトリ
testsディレクトリには、自動テストが含まれています。サンプルとしてPestまたはPHPUnitのユニットテストと機能テストが、最初から用意されています。各テストクラスは、Testという単語で終わる必要があります。/vendor/bin/pestまたは/vendor/bin/phpunitコマンドを使用してテストを実行できます。または、テスト結果をより詳細で美しく表現したい場合は、php artisan test Artisanコマンドを使用してテストを実行できます。
Vendorディレクトリ
vendorディレクトリには、Composerの依存パッケージが含まれています。
Appディレクトリ
アプリケーションの大部分はappディレクトリにあります。デフォルトで、このディレクトリはApp名前空間下にあり、PSR-4オートローディング規約を使用してComposerによってオートロードされます。
デフォルトでは、appディレクトリにはHttp、Models、Providersディレクトリが含まれています。しかし、`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ディレクトリ
Broadcastingディレクトリには、アプリケーションのすべてのブロードキャストチャネルクラスが含まれています。これらのクラスは、make:channelコマンドを使用して生成されます。このディレクトリはデフォルトでは存在しませんが、最初のチャネルを作成すると作成されます。チャネルについてさらに詳しく知りたい場合は、イベントブロードキャストのドキュメントを確認してください。
Consoleディレクトリ
Consoleディレクトリには、アプリケーションのすべてのカスタムArtisanコマンドが含まれています。これらのコマンドは、make:commandコマンドを使用して生成できます。
Eventsディレクトリ
このディレクトリはデフォルトでは存在しませんが、event:generateおよびmake:event Artisanコマンドによって作成されます。Eventsディレクトリには、イベントクラスが格納されます。イベントは、特定のアクションが発生したことをアプリケーションの他の部分に警告するために使用でき、高い柔軟性と分離性を提供します。
Exceptionsディレクトリ
Exceptionsディレクトリには、アプリケーションのすべてのカスタム例外が含まれています。これらの例外は、make:exceptionコマンドを使用して生成できます。
Httpディレクトリ
Httpディレクトリには、コントローラ、ミドルウェア、フォームリクエストが含まれています。アプリケーションに入るリクエストを処理するためのロジックのほとんどすべてが、このディレクトリに配置されます。
Jobsディレクトリ
このディレクトリはデフォルトでは存在しませんが、make:job Artisanコマンドを実行すると作成されます。Jobsディレクトリには、アプリケーションのキュー投入可能なジョブが格納されます。ジョブは、アプリケーションによってキューに投入されるか、現在のリクエストのライフサイクル内で同期的に実行されます。現在のリクエスト中に同期的に実行されるジョブは、コマンドパターンの実装であるため、「コマンド」と呼ばれることもあります。
Listenersディレクトリ
このディレクトリはデフォルトでは存在しませんが、event:generateまたはmake:listener Artisanコマンドを実行すると作成されます。Listenersディレクトリには、イベントを処理するクラスが含まれています。イベントリスナはイベントインスタンスを受け取り、イベントが発行されたことに応答してロジックを実行します。たとえば、UserRegisteredイベントはSendWelcomeEmailリスナによって処理されることがあります。
Mailディレクトリ
このディレクトリはデフォルトでは存在しませんが、make:mail Artisanコマンドを実行すると作成されます。Mailディレクトリには、アプリケーションから送信されるメールを表すクラスがすべて含まれています。Mailオブジェクトを使用すると、メールを作成するすべてのロジックを単一のシンプルなクラスにカプセル化でき、Mail::sendメソッドを使用して送信できます。
Modelsディレクトリ
Modelsディレクトリには、すべてのEloquentモデルクラスが含まれています。Laravelに含まれるEloquent ORMは、データベースを操作するための美しくシンプルなActiveRecord実装を提供します。各データベーステーブルには対応する「モデル」があり、そのテーブルと対話するために使用されます。モデルを使用すると、テーブルのデータをクエリしたり、テーブルに新しいレコードを挿入したりできます。
Notificationsディレクトリ
このディレクトリはデフォルトでは存在しませんが、make:notification Artisanコマンドを実行すると作成されます。Notificationsディレクトリには、アプリケーション内で発生するイベントに関する単純な通知など、アプリケーションによって送信されるすべての「トランザクション」通知が含まれています。Laravelの通知機能は、電子メール、Slack、SMS、またはデータベースに保存されるなど、さまざまなドライバを介した通知の送信を抽象化します。
Policiesディレクトリ
このディレクトリはデフォルトでは存在しませんが、make:policy Artisanコマンドを実行すると作成されます。Policiesディレクトリには、アプリケーションの認可ポリシークラスが含まれています。ポリシーは、ユーザーがリソースに対して特定のアクションを実行できるかどうかを判断するために使用されます。
Providersディレクトリ
Providersディレクトリには、アプリケーションのすべてのサービスプロバイダが含まれています。サービスプロバイダは、サービスコンテナにサービスを結合したり、イベントを登録したり、受信リクエストに備えてアプリケーションを準備するためのその他のタスクを実行したりして、アプリケーションを起動します。
新しいLaravelアプリケーションでは、このディレクトリにすでにAppServiceProviderが含まれています。必要に応じて、このディレクトリに独自のプロバイダを自由に追加できます。
Rulesディレクトリ
このディレクトリはデフォルトでは存在しませんが、make:rule Artisanコマンドを実行すると作成されます。Rulesディレクトリには、アプリケーションのカスタムバリデーションルールオブジェクトが含まれています。ルールは、複雑なバリデーションロジックを単純なオブジェクトにカプセル化するために使用されます。詳細については、バリデーションのドキュメントを確認してください。